Mnohem lépe na tom je použití INSTEAD OF INSERT
spusťte zde:
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();
Kontrola aktuální hodnoty sekvence, abyste viděli, co bylo vloženo do jiné tabulky, je špatné špatné špatné praxe. Nedělejte to, i když jste zde v rámci jedné transakce.
Jste zmateni v otázce RETURNING
informace, protože jsem také zmaten, když čtu vaši otázku. Uvnitř funkce použijte INTO
klauzule k naplnění lokálně deklarovaných proměnných do záznamových hodnot, které pak můžete použít v následujících příkazech. Mimo funkci použijte RETURNING
klauzule stejně jako ve vašem nejvyšším fragmentu kódu.