PostgreSQL Trigger: crea, elenca e rilascia con l'esempio

โšก Riepilogo intelligente

PostgreSQL I trigger sono funzioni che vengono eseguite automaticamente quando si verifica un evento INSERT, UPDATE o DELETE su una tabella, consentendo al database di applicare regole, registrare le modifiche e controllare i dati senza la necessitร  di codice applicativo aggiuntivo.

  • โšก Definizione: Un trigger รจ una funzione che viene richiamata automaticamente in seguito a un evento del database, come ad esempio un'operazione di INSERT, UPDATE o DELETE.
  • ๐Ÿ” Scopo: FOR EACH ROW esegue il trigger una volta per ogni riga interessata, mentre FOR EACH STATEMENT lo esegue una volta per ogni operazione.
  • ๏ธ Creare: CREATE TRIGGER associa una funzione a una tabella e imposta la temporizzazione BEFORE, AFTER o INSTEAD OF.
  • ๐Ÿ“‹ Lista: Per visualizzare tutti i trigger presenti nel database, interroga il catalogo pg_trigger con la query SELECT tgname.
  • ๐Ÿ—‘๏ธ Far cadere: DROP TRIGGER rimuove un trigger, mentre IF EXISTS impedisce un errore quando il trigger non รจ presente.
  • ๐Ÿค– Aiuto tramite IA: Gli assistenti basati sull'intelligenza artificiale generano funzioni di attivazione e suggeriscono tempistiche PRIMA o DOPO in base a una richiesta formulata in linguaggio naturale.

PostgreSQL Trigger

Cos'รจ Trigger? PostgreSQL?

A PostgreSQL grilletto Un trigger รจ una funzione che si attiva automaticamente quando si verifica un evento di database su un oggetto del database, ad esempio una tabella. 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ร  automaticamente disattivato quando la tabella viene eliminata.

Come viene utilizzato Trigger PostgreSQL?

Un trigger puรฒ essere contrassegnato con l'operatore FOR EACH ROW durante la sua creazione. Tale trigger verrร  richiamato una volta per ogni riga modificata dall'operazione. Un trigger puรฒ anche essere contrassegnato con l'operatore FOR EACH STATEMENT durante la sua creazione. Questo trigger verrร  eseguito una sola volta per una specifica operazione.

PostgreSQL creare trigger

Per creare un trigger, utilizziamo la funzione CREATE TRIGGER. Ecco la sintassi della funzione:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name
ON table-name
[
 -- Trigger logic
];

Il trigger-name รจ il nome del trigger.

BEFORE, AFTER e INSTEAD OF sono parole chiave che determinano quando verrร  richiamato il trigger.

Il nome evento รจ il nome dell'evento che causerร  il richiamo del trigger. Questo puรฒ essere INSERT, AGGIORNA, ELIMINA, ecc.

Il nome-tabella รจ il nome della tabella su cui deve essere creato il trigger.

Se il trigger deve essere creato per un'operazione INSERT, dobbiamo aggiungere il parametro ON nome-colonna.

La seguente sintassi lo dimostra:

CREATE TRIGGER trigger-name AFTER INSERT ON column-name
ON table-name
[
 -- Trigger logic
];

PostgreSQL Crea esempio di trigger

Utilizzeremo la tabella dei prezzi riportata di seguito:

Prezzo:

PostgreSQL creare trigger

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 denominata auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT 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 incluso il nuovo ID riga e l'ora di creazione del record.

Ora che abbiamo la funzione trigger, dobbiamo collegarla alla nostra tabella Prezzi. Daremo al trigger il nome price_trigger. Prima della creazione di un nuovo record, la funzione trigger verrร  richiamata automaticamente per registrare le modifiche. Ecco il trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc();

Inseriamo un nuovo record nella tabella Prezzi:

INSERT INTO Price
VALUES (3, 400);

Ora che abbiamo inserito un record nella tabella Prezzi, un record dovrebbe essere inserito anche nella tabella Prezzi_Verifiche grazie al trigger che abbiamo creato. Verifichiamolo:

SELECT * FROM Price_Audits;

Verrร  restituito quanto segue:

PostgreSQL creare trigger

Il trigger ha funzionato correttamente.

PostgreSQL Trigger elenco

Tutti i trigger che crei in PostgreSQL sono memorizzati nella tabella pg_trigger. Per visualizzare l'elenco dei trigger presenti sul file banca dati, interroga la tabella eseguendo il comando SELECT come mostrato di seguito:

SELECT tgname FROM pg_trigger;

Questo restituisce quanto segue:

PostgreSQL Trigger elenco

La colonna tgname della tabella pg_trigger indica il nome del trigger.

PostgreSQL Grilletto di caduta

Quando un trigger non รจ piรน necessario, puoi rimuoverlo con la stessa facilitร . Per eliminare un PostgreSQL trigger, utilizziamo l'istruzione DROP TRIGGER con la seguente sintassi:

DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];

Il parametro trigger-name indica il nome del trigger che deve essere eliminato.

Il nome della tabella indica il nome della tabella da cui deve essere eliminato il trigger.

La clausola IF EXISTS tenta di eliminare un trigger esistente. Se tenti di eliminare un trigger che non esiste senza utilizzare la clausola IF EXISTS, riceverai un errore.

L'opzione CASCADE 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 rilasciare il trigger denominato example_trigger nella tabella Company, eseguire il seguente comando:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Utilizzando pgAdmin

Vediamo ora come vengono eseguite tutte e tre le azioni utilizzando pgAdmin.

Come creare Trigger in PostgreSQL utilizzando pgAdmin

Ecco come puoi creare un trigger in PostgreSQL utilizzando pgAdmin:

Passaggio 1) Accedi al tuo account pgAdmin

Apri pgAdmin ed effettua l'accesso al tuo account utilizzando le tue credenziali.

Passaggio 2) Creare un database dimostrativo

  1. Dalla barra di navigazione a sinistra, fare clic su Database.
  2. Fare clic su Demo.

Crea trigger in PostgreSQL utilizzando pgAdmin

Passaggio 3) Digitare la query

Per creare la tabella Price_Audits, digita la query nell'editor:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

Passaggio 4) Eseguire la query

Fare clic sul pulsante Esegui.

Crea trigger in PostgreSQL utilizzando pgAdmin

Passaggio 5) Esegui il file Code per la funzione di audit

Eseguire il seguente codice per definire la funzione auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql

Passaggio 6) Esegui il file Code per creare il trigger

Eseguire il seguente codice per creare il trigger price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc()

Passaggio 7) Inserisci un nuovo record

  1. Eseguire il seguente comando per inserire un nuovo record nella tabella Prezzi:
INSERT INTO Price
VALUES (3, 400)
  1. Eseguire il seguente comando per verificare se un record รจ stato inserito nella tabella Price_Audits:
SELECT * FROM Price_Audits

Questo dovrebbe restituire quanto segue:

Crea trigger in PostgreSQL utilizzando pgAdmin

Passaggio 8) Controllare il contenuto della tabella

Verifichiamo il contenuto della tabella Price_Audits.

Elencare i trigger utilizzando pgAdmin

Passo 1) Esegui il seguente comando per controllare i trigger nel tuo database:

SELECT tgname FROM pg_trigger

Questo restituisce quanto segue:

Elencare i trigger utilizzando pgAdmin

Cadereping Attivazione tramite pgAdmin

Per rilasciare il trigger denominato example_trigger nella tabella Company, eseguire il seguente comando:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Scarica il database utilizzato in questo tutorial

DOMANDE FREQUENTI

Un trigger BEFORE viene eseguito prima che la modifica della riga venga scritta, quindi puรฒ modificare o rifiutare la riga. Un trigger AFTER viene eseguito dopo che la modifica รจ stata salvata, ed รจ adatto per attivitร  di registrazione e controllo.

Un trigger INSTEAD OF viene definito su una vista, non su una tabella. Sostituisce le operazioni INSERT, UPDATE o DELETE con una logica personalizzata, rendendo scrivibile una vista di sola lettura.

Le funzioni trigger sono generalmente scritte in PL/pgSQL. PostgreSQL supporta anche PL/Python, PL/Perl, PL/Tcl e C, quindi puoi scegliere il linguaggio che meglio si adatta alla tua logica.

Utilizzare ALTER TABLE nome-tabella DISABLE TRIGGER nome-trigger per disattivarlo e ENABLE TRIGGER per riattivarlo. Ciรฒ evita la perditaping e ricreando il meccanismo di innesco durante i caricamenti di massa.

Sรฌ. Ogni trigger aggiunge lavoro a ogni riga o istruzione interessata, quindi una logica di trigger complessa puรฒ rallentare le operazioni di scrittura. Mantieni le funzioni dei trigger brevi e indicizza le colonne che interrogano.

Sรฌ. Se un trigger modifica un'altra tabella che a sua volta contiene dei trigger, anche questi si attivano, creando un effetto a cascata. PostgreSQL limita la profonditร  di annidamento per prevenire cicli infiniti.

Gli assistenti di programmazione basati sull'IA trasformano una richiesta in linguaggio naturale in un'istruzione CREATE TRIGGER completa e nella relativa funzione di attivazione, suggeriscono tempistiche BEFORE o AFTER e spiegano il codice PL/pgSQL generato per una rapida revisione.

Sรฌ. Strumenti come pgai e gli assistenti basati su GPT traducono una regola descritta in SQL di attivazione e possono creare trigger INSERT che etichettano o convalidano automaticamente i nuovi dati al loro arrivo.

Riassumi questo post con: