PostgreSQL CREATE TRIGGER

Summary: in questo tutorial, imparerai come usare l’istruzione PostgreSQL CREATE TRIGGER per creare un trigger.

Per creare un nuovo trigger in PostgreSQL, segui questi passi:

  • Prima, crea una funzione trigger usando l’istruzione CREATE FUNCTION.
  • In secondo luogo, legare la funzione trigger a una tabella usando l’istruzione CREATE TRIGGER.

Se non avete familiarità con la creazione di una funzione definita dall’utente, potete controllare la sezione PL/pgSQL.

Sintassi della funzione trigger

Una funzione trigger è simile a una normale funzione definita dall’utente. Tuttavia, una funzione trigger non prende argomenti e ha un valore di ritorno con il tipo trigger.

Il seguente illustra la sintassi per creare una funzione trigger:

Code language: SQL (Structured Query Language) (sql)

Nota che puoi creare una funzione trigger usando qualsiasi linguaggio supportato da PostgreSQL. In questo tutorial, useremo PL/pgSQL.

Una funzione trigger riceve dati sul suo ambiente chiamante attraverso una struttura speciale chiamata TriggerData che contiene un insieme di variabili locali.

Per esempio, OLD e NEW rappresentano gli stati della riga nella tabella prima o dopo l’evento di trigger.

PostgreSQL fornisce anche altre variabili locali precedute da TG_ come TG_WHEN, e TG_TABLE_NAME.

Una volta definita una funzione trigger, è possibile legarla a uno o più eventi trigger come INSERT, UPDATE, e DELETE.

Introduzione a PostgreSQL CREATE TRIGGER statement

La frase CREATE TRIGGER crea un nuovo trigger. Il seguente illustra la sintassi di base dell’istruzione CREATE TRIGGER:

Code language: SQL (Structured Query Language) (sql)

In questa sintassi:

Prima, specifica il nome del trigger dopo le parole chiave TRIGGER.

Secondo, specifica i tempi che causano l’attivazione del trigger. Può essere BEFORE o AFTER un evento si verifica.

Terzo, specificare l’evento che invoca il trigger. L’evento può essere INSERT , DELETE, UPDATE o TRUNCATE.

Quarto, specificare il nome della tabella associata al trigger dopo la parola chiave ON.

Quinto, specificare il tipo di trigger che può essere:

  • Trigger a livello di riga che è specificato dalla clausola FOR EACH ROW.
  • Trigger a livello di stato che è specificato dalla clausola FOR EACH STATEMENT.

Un trigger a livello di riga viene sparato per ogni riga mentre un trigger a livello di dichiarazione viene sparato per ogni transazione.

Supponiamo che una tabella abbia 100 righe e due trigger che verranno sparati quando si verifica un evento DELETE.

Se la dichiarazione DELETE cancella 100 righe, il trigger a livello di riga sparerà 100 volte, una volta per ogni riga cancellata. D’altra parte, un trigger a livello di dichiarazione verrà sparato una sola volta indipendentemente da quante righe vengono eliminate.

Infine, specificate il nome della funzione di trigger dopo le parole chiave EXECUTE PROCEDURE.

Esempio PostgreSQL CREATE TRIGGER

La seguente dichiarazione crea una nuova tabella chiamata employees:

Code language: SQL (Structured Query Language) (sql)

Supponiamo che quando il nome di un dipendente cambia, vuoi registrare i cambiamenti in una tabella separata chiamata employee_audits :

Code language: SQL (Structured Query Language) (sql)

Prima di tutto, create una nuova funzione chiamata log_last_name_changes:

Code language: SQL (Structured Query Language) (sql)

La funzione inserisce il vecchio cognome nella tabella employee_audits includendo l’id del dipendente, il cognome, e l’ora del cambiamento se il cognome di un dipendente cambia.

Il OLD rappresenta la riga prima dell’aggiornamento mentre il NEW rappresenta la nuova riga che verrà aggiornata. Il OLD.last_name restituisce il cognome prima dell’aggiornamento e il NEW.last_name restituisce il nuovo cognome.

In secondo luogo, legate la funzione trigger alla tabella employees. Il nome del trigger è last_name_changes. Prima che il valore della colonna last_name venga aggiornato, la funzione trigger viene automaticamente invocata per registrare i cambiamenti.

Code language: SQL (Structured Query Language) (sql)

Terzo, inserite alcune righe nella tabella employees:

Code language: SQL (Structured Query Language) (sql)

Quarto, esaminate il contenuto della tabella employees:

Code language: SQL (Structured Query Language) (sql)

Supponiamo che Lily Bush cambi il suo cognome in Lily Brown.

Quinto, aggiorna il cognome di Lily con quello nuovo:

Code language: SQL (Structured Query Language) (sql)

Settimo, controlla se il cognome di Lily è stato aggiornato:

Code language: SQL (Structured Query Language) (sql)

Come puoi vedere dall’output, il cognome di Lily è stato aggiornato.

In ottavo luogo, verifica il contenuto della tabella employee_audits:

Code language: SQL (Structured Query Language) (sql)

La modifica è stata registrata nella tabella employee_audits dal trigger.

In questo tutorial, hai imparato ad usare il PostgreSQL CREATE TRIGGER per creare un nuovo trigger.

  • Questo tutorial è stato utile?
  • SìNo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.