Re: [Postgresql-it] Concorrenza

  • From: Stefano Reksten <sreksten@xxxxxx>
  • To: postgresql-it@xxxxxxxxxxxxxxxxx
  • Date: Thu, 07 Apr 2005 18:04:24 +0200

At 16.51 07/04/2005, you wrote:

Anche se probabilmente è stato già posto il quesito vorrei riproporlo, ho visto la manualistica sul concurrecy control ma non ho trovato un esempio a riguardo.

La domanda è questa io vorrei eseguire una istruzione tipo l'udate qui sotto e vorrei essere sicuro che un solo utente alla volta esegua l'update sul record identificato dalla chiave campoj con valore yyyy

update table
           set campoi = xxxx
           where campoj =yyyy

Probabilmente ho capito male io, oppure hai posto male la domanda. Però se fai questa update, così com'è scritta, comunque vada un solo utente per volta eseguirà l'aggiornamento. Ma forse volevi fare qualcosa del tipo

BEGIN;
SELECT * FROM table WHERE campoj = yyyy FOR UPDATE;
UPDATE...
COMMIT;

se non ricordo male in questo modo fai un lock alla riga; poi puoi fare qualsiasi altra cosa; finché non dai la commit il lock di riga non va via e quindi a meno che le altre transazioni non siano in dirty_read verranno bloccate finché la prima non ha finito.
Ah, perché non mi ricordo mai i vari liveli di isolamento? :) La mia testaccia... comunque li trovi sul manuale.

Ciao,
  Stefano


Other related posts: