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!
database postgresql trigger
Commentami!