Documentazione di PostgreSQL 9.0 > Programmazione del server > Trigger > Visibilità del cambiamento dei dati
PrecedenteTriggerScrivere funzioni trigger in CSuccessivo

36.2. Visibilità del cambiamento dei dati

Se si eseguono comandi SQL nella funzione trigger, e questi comandi accedono alla tabella su cui è il trigger, allora si deve stare attenti alle regole di visibilità dei dati, dato che esse determinano se questi comandi SQL vedranno il cambiamento dei dati su cui è attivo il trigger. Brevemente:

  • I trigger a livello di istruzione seguono regole di visibilità semplici: nessuno dei cambiamenti fatti da un'istruzione è visibile ai trigger a livello di istruzione che sono invocati prima dell'istruzione, mentre tutte le modifiche sono visibili ai trigger after a livello di istruzione.

  • Il cambiamento dei dati (inserimento, aggiornamento o cancellazione) provoca che il trigger da attivare non sia naturalmente visibile ai comandi SQL eseguiti in un trigger before a livello di riga, dato che non è ancora accaduto.

  • Comunque, i comandi SQL eseguiti in un trigger before a livello di riga vedranno gli effetti dei cambiamenti ai dati per le righe processate precedendemente nello stesso comando esterno. Questo richiede cautela, dato che l'ordine di questi eventi di modifica non è generalmente prevedibile; un comando SQL che coinvolge molteplici righe può visitare le righe in qualsiasi ordine.

  • Quando viene attivato un trigger after a livello di riga, tutti i cambiamenti ai dati fatti dal comando più esterno sono già completati, e sono visibili alla funzione trigger invocata.

Se la funzione trigger è scritta in uno qualsiasi dei linguaggi procedurali standard, allora le istruzioni sopra si applicano solo se la funzione è dichiarata VOLATILE. Le funzioni dichiarate STABLE o IMMUTABLE non vedranno cambiamenti fatti dal comando chiamante in ogni caso.

Ulteriori informazioni sulle regole di visibilità dei dati possono essere trovate in Sezione 43.4, «Visibility of Data Changes». L'esempio in Sezione 36.4, «Un esempio completo di trigger» contiene una dimostrazione di queste regole.

Documentazione di PostgreSQL 9.0 > Programmazione del server > Trigger > Visibilità del cambiamento dei dati
PrecedenteTriggerScrivere funzioni trigger in CSuccessivo