Sie sind viel besser dran, wenn Sie ein INSTEAD OF INSERT
verwenden hier auslösen:
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();
Den aktuellen Wert einer Sequenz zu überprüfen, um zu sehen, was in eine andere Tabelle eingefügt wurde, ist schlecht schlecht schlecht trainieren. Tun Sie es nicht, auch wenn Sie hier in einer einzigen Transaktion sind.
Sie sind verwirrt über das Problem RETURNING
Informationen, weil ich auch verwirrt bin, wenn ich Ihre Frage lese. Verwenden Sie innerhalb einer Funktion den INTO
-Klausel zum Füllen lokal deklarierter Variablen zum Speichern von Datensatzwerten, die Sie dann in nachfolgenden Anweisungen verwenden können. Verwenden Sie außerhalb einer Funktion den RETURNING
-Klausel wie in Ihrem obersten Code-Snippet.