Você está muito melhor usando um
INSTEAD OF INSERT
acionar aqui: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();
Verificar o valor atual de uma sequência para ver o que foi inserido em outra tabela é ruim ruim ruim prática. Mesmo enquanto estiver aqui em uma única transação, não faça isso.
Você está confuso sobre o problema de
RETURNING
informações, porque também estou confuso quando leio sua pergunta. Dentro de uma função use o INTO
cláusula para preencher variáveis declaradas localmente para armazenar valores de registro que você pode usar em instruções subsequentes. Fora de uma função, use o RETURNING
cláusula como você faz em seu snippet de código mais alto.