Я написал функцию PL/PGSQL, которая возвращает триггер, поэтому я могу вызывать ее перед вставкой каждой строки. Теперь я понимаю, что мне также хотелось бы, чтобы эта функция возвращала идентификатор вновь вставленной строки. Я не совсем уверен, как действовать, поскольку моя функция должна возвращать триггер. Вот код:
CREATE OR REPLACE FUNCTION f_insert_album() RETURNS TRIGGER AS $$
DECLARE
subj_album_id INTEGER;
BEGIN
-- ... some parts where left out
INSERT INTO t_albums_subjective (user_id, album_id, format_id, location_id, rating)
VALUES (NEW.user_id, obj_album_id, NEW.format_id, NEW.location_id, NEW.rating)
RETURNING id INTO subj_album_id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Bind insert function to trigger
DROP TRIGGER IF EXISTS tr_v_albums_insert ON v_albums;
CREATE TRIGGER tr_v_albums_insert INSTEAD OF INSERT ON v_albums
FOR EACH ROW EXECUTE PROCEDURE f_insert_album();
Я должен сохранить возвращаемый тип моей функции от f_insert_album()
до TRIGGER
, но мне бы очень хотелось также вернуть значение в subj_album_id
, соответствующее id
вновь вставленной строки.
Есть какой-либо способ сделать это? Это вообще возможно? Очевидно, что изменение типа возвращаемого значения не работает с Postgres. Не могли бы вы предложить альтернативный подход, если таковой имеется?
INSERT ... RETURNING...
также для запроса верхнего уровня. Или используйте полезную нагрузку уведомления черезLISTEN
иNOTIFY
. - person Craig Ringer   schedule 02.11.2015