Anda jauh lebih baik menggunakan INSTEAD OF INSERT
pemicu di sini:
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();
Memeriksa nilai urutan saat ini untuk melihat apa yang disisipkan di tabel lain adalah buruk, buruk, buruk praktek. Bahkan saat Anda berada di sini dalam satu transaksi, jangan lakukan itu.
Anda bingung dengan masalah RETURNING
informasi, karena saya juga bingung ketika membaca pertanyaan Anda. Di dalam suatu fungsi gunakan INTO
klausa untuk mengisi variabel yang dideklarasikan secara lokal untuk menyimpan nilai rekaman yang kemudian dapat Anda gunakan dalam pernyataan berikutnya. Di luar fungsi, gunakan RETURNING
klausa seperti yang Anda lakukan di cuplikan kode teratas.