È molto meglio usare un INSTEAD OF INSERT
attiva qui:
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();
Controllare il valore corrente di una sequenza per vedere cosa è stato inserito in un'altra tabella è bad bad bad la pratica. Anche mentre sei qui con un'unica transazione, non farlo.
Sei confuso riguardo al problema di RETURNING
informazioni, perché anch'io sono confuso quando leggo la tua domanda. All'interno di una funzione usa INTO
clausola per popolare le variabili dichiarate localmente per contenere i valori del record che è quindi possibile utilizzare nelle istruzioni successive. Al di fuori di una funzione, usa il RETURNING
clausola come fai nel tuo snippet di codice più in alto.