Re: problema con transazioni su Postgres

Fabio Serra <[email protected]>
Newsgroups gmane.comp.cms.cold-fusion.devel.italian
Message-ID <[email protected]>
Comunque devi usare cflock.

> Sì, a questo punto è per forza obbligatorio, l'avessi usato dall'inizio senza fidarmi troppo del 'serializable' ...

Per prima cosa metterei un indice univoco su quel campo o sull'accopiata 
con anno e sigla, così al massimo salta tutto ma duplicati non ne trovi.

>> La transazione ti garantisce che i dati letti siano solo quelli committed quindi il tuo select MAX(numero)
>> leggerà lo stesso numero per le due query contemporanee.
> Eh ma il 'serializable' dovrebbe proprio evitare ad avere le query temporanee no?
>
> Voglio dire le 'dovrebbe' mette in fila una per una e garantirmi l'isolamento.
>


Si. Il problema nel tuo caso è che il serializable previene la lettura 
del max(numero) dell'altra transazione. Nel serializable lo stato del db 
è quello dall'inizio alla fine della transazione, quindi il max risulta 
quella di prima dell'inserimento anche se previene che la seconda query 
sia eseguita per prima.
Leggo adesso di postgres 9.1 e del predicate locking che effettivamente 
dovrebbero risolvere parte del problema.



-- 
Fabio Serra
[email protected]
http://faser.net



------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.