Je bent veel beter af met een INSTEAD OF INSERT
trigger hier:
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();
De huidige waarde van een reeks controleren om te zien wat er in een andere tabel is ingevoegd, is slecht slecht slecht oefening. Zelfs als u hier in een enkele transactie bent, doe het niet.
Je bent in de war over de kwestie van RETURNING
informatie, omdat ik ook in de war ben als ik uw vraag lees. Gebruik binnen een functie de INTO
om lokaal gedeclareerde variabelen in te vullen om recordwaarden te bevatten die u vervolgens in volgende instructies kunt gebruiken. Gebruik buiten een functie de RETURNING
clausule zoals u doet in uw meest gebruikte codefragment.