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 15/06/2005, 16h16   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 16
Points : 11
Points : 11
Par défaut lock sur update

bonjour

je travaille avec une base postgresql à partir d'une appli en windev (oui, je sais...)
lorsque je bloque un enregistrement (select...for update), je voudrais que les autres utilisateurs soient prévenus si ils veulent bloquer le même enregistrement que moi.
si je modifie dans postgresql.conf
statement_timeout = 1000
j' ai bien une erreur indiquant que la requète a échoué.
sauf que j'ai la même erreur lors d'une requète dépassant 1 seconde. Sad
j'ai reparamétré le statement_timeout à 15000, mais attendre 15 secondes pour se faire dire que le record est bloqué, ça fait un peu long.
Pour exécuter une requète complexe, 15 secondes, ça peut faire court.
y a-t-il une autre possibilité ? si oui, laquelle ?
jacques trepp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2005, 14h57   #2
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 16
Points : 11
Points : 11
Par défaut lock sur update

bonjour,
je suis très surpris de ne strictement rien trouver concernant ce problème de lock.
Je suppose que la plupart des utilisateurs de postgresql bloquent des lignes (au moins lors d'un select for update)
comment empecher les autres utilisateurs de rester bloqués jusqu'à un commit ou rollback ?

pour ce qui me concerne, je modifie la valeur de statement_timeout juste avant le select (set local statement_timeout = 5000, par ex.)
ça, ça fonctionne. Je pense qu'il doit y avoir plus propre.

A moins que ma question ne soit trop triviale ?
jacques trepp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2005, 21h42   #3
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Bonjour,

si tu veux avoir un contrôle plus fin des verrouillages, regarde du côté du côté de la commande SQL LOCK.

Sinon, tu peux utiliser la vue système pg_locks qui t'informe en temps réel des verrouillages en cours dans la base (voir http://www.postgresql.org/docs/7.3/s...ing-locks.html ); un client peut consulter cette vue, vérifier si la table est libre, et le cas échéant informer l'utilisateur sans délai.
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2005, 10h36   #4
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 16
Points : 11
Points : 11
Ok merci
jacques trepp 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 17h18.


 
 
 
 
Partenaires

Hébergement Web