2016-03-10 12 views
18

Voglio "creare o sostituire" un trigger per una tabella postgres. Tuttavia, non esiste un'espressione sql.Crea o sostituisci trigger postazione

Vedo che è possibile eseguire prima un "DROP TRIGGER IF EXISTS" (http://www.postgresql.org/docs/9.5/static/sql-droptrigger.html).

La mia domanda è:

  1. C'è una raccomandata/scelta migliore rispetto (GOCCIA + CREATE trigger)
  2. C'è un motivo per cui non v'è tale "creare o sostituire trigger" (che potrebbe implicare che non dovrei volerlo fare)

Si noti che è presente un "Crea o sostituisci trigger" in Oracle (https://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm). Quindi,

  1. Un comando del genere è pianificato per Postgres?

risposta

7

Postres ha transazione DDL così BEGIN > DROP > CREATE > COMMIT is the equivalent of creare o REPLACE`

https://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis è un interessante resoconto di come transazionale DDL di postgre confronto ad altri sistemi (ad esempio Oracle)

Postgres attuali caratteristiche previste in materia di trigger (https://wiki.postgresql.org/wiki/Todo#Triggers) non includere l'aggiunta della sintassi REPLACE

+4

perché postgreql consente 'CREATE O REPLACE FUNCTION' ma non' CREATE O REPLACE TRIGGER' ... Se seguirà un concetto, dovrebbe averlo applicato anche per le funzioni giuste? o mi sbaglio? –

18

Nessun modo per creare o sostituire un trigger ma può farlo in questo modo

DROP TRIGGER IF EXISTS yourtrigger_name on "yourschemaname"."yourtablename"; 
+0

bello, grazie – Hartmut

Problemi correlati