[Python] [Python e PostgreSQL] All'interno delle eccezioni, le transazioni si comportano diversamente?

Daniele Varrazzo piro a develer.com
Lun 25 Ott 2010 12:44:16 CEST


On Mon, 25 Oct 2010 10:45:46 +0200, Matteo Mattsteel Vitturi
<mattsteel a hotmail.it> wrote:

> L'alternativa potrebbe essere quella di disabilitare per un momento il
> vincolo di foreign-key, effettuare i due update (come dici tu nel tuo
> pezzetto di codice) ed infine riattivare la foreign-key... e qui
potresti
> non riuscirci... perché è successo qualcosa nel frattempo.

Creare la fkey non è gratis: il database deve fare un full scan della
tabella per verificare che tutti i record verifichino la condizione,
altrimenti si rifiuta di creare il vincolo. In più droppare/creare la fkey
richiede lock che possono essere ostacolati da altre query concorrenti. La
soluzione di Giovanni è quella giusta.

> Per inciso, con SQLite non avresti il problema in quanto le foreign-key
> sono sì dichiarabili ma non vengono imposte (enforced) al database.

Se l'ha dichiarata, si vede la voleva. Se un database non la implementa,
questa non è una feature :) La tua è una frase buffa: è come dire che il
database FooDB(tm) ha l'implementazione dei trigger più veloce che ci sia
in giro e nessuno può batterlo (n.b. FooDB(tm) accetta la sintassi del
comando CREATE TRIGGER ma non li implementa).

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python