PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 02/12/2009 16:52:07

FNo
Membre

PgAdmin et les requêtes infinies

Bonjour,
Une petite question plutôt destinée à Guillaume. Y-a-t-il un timeout lors d'une requête exécutée via PgAdmin (1.8.4 Windows)? Je n'ai rien trouvé dans les préférences et rien non plus côté base dans le postgresql.conf. A l'origine de cette interrogation, j'ai lancé une requête d'alimentation de table et machinalement rafraîchis les données. Malheureusement, un produit cartésien a fait que la requête bouclait à l'infini. Trop tard, les fenêtres de pgAdmin se sont figées et plus moyen d'en sortir. La seule solution a été de détruire le process, laissant bloquée du même coup la table avec impossibilité d'y accéder ou de la détruire ultérieurement.

J'ai pu tout de même annuler la transaction et retrouver mon petit monde tongue

Hors ligne

#2 02/12/2009 17:13:23

gleu
Administrateur

Re : PgAdmin et les requêtes infinies

Y-a-t-il un timeout lors d'une requête exécutée via PgAdmin (1.8.4 Windows)?

Non.

La seule solution a été de détruire le process, laissant bloquée du même coup la table avec impossibilité d'y accéder ou de la détruire ultérieurement.

Dans ce cas, il y a eu destruction du processus client, et non pas du processus serveur. En effet, si le processus client est dégagé non proprement, le processus serveur peut mettre un certain temps pour s'en rendre compte.

Pour en revenir au problème initial, il pourrait être intéressant de pouvoir indiquer un délai maximum. Dans ce cas, pgAdmin ajouterait un statement_timeout avant de lancer la requête et il reviendrait à la valeur précédente après. L'idée est intéressante. Si cette implémentation convient, je pourrais même y jeter un œil rapidement smile


Guillaume.

Hors ligne

#3 02/12/2009 17:20:07

FNo
Membre

Re : PgAdmin et les requêtes infinies

Whoua! Merci Guillaume pour cette réponse fulgurante. Je me doutais bien que non, mais avec l'idée que cela pourrait intéresser. Rien de bien méchant effectivement, mais quand on doit recommencer de configurer l' environnement précédent avec une dizaine de fenêtres mad

Hors ligne

#4 02/12/2009 18:10:12

gleu
Administrateur

Re : PgAdmin et les requêtes infinies

Ajouté dans ma TODO list.


Guillaume.

Hors ligne

#5 04/12/2009 19:45:12

gleu
Administrateur

Re : PgAdmin et les requêtes infinies

Bon, j'ai fait le patch hier soir, entre deux baillements (c'est plutôt intensif au boulot actuellement). Je l'ai envoyé ce matin sur la liste hackers de pgAdmin et il s'en est suivi toute une discussion. Il serait intéressant d'y jeter un œil pour donner ton avis. Voici le lien vers le thread : http://archives.postgresql.org/pgadmin- … g00035.php

Pour information, il est possible d'avoir un temps limite d'exécution d'une requête grâce au paramètre statement_timeout. Ce paramètre peut même être configuré dans la session (ce que fait mon patch d'ailleurs). Tu peux donc avoir une macro qui la exécute cette requête (SET statement_timeout TO '1s' par exemple), ou de le configurer sur l'utilisateur (ALTER USER le_user SET statement_timeout TO '1s'... attention, dans ce cas, chaque requête exécutée par cet utilisateur, même sans passer par pgAdmin, aura cette configuration, ce qui peut être gênant).

Sinon je suis à l'écoute de toute amélioration possible de ce patch smile


Guillaume.

Hors ligne

#6 09/12/2009 16:14:38

FNo
Membre

Re : PgAdmin et les requêtes infinies

Bonjour Guillaume,
Je ne m'attendais pas à tant de réactivité big_smile Pour ma part, je pense que la configuration par session est parfaite, cela correspond à un besoin à un moment donné. Le ALTER USER me semble plus risqué, mais diablement tentant? Cela fonctionne-t-il dans le cas d'un trigger rebouclant sur lui-même? Y-a-t-il un message d'erreur (capturé par une exception?)  avec l'abandon de la transaction en cause?

Je suis bien conscient que l'on ne peut pas inclure tous les paramètres possibles et imaginables, néanmoins ne pas planter bêtement son environnement de développement me semblait intéressant. Dans tous les cas , un grand merci.

Hors ligne

#7 09/12/2009 16:23:44

gleu
Administrateur

Re : PgAdmin et les requêtes infinies

Cela fonctionne-t-il dans le cas d'un trigger rebouclant sur lui-même?

Oui.

Y-a-t-il un message d'erreur (capturé par une exception?)  avec l'abandon de la transaction en cause?

Il y a ROLLBACK et message d'erreur. Un exemple rapide :

guillaume@laptop:~/freeprojects/git.pgadmin$ psql base1
psql (8.5devel)
Saisissez « help » pour l'aide.

base1=# set statement_timeout to '1ms';
SET
base1=# select i from generate_series(1, 1000) as i;
ERREUR:  annulation de la requête à cause du délai écoulé pour l'exécution de l'instruction
base1=# set lc_messages to 'C';
SET
base1=# select i from generate_series(1, 1000) as i;
ERROR:  canceling statement due to statement timeout

Guillaume.

Hors ligne

#8 09/12/2009 16:28:01

FNo
Membre

Re : PgAdmin et les requêtes infinies

J'en ai maintenant la preuve, le Paradis existe lol

Hors ligne

Pied de page des forums