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