INSTEAD OF INSERT
を使用する方がはるかに優れています ここでトリガー:
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();
シーケンスの現在の値をチェックして、別のテーブルに挿入されたものを確認することは、悪い悪い悪いです。 練習。単一のトランザクションでここにいる間でも、それをしないでください。
RETURNING
の問題について混乱しています 私もあなたの質問を読んだときに混乱しているので、情報。関数内でINTO
を使用します ローカルで宣言された変数にデータを入力して、後続のステートメントで使用できるレコード値を保持する句。関数の外では、RETURNING
を使用します 最上位のコードスニペットと同じように句を使用します。