Cosa sono i trigger Postgresql?
Un trigger PostgreSQL è una funzione che viene attivata automaticamente quando si verifica un evento di database su un oggetto di database. Ad esempio, un tavolo.
Esempi di eventi di database che possono attivare un trigger includono INSERT, UPDATE, DELETE, ecc. Inoltre, quando si crea un trigger per una tabella, il trigger verrà rilasciato automaticamente quando la tabella viene eliminata.
In questo tutorial di PostgreSQL imparerai quanto segue:
- Cosa sono i trigger Postgresql?
- Come viene utilizzato Trigger in POSRGREQL?
- Creazione di un trigger
- Utilizzando pgAdmin
- Trigger in caduta
Come viene utilizzato Trigger in POSRGREQL?
Un trigger può essere contrassegnato con l'operatore FOR EACH ROW durante la sua creazione. Tale trigger verrà chiamato una volta per ogni riga modificata dall'operazione. Un trigger può anche essere contrassegnato con l'operatore PER OGNI DICHIARAZIONE durante la sua creazione. Questo trigger verrà eseguito solo una volta per un'operazione specifica.
Creazione di un trigger
Per creare un trigger, utilizziamo la funzione CREATE TRIGGER. Ecco la sintassi per la funzione:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];
Il nome del trigger è il nome del trigger.
BEFORE, AFTER e INSTEAD OF sono parole chiave che determinano quando verrà richiamato il trigger.
Il nome dell'evento è il nome dell'evento che causerà l'invocazione del trigger. Può essere INSERT, UPDATE, DELETE, ecc.
Il nome della tabella è il nome della tabella su cui deve essere creato il trigger.
Se il trigger deve essere creato per un'operazione INSERT, è necessario aggiungere il parametro nome colonna ON.
La sintassi seguente lo dimostra:
CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];
Per esempio:
Useremo la tabella dei prezzi riportata di seguito:
Prezzo:
Creiamo un'altra tabella, Price_Audits, dove registreremo le modifiche apportate alla tabella Price:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL);
Ora possiamo definire una nuova funzione chiamata auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql;
La funzione precedente inserirà un record nella tabella Price_Audits includendo il nuovo id di riga e l'ora in cui il record viene creato.
Ora che abbiamo la funzione trigger, dovremmo associarla alla nostra tabella dei prezzi. Daremo al trigger il nome price_trigger. Prima che venga creato un nuovo record, la funzione trigger verrà richiamata automaticamente per registrare le modifiche. Ecco il grilletto:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Inseriamo un nuovo record nella tabella dei prezzi:
INSERT INTO PriceVALUES (3, 400);
Ora che abbiamo inserito un record nella tabella Price, è necessario inserire un record anche nella tabella Price_Audit. Questo sarà il risultato del trigger che abbiamo creato nella tabella dei prezzi. Controlliamo questo:
SELECT * FROM Price_Audits;
Ciò restituirà quanto segue:
Il grilletto ha funzionato con successo.
Trigger dell'elenco
Tutti i trigger che crei in PostgreSQL sono memorizzati nella tabella pg_trigger. Per vedere l'elenco dei trigger che hai sul database, interroga la tabella eseguendo il comando SELECT come mostrato di seguito:
SELECT tgname FROM pg_trigger;
Ciò restituisce quanto segue:
La colonna tgname della tabella pg_trigger indica il nome del trigger.
Trigger in caduta
Per rilasciare un trigger PostgreSQL, utilizziamo l'istruzione DROP TRIGGER con la seguente sintassi:
DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];
Il parametro del nome del trigger indica il nome del trigger che deve essere eliminato.
Il nome della tabella indica il nome della tabella da cui il trigger deve essere cancellato.
La clausola IF EXISTS tenta di eliminare un trigger esistente. Se si tenta di eliminare un trigger che non esiste senza utilizzare la clausola IF EXISTS, verrà visualizzato un errore.
L'opzione CASCATA ti aiuterà a rilasciare automaticamente tutti gli oggetti che dipendono dal trigger.
Se si utilizza l'opzione RESTRICT, il trigger non verrà eliminato se gli oggetti dipendono da esso.
Per esempio:
Per eliminare il trigger denominato example_trigger sulla tabella Price, eseguiamo il seguente comando:
Per rilasciare il trigger denominato example_trigger nella tabella Company, eseguire il comando seguente:
DROP TRIGGER example_trigger IF EXISTSON Company;
Utilizzando pgAdmin
Vediamo ora come sono state eseguite tutte e tre le azioni utilizzando pgAdmin.
Creazione di trigger
Per ottenere lo stesso risultato tramite pgAdmin, procedere come segue:
Passaggio 1) Accedi al tuo account pgAdmin.
Passo 2)
- Dalla barra di navigazione a sinistra, fare clic su Database.
- Fare clic su Demo.
Passaggio 3) Per creare la tabella Price_Audits, digitare l'editor di query:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)
Passaggio 4) Fare clic sul pulsante Esegui.
Passaggio 5) Eseguire il codice seguente per definire la funzione auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql
Passaggio 6) Esegui il codice seguente per creare il trigger price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
Passaggio 7)
- Eseguire il comando seguente per inserire un nuovo record nella tabella dei prezzi:
INSERT INTO PriceVALUES (3, 400)
- Eseguire il comando seguente per verificare se un record è stato inserito nella tabella Price_Audits:
SELECT * FROM Price_Audits
Questo dovrebbe restituire quanto segue:
Passaggio 8) Controlliamo il contenuto della tabella Price_Audits:
Trigger dell'elenco
Passaggio 1) Esegui il seguente comando per controllare i trigger nel tuo database:
SELECT tgname FROM pg_trigger
Ciò restituisce quanto segue:
Trigger in caduta
Per rilasciare il trigger denominato example_trigger nella tabella Company, eseguire il comando seguente:
DROP TRIGGER example_trigger IF EXISTSON Company
Sommario:
- Un trigger PostgreSQL si riferisce a una funzione che viene attivata automaticamente quando si verifica un evento di database su un oggetto di database, come una tabella.
- Esempi di tali eventi di database includono INSERT, UPDATE, DELETE, ecc.
- Un trigger esiste solo durante la durata dell'oggetto database per cui è stato creato.
- Se l'oggetto di database viene eliminato, verrà eliminato anche il trigger.
- I trigger PostgreSQL vengono creati utilizzando l'istruzione CREATE TRIGGER.
- Ogni trigger è associato a una funzione che indica cosa farà il trigger quando viene richiamato.
Scarica il database utilizzato in questo tutorial