doc:appunti:linux:sa:postgresql_trigger
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();
doc/appunti/linux/sa/postgresql_trigger.txt · Last modified: 2007/07/25 16:39 by 127.0.0.1