Es mucho mejor usar un INSTEAD OF INSERT
desencadenar aquí:
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 el valor actual de una secuencia para ver qué se insertó en otra tabla es malo malo malo práctica. Incluso mientras esté aquí en una sola transacción, no lo haga.
Estás confundido sobre el problema de RETURNING
información, porque yo también estoy confundido cuando leo tu pregunta. Dentro de una función usa INTO
cláusula para llenar variables declaradas localmente para contener valores de registro que luego puede usar en declaraciones posteriores. Fuera de una función, use el RETURNING
cláusula como lo hace en su fragmento de código superior.