postgres TRIGGER upsert с возвращением - PullRequest
1 голос
/ 23 января 2020

Мне нужна функция upsert, которая возвращает (новый / существующий) идентификатор строки.

Ссылка на мой предыдущий вопрос. Ранее я спрашивал о правиле postgres создать правило при вставке ничего не делать, если существует вставка в противном случае; RETURNING id но похоже, что это невозможно.

Итак, я прибегаю к триггеру

CREATE OR REPLACE FUNCTION upsert_asset() RETURNS trigger AS $trigger_bound$
BEGIN
    INSERT INTO asset(symbol, name, type, status)
    VALUES (NEW.symbol, NEW.name, NEW.type, NEW.status)
    ON CONFLICT (symbol) DO UPDATE SET symbol = EXCLUDED.symbol;
    RETURN NEW;
END;
$trigger_bound$
LANGUAGE plpgsql;

CREATE OR REPLACE TRIGGER upsert_asset_trigger
AFTER INSERT ON asset
FOR EACH ROW
EXECUTE PROCEDURE upsert_asset();

Я проверял выше и работает. Итак, мои вопросы

  1. Является ли этот триггер правильным способом для достижения этой функциональности? Есть ли какие-либо проблемы с расой / проблемы с производительностью, о которых мне следует знать?
  2. Как можно обобщить этот запрос, не задавая имена столбцов? актив (символ, имя, тип, статус). я не хочу обращать внимание на это правило каждый раз, когда меняю стол. Можно ли сказать NEW. * Или column. * Или что-то еще? Какие psuedorelations доступны для достижения этой цели? Обратите внимание, что есть также некоторые столбцы по умолчанию. Так как же NEW.default_column получить значение, если оператор вставки оставил этот столбец в операторе вставки?

Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...