[Gfoss] esempio Trigger semplice

a.furieri a lqt.it a.furieri a lqt.it
Ven 15 Dic 2017 09:24:12 CET


On Fri, 15 Dec 2017 08:02:22 +0100, Andrea Peri wrote:
> Tutto bello.
> Pero' attenzione ad aggiungere i triggers.
> Il maggior rischio e' pensare di usarli per fare cose troppo
> sofisticate.
>

un trigger e' esattamente come un coltello molto affilato;
se lo sai usare bene e con giudizio puo' servire per fare
tante cose utili (per esempio in cucina), ma se lo usi
male e senza criterio puo' finire per ferire anche gravemente
te stesso o gli altri ... ma la colpa non e' mai del coltello,
e' sempre tutta di chi lo maneggia :-D


> Con il rischio che poiche' non si a mai cosa in futuro ci si deve 
> fare
> con tali dati, di ritrovarsi magari dopo qualche mese a vedere
> comportamenti anomali su un applicativo e dimenticarsi che dentro la
> BD vi' sono dei triggers che facevano certe operazioni e che guarda
> caso interfericono con altre operazioni all'epoca non preventivate.
>
> I triggers non sono facilmente rilevabili , e, specialmente su
> spatialite,
> non credo che si possano nemmeno rimuovere senza interferire con i
> dati stessi.
>
> Qui pero' forse lo sa' meglio Furieri.
> Forse mi sbaglio, ma temo che per rimuovere un trigger su una tabella
> spatialite sia necessario droppare la tabella con tutto il suo
> contenuto.
>
> Se cosi' fosse occorre stare parecchio attenti a usarli , perche' se
> per rimuovere un trigger che da noia si deve cancellare tutti i dati
> in tale tabella.
> Si fa' certamente, ma diventa macchinoso e complicato .
>

no, su SQLite non ci sono problemi di sorta a rimuovere un trigger;
basta semplicemente eseguire:

DROP TRIGGER <trigger-name>;

una volta rimosso il trigger tutti gli effetti connessi cesseranno
immediatamente. ovviamente i dati gia' presenti nella tavola rimarranno
del tutto inalterati.

il limite di SQLite e' che a differenze di PostgreSQL non supporta
"ALTER TABLE DISABLE TRIGGER", "ALTER TABLE ENABLE TRIGGER" o
"ALTER TRIGGER".
su SQLite l'unico modo per modificare un qualunque trigger gia'
definito e' quello di fare una "DROP TRIGGER" seguita da una
nuova "CREATE TRIGGER".


> Quindi attenzione, massima attenzione a usare i triggers.
>

non posso far altro che associarmi alla raccomandazione di
Andrea; i trigger sono tanto potenti quanto pericolosi, e
quindi vanno maneggiati con estrema cautela e solo dopo
avere effettuato a monte un testing molto pignolo e pedante
a scanso di brutte sorprese.

ciao Sandro


Maggiori informazioni sulla lista Gfoss