Creare trigger in PostgreSQL

Mattepuffo's logo
Creare trigger in PostgreSQL

Creare trigger in PostgreSQL

Con un trigger possiamo praticamente impostare un'azione automatica dopo che è successo qualcosa.

Ad esempio, dopo ogni aggiunta/modifica di un record in una tabella svolgiamo un'azione.

In questo articolo vediamo come crearne uno in PostgreSQL, considerando che lo sto usando in produzione.

Ecco il codice:

CREATE OR REPLACE FUNCTION utenti_localita_trigger_func()
    RETURNS trigger AS $$
    DECLARE descrizione_localita text;
BEGIN
    IF NEW.id_localita_nascita IS NOT NULL THEN
        SELECT descrizione INTO descrizione_localita
                           FROM localita WHERE id = NEW.id_localita_nascita;

        IF descrizione_localita IS NOT NULL THEN
            UPDATE utenti
            SET luogo_nascita = descrizione_localita
            WHERE id = NEW.id
              AND (luogo_nascita IS DISTINCT FROM descrizione_localita);
        END IF;
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS utenti_localita_trigger ON utenti;
CREATE TRIGGER utenti_localita_trigger
    AFTER INSERT OR UPDATE ON utenti
    FOR EACH ROW
EXECUTE FUNCTION utenti_localita_trigger_func();

Dove:

  • NEW.id e NEW.id_localita_nascita sono i valori della riga appena inserita o modificata.
  • Il trigger viene lanciato dopo ogni inserimento o aggiornamento (AFTER INSERT OR UPDATE)

Enjoy!


Condividi

Commentami!