Je veux "créer ou remplacer" un déclencheur pour une table postgres. Cependant, il n'y a pas une telle expression SQL.
Je vois que je peux faire un "DROP TRIGGER SI EXISTS" en premier ( http://www.postgresql.org/docs/9.5/static/sql-droptrigger.html ).
Ma question est:
Notez qu’il existe un "déclencheur de création ou de remplacement" dans Oracle ( https://docs.Oracle.com/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm ). Ensuite,
Postres a la transaction DDL donc BEGIN > DROP > CREATE > COMMIT is the equivalent of
CREATE OR REMPLACER`
https://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis est un bon résumé de la manière dont le DDL transactionnel de Postgre se compare à d'autres systèmes (comme Oracle)
Les fonctionnalités actuellement prévues par Postgres concernant les déclencheurs ( https://wiki.postgresql.org/wiki/Todo#Triggers ) n'incluent pas l'ajout de la syntaxe REPLACE
.
Aucun moyen de créer ou de remplacer un déclencheur mais peut le faire de cette façon
DROP TRIGGER IF EXISTS yourtrigger_name on "yourschemaname"."yourtablename";
Vous devez utiliser deux instructions: une pour déclencher un déclencheur et une autre pour créer un déclencheur.
Exemple:
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();
vous pouvez utiliser le code ci-dessous.
DO $$ BEGIN
CREATE (trigger, type , ...);
EXCEPTION
WHEN others THEN null;
END $$;
échantillon:
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 $$;