-
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 ?
-
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 ?
-
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.
-