Maybaygiare.org

Blog Network

PostgreSQL – TRIGGERS

Advertisements

PostgreSQL Triggers are database callback functions, which are automatically performed/invoked when a specified database event occurs.

I seguenti sono punti importanti su PostgreSQL trigger −

  • PostgreSQL trigger può essere specificato per sparare

    • Prima che l’operazione è tentato di fila (prima i vincoli vengono controllati e, INSERT, UPDATE o DELETE è tentato)

    • Dopo l’operazione è completata (dopo i vincoli vengono controllati e l’INSERTO, UPDATE o DELETE è stata completata)

    • Invece di operazione (nel caso di inserimenti, eliminazioni o aggiornamenti su vista)

  • Un trigger che è segnato PER OGNI RIGA viene chiamato una volta per ogni riga l’operazione viene modificata. Al contrario, un trigger contrassegnato PER OGNI ISTRUZIONE viene eseguito una sola volta per una determinata operazione, indipendentemente dal numero di righe che modifica.

  • Entrambi, la clausola WHEN e le azioni trigger, possono accedere agli elementi della riga inseriti, eliminati o aggiornati utilizzando i riferimenti del modulo NEW.nome colonna e VECCHIO.column-name, dove column-name è il nome di una colonna della tabella a cui è associato il trigger.

  • Se viene fornita una clausola WHEN, le istruzioni PostgreSQL specificate vengono eseguite solo per le righe per le quali la clausola WHEN è true. Se non viene fornita alcuna clausola WHEN, le istruzioni PostgreSQL vengono eseguite per tutte le righe.

  • Se più trigger dello stesso tipo sono definiti per lo stesso evento, verranno attivati in ordine alfabetico per nome.

  • La parola chiave BEFORE, AFTER o INSTEAD OF determina quando verranno eseguite le azioni di trigger relative all’inserimento, alla modifica o alla rimozione della riga associata.

  • I trigger vengono automaticamente eliminati quando viene eliminata la tabella a cui sono associati.

  • La tabella da modificare deve esistere nello stesso database della tabella o della vista a cui è collegato il trigger e si deve usare solo tablename, non database.tablename.

  • Un’opzione di VINCOLO quando specificata crea un trigger di vincolo. Questo è lo stesso di un trigger normale, tranne che la tempistica del grilletto può essere regolata utilizzando i VINCOLI IMPOSTATI. I trigger di vincolo dovrebbero generare un’eccezione quando i vincoli che implementano vengono violati.

Sintassi

La sintassi di base per la creazione di un trigger è la seguente:

CREATE TRIGGER trigger_name event_nameON table_name;

Qui, event_name potrebbe essere INSERT, DELETE, UPDATE e TRONCARE l’operazione del database sulla tabella summenzionata table_name. È possibile specificare opzionalmente PER OGNI RIGA dopo il nome della tabella.

La seguente è la sintassi per creare un trigger su un’operazione di AGGIORNAMENTO su una o più colonne specificate di una tabella come segue −

CREATE TRIGGER trigger_name UPDATE OF column_nameON table_name;

Esempio

Consideriamo un caso in cui vogliamo mantenere la prova di audit per ogni record inserito nella tabella AZIENDALE, che creeremo di nuovo come segue (Drop COMPANY table se lo hai già).

testdb=# CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);

Per mantenere la prova di audit, creeremo una nuova tabella chiamata AUDIT in cui verranno inseriti i messaggi di log ogni volta che c’è una voce nella tabella AZIENDALE per un nuovo record −

testdb=# CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL);

Qui, ID è l’ID del record di AUDIT, e EMP_ID è l’ID, che verrà dalla tabella AZIENDALE, e DATE manterrà verrà creato nella tabella SOCIETÀ. Quindi ora, creiamo un trigger sulla tabella AZIENDALE come segue-

testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANYFOR EACH ROW EXECUTE PROCEDURE auditlogfunc();

Dove auditlogfunc() è una procedura PostgreSQL e ha la seguente definizione −

CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$ BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp); RETURN NEW; END;$example_table$ LANGUAGE plpgsql;

Ora, inizieremo il lavoro effettivo. Iniziamo a inserire record nella tabella AZIENDALE che dovrebbe comportare la creazione di un record di registro di controllo nella tabella di CONTROLLO. Quindi creiamo un record nella tabella AZIENDALE come segue-

testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );

Questo creerà un record nella tabella AZIENDALE, che è la seguente −

 id | name | age | address | salary----+------+-----+--------------+-------- 1 | Paul | 32 | California | 20000

Allo stesso tempo, un record verrà creato nella tabella di CONTROLLO. Questo record è il risultato di un trigger, che abbiamo creato l’operazione di inserimento sul tavolo AZIENDALE. Allo stesso modo, è possibile creare i trigger sulle operazioni di aggiornamento ed ELIMINAZIONE in base alle proprie esigenze.

 emp_id | entry_date--------+------------------------------- 1 | 2013-05-05 15:49:59.968+05:30(1 row)

Elenco dei TRIGGER

È possibile elencare tutti i trigger nel database corrente dalla tabella pg_trigger come segue −

testdb=# SELECT * FROM pg_trigger;

L’istruzione PostgreSQL sopra riportata elencherà tutti i trigger.

Se si desidera elencare i trigger su un tavolo in particolare, poi, l’uso E la clausola con il nome della tabella come segue:

testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';

al di sopra di PostgreSQL istruzione anche l’elenco verso il basso una sola voce come indicato di seguito −

 tgname----------------- example_trigger(1 row)

Cadere TRIGGER

Il seguente è il comando DROP, che può essere utilizzato per eliminare un trigger

testdb=# DROP TRIGGER trigger_name;
Pubblicità

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.