====== 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();