Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/08/2007, 10h08   #1
Candidat au titre de Membre du Club
 
Inscription : août 2007
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 22
Points : 11
Points : 11
Par défaut transaction bloquée dans un processus linux

Bonjour,
j'utilise un serveur d'application Jonas avec un serveur PostgreSql.
Mes deux serveurs tournent sur la même machine Linux.

Il arrive que certaines requêtes envoyées par Jonas plantent (duplicate key...) ce qui est normal si l'on envoie n'importe quoi.
Le souci que je rencontre, c'est que le processus qui a fait s'exécuter la requête en erreur reste actif, bloquant ainsi les insert et update suivant qui restent en attente.

Savez vous s'il existe un paramètrage permettant d'arrêter un processus en cas d'erreur?

Exemple de processus bloquant les suivant:
postgres 32530 4966 0 Aug21 ? 00:00:01 postgres: postgres R7_TOTO 127.0.0.1(39275) idle in transaction
postgres 32553 4966 0 Aug21 ? 00:00:03 postgres: postgres R7_TOTO 127.0.0.1(35128) insert waiting
postgres 32611 4966 0 Aug21 ? 00:00:00 postgres: postgres R7_TOTO 127.0.0.1(56913) update waiting

Dans ce cas les insert et update ne sont jamais exécutés, il faut tuer le processus bloqué à la main pour débloquer la situation, pas top :-)
Merci d'avance pour vos réponses
ckermorgant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 14h17   #2
Membre éclairé
 
Inscription : janvier 2005
Messages : 336
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2005
Messages : 336
Points : 353
Points : 353
Bonjour

Pourriez vous nous montrer la partie du code qui pose problème ?
__________________
Christophe Chauvet (KrysKool)
kryskool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 17h23   #3
Candidat au titre de Membre du Club
 
Inscription : août 2007
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 22
Points : 11
Points : 11
Bonjour,
ce n'est pas réellement l'origine du plantage qui me pose problème, en effet si je me rend compte qu'une transaction est bloquée, je kill le processus, je debug la transaction et le problème est résolu, à l'exécution suivante tout se passe bien.

Ce qui me gène, c'est que la transaction empêche d'autres actions utilisateurs de s'exécuter, je cherche donc un moyen qu'après le plantage le processus linux soit libéré.

D'après ce que j'ai vu sur différents forums, il faudrait peut être que je code un rollback explicite en cas de plantage de ma transaction (dans un DAO pour mon architecture). Qu'en pensez vous?
Merci
ckermorgant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 18h23   #4
Membre éclairé
 
Inscription : janvier 2005
Messages : 336
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2005
Messages : 336
Points : 353
Points : 353
Dans votre transaction il faut bien sur un COMMIT ou ROLLBACK ou utiliser des SAVEPOINT, c'est pour cela que je vous demandais de voir votre code, afin de regarder comment vous récupérez les erreurs retournés par les requêtes.

Si vous ne gérez pas vous même ce genre d'erreur, le serveur ne le fera pas à votre place.

D'ailleurs le processus Linux n'est pas planté il attend la suite, un éventuel COMMIT ou ROLLBACK ou une autre requête (et il ne faut surtout pas le killer ce qui pourrais faire planter complètement votre PostgreSQL).
__________________
Christophe Chauvet (KrysKool)
kryskool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 18h36   #5
Candidat au titre de Membre du Club
 
Inscription : août 2007
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 22
Points : 11
Points : 11
j'utilise un socle technique maison, je pensais qu'une couche d'abstraction gérait les COMMIT et ROLLBACK, je vais vérifier. Je vous tiens au courant.
ckermorgant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 18h19   #6
Candidat au titre de Membre du Club
 
Inscription : août 2007
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 22
Points : 11
Points : 11
Effectivement, il y a avait une coquille dans le code, dans certains cas d'erreurs, il manquait un ROLLBACK. Merci
ckermorgant est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h18.


 
 
 
 
Partenaires

Hébergement Web