Postgresのトリガーはトリガーコードを直接提供しませんが、トリガー関数を呼び出します 、任意の数のトリガーから呼び出すことができますが、多くの場合、1つの特定のテーブルの1つの特定のイベント用にカスタマイズされています。
トリガー機能:
CREATE OR REPLACE FUNCTION trg_some_tbl_foo()
RETURNS trigger AS
$func$
BEGIN
INSERT INTO some_tbl(key, name, describe) -- or some_other_tbl?
VALUES (OLD.key, OLD.name, OLD.describe);
RETURN OLD;
END
$func$ LANGUAGE plpgsql
CREATE TRIGGER foo -- not: "CREATE OR REPLACE" !
AFTER UPDATE OR DELETE ON some_tbl
FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()
-
AFTER
にします 単純化するためのトリガー。BEFORE
トリガーはRETURN NEW
する必要があります 更新を機能させるためですが、NEW
DELETE
には表示されません 引き金。したがって、IF TG_OP = ...
が必要になります など -
永続化された
INSERT
のターゲットリストを常に提供します ステートメント。これは、Oracleトリガーでも同様に悪いことです。 -
おそらく
serial
のテーブルがあります 桁。挿入で言及しないでください。シーケンスの次のIDが自動的に挿入されます。
SOには多数のコード例があります。