Znacznie lepiej jest użyć INSTEAD OF INSERT
wyzwalacz tutaj:
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();
Sprawdzanie bieżącej wartości sekwencji, aby zobaczyć, co zostało wstawione w innej tabeli, jest złe złe złe ćwiczyć. Nawet jeśli jesteś tutaj w jednej transakcji, nie rób tego.
Nie masz pewności co do kwestii RETURNING
informacje, ponieważ też jestem zdezorientowany, kiedy czytam twoje pytanie. Wewnątrz funkcji użyj INTO
klauzula do wypełniania zadeklarowanych lokalnie zmiennych w celu przechowywania wartości rekordów, które można następnie wykorzystać w kolejnych instrukcjach. Poza funkcją użyj RETURNING
tak jak w swoim najwyższym fragmencie kodu.