Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[PostgreSQL] Executer une requete sans executer les triggers

6 réponses
Avatar
Etienne
salut.

bon ben tout est dans le titre.
J'ai un trigger sur le ON UPDATE.

sauf que parfois je modifie un enregistrement et que je suis absolument
sur que l'execution du trigger est inutile.

Y a t-il un moyen d'executer une requetes sans executer les trigger
associé a la table ?

Merci
Etienne

6 réponses

Avatar
SQLpro
Le 22/12/2010 15:05, Etienne a écrit :
salut.

bon ben tout est dans le titre.
J'ai un trigger sur le ON UPDATE.

sauf que parfois je modifie un enregistrement et que je suis absolument
sur que l'execution du trigger est inutile.

Y a t-il un moyen d'executer une requetes sans executer les trigger
associé a la table ?

Merci
Etienne


oui, en gérant une transaction qui supprime les triggers concernés et
les replacent après exécution de la requête, le tout au niveau
d'isolation SERIALIZABLE.

A +

--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Avatar
Etienne
Le 01/01/2011 09:55, SQLpro a écrit :
Le 22/12/2010 15:05, Etienne a écrit :
oui, en gérant une transaction qui supprime les triggers concernés et
les replacent après exécution de la requête, le tout au niveau
d'isolation SERIALIZABLE.



Heu ouai. C'est pas un peu lourd dingue comme solution?
je vais chercher une méthode un poil plus légère.

Etienne
Avatar
SQLpro
Le 03/01/2011 09:33, Etienne a écrit :
Le 01/01/2011 09:55, SQLpro a écrit :
Le 22/12/2010 15:05, Etienne a écrit :
oui, en gérant une transaction qui supprime les triggers concernés et
les replacent après exécution de la requête, le tout au niveau
d'isolation SERIALIZABLE.



Heu ouai. C'est pas un peu lourd dingue comme solution?
je vais chercher une méthode un poil plus légère.

Etienne



Il n'y pas d'autres solution, si vous voulez rester consistant !

En revanche il est sans doute possible de coder dans le trigger cette
"non exécution".
Par exemple dans SQL Server il est possible de tester si telle ou telle
colonne a été mise à jour afin de lancer ou non le code du trigger.
J'ai pas vu cela chez PG....

A +

--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Avatar
WebShaker
Le 03/01/2011 23:29, SQLpro a écrit :

Il n'y pas d'autres solution, si vous voulez rester consistant !

En revanche il est sans doute possible de coder dans le trigger cette
"non exécution".
Par exemple dans SQL Server il est possible de tester si telle ou telle
colonne a été mise à jour afin de lancer ou non le code du trigger.
J'ai pas vu cela chez PG....



Oui j'ai pensé a cette solution.
le problème est que le test additionnel de mon trigger va peut être me
faire gagner du temps lorsque je ne veux pas l'exécuter (encore que ce
n'est pas sur) mais va m'en faire perdre dans les autres cas.

J'ai envisagé une autre solution sans doute moins élégante et pourtant
surement plus efficace:
créer une table fille (héritée) de ma table et utiliser cette table
fille pour les requêtes ne nécessitant pas l'exécution des triggers.

Reste à tester (tout de même)...

Etienne

PS: je suis content de vous apprendre quelques chose ;) pour une fois.
(enfin si toute fois ca marche)
Avatar
Sebastien Lardiere
On 01/03/2011 11:29 PM, SQLpro wrote:

Il n'y pas d'autres solution, si vous voulez rester consistant !

En revanche il est sans doute possible de coder dans le trigger cette
"non exécution".
Par exemple dans SQL Server il est possible de tester si telle ou telle
colonne a été mise à jour afin de lancer ou non le code du trigger.
J'ai pas vu cela chez PG....




Dans la verion 9.0, ça existe :

For UPDATE triggers, it is possible to specify a list of columns using
this syntax:

UPDATE OF column_name1 [, column_name2 ... ]

http://www.postgresql.org/docs/9.0/static/sql-createtrigger.html

Dans les versions antérieures, il suffit de le coder, ça n'est pas
compliqué, ni si couteux.

if new.col1 != old.col2 then
...

C'est consistant, et ça n'est pas si lent. Là, c'est une version
simpliste, mais dans l'ensemble, ça fonctionne.


--
Sébastien
Avatar
Etienne
Le 04/01/2011 10:08, Sebastien Lardiere a écrit :
On 01/03/2011 11:29 PM, SQLpro wrote:

Dans la verion 9.0, ça existe :

For UPDATE triggers, it is possible to specify a list of columns using
this syntax:

UPDATE OF column_name1 [, column_name2 ... ]

http://www.postgresql.org/docs/9.0/static/sql-createtrigger.html




Ca c'est cool

Dans les versions antérieures, il suffit de le coder, ça n'est pas
compliqué, ni si couteux.

if new.col1 != old.col2 then
...

C'est consistant, et ça n'est pas si lent. Là, c'est une version
simpliste, mais dans l'ensemble, ça fonctionne.



Oui. En fait il faudrait connaitre le coup de déclenchement d'un trigger
qui ne fait rien.
Bon là on chipote, mais l'idée c'est simplement de gagner un poil de
temps lors que c'est possible.

Etienne