User Tools

Site Tools


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 18:39 by 127.0.0.1