Postgresテーブルのトリガーを「作成または置換」したい。ただし、そのようなSQL式はありません。
最初に「DRIG TRIGGER IF EXISTS」を実行できることがわかりました( http://www.postgresql.org/docs/9.5/static/sql-droptrigger.html )。
私の質問は:
Oracleには「トリガーの作成または置換」があることに注意してください( https://docs.Oracle.com/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm )。次に、
PostresにはトランザクションDDLがあるため、BEGIN > DROP > CREATE > COMMIT is the equivalent of
CREATE OR REPLACE`
https://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis は、postgreのトランザクションDDLが他のシステム(Oracleなど)とどのように比較されるかについての素晴らしい記事です。
トリガーに関する現在のpostgres計画機能( https://wiki.postgresql.org/wiki/Todo#Triggers )には、REPLACE
構文の追加が含まれていません
トリガーを作成または置換する方法はありませんが、この方法で行うことができます
DROP TRIGGER IF EXISTS yourtrigger_name on "yourschemaname"."yourtablename";
2つのステートメントを使用する必要があります。1つはドロップトリガー用、もう1つはトリガーの作成用です。
例:
DROP TRIGGER IF EXISTS my_trigger
ON my_schema.my_table;
CREATE TRIGGER my_trigger
BEFORE INSERT OR UPDATE
ON my_schema.my_table
FOR EACH ROW EXECUTE PROCEDURE my_schema.my_function();
以下のコードを使用できます。
DO $$ BEGIN
CREATE (trigger, type , ...);
EXCEPTION
WHEN others THEN null;
END $$;
サンプル:
DO $$ BEGIN
CREATE TRIGGER trigger_workIDExist
BEFORE INSERT OR UPDATE ON "GalleryModel"
FOR EACH ROW EXECUTE PROCEDURE check_workIDExist();
EXCEPTION
WHEN others THEN null;
END $$;