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