====== Creare un trigger in PostgreSQL ======
In questo esempio vogliamo scrivere un trigger in linguaggio plpgsql (si potrebbe scrivere in C o altro), quindi si deve attivare il linguaggio plpgsql sul database (se non è già stato fatto):
su - postgres
createlang plpgsql database
Questo trigger di esempio simula l'esistenza di una clausola UNIQUE sulla coppia (n_anello,cattura), per il momento solo sulla INSERT.
Dal prompt pgsql un utente autorizzato definisce la funzione:
CREATE FUNCTION schema.trig_detenzione_uccelli_insert() RETURNS trigger AS $detenzione_insert$
DECLARE myrec RECORD;
BEGIN
SELECT INTO myrec * FROM schema.detenzione_uccelli
WHERE n_anello = NEW.n_anello AND cattura = NEW.cattura;
IF NOT FOUND THEN
RETURN NEW;
ELSE
RETURN NULL;
END IF;
END;
$detenzione_insert$ LANGUAGE plpgsql;
Poi si aggancia la funzione prima (before) di ogni INSERT:
CREATE TRIGGER tbefore_detenzione_uccelli_insert
BEFORE INSERT ON schema.detenzione_uccelli
FOR EACH ROW EXECUTE PROCEDURE schema.trig_detenzione_uccelli_insert();
Se la funzione trigger ritorna NULL, l'operazione sulla riga viene abortita. Altrimenti il trigger deve ritornare il record da inserire.
Per vedere il sorgente della funzione definita:
\df+ schema.trig_detenzione_uccelli_insert
Per rimuovere il trigger e la funzione:
DROP TRIGGER tbefore_detenzione_uccelli_insert ON schema.detenzione_uccelli;
DROP FUNCTION schema.trig_detenzione_uccelli_insert();