Много по-добре е да използвате INSTEAD OF INSERT
задействайте тук:
CREATE FUNCTION MyFuncName() RETURNS trigger AS $$
DECLARE
id integer;
BEGIN
INSERT INTO tableA (time) VALUES COALESCE(NEW.time, NOW()) RETURNING aPrimaryKey INTO id;
INSERT INTO tableB (aPrimaryKey, someCol1) VALUES (id, NEW.someValue);
RETURN NEW;
END; $$ LANGUAGE PLPGSQL;
CREATE TRIGGER MyView_on_insert INSTEAD OF INSERT ON MyView
FOR EACH ROW EXECUTE PROCEDURE MyFuncName();
Проверката на текущата стойност на последователност, за да видите какво е вмъкнато в друга таблица, е лошо лошо лошо практика. Дори докато сте тук в една транзакция, не го правете.
Объркани сте относно проблема с RETURNING
информация, защото и аз съм объркан, когато прочетох въпроса ви. Вътре във функция използвайте INTO
клауза за попълване на локално декларирани променливи за съхранение на стойности на запис, които след това можете да използвате в следващите изрази. Извън функция използвайте RETURNING
клауза, както правите във вашия най-горен кодов фрагмент.