Ammetto candidamente la mia ignoranza di PostgreSQL...
> From: giovanni.porcari - Mon, 25 Oct 2010 12:02:45
>
> Il giorno 25/ott/2010, alle ore 10.45, Matteo Mattsteel Vitturi ha scritto:
>
> > Ciao Marco.
> > Vedo un'errore di fondo nell'uso del database, di qualunque marca esso sia.
> >
> > In pratica stai tentando di modificare l'id della chiave primaria della
> > tabella nazioni "contemporaneamente" al corrispettivo id di chiave esterna
> > della tabella clienti.
> > Semplicemente, non puoi farlo e il problema dipende dal fatto che esiste un
> > legame di foreing-key tra le due tabelle.
> > Dovresti fare così:
> > 1. inserire in tabella nazioni la riga con il nuovo id di chiave primaria
> > 2. sganciare la chiave esterna della tabella clientiin modo che non punti
> > più alla vecchia chiave primaria e punti alla nuova chiave primaria.
> > 3. (tentare di) cancellare la riga della vecchia chiave primaria. Dico
> > "tentare" perché potresti non riuscirci in quanto potresti aver dimenticato
> > di sganciare una riga di clienti.
> >
> > 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.
> >
> > Per inciso, con SQLite non avresti il problema in quanto le foreign-key
> > sono sì dichiarabili ma non vengono imposte (enforced) al database.
> >
> > Saluti.
>
> Forse la cosa può essere risolta anche usando nella dichiarazione della table
> col la clausola
> ON UPDATE CASCADE
> (http://www.postgresql.org/docs/8.4/interactive/sql-createtable.html)
>
> nella stessa pagina trovi anche le indicazioni per l'uso di
> [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
>
> che è molto comodo per procrastinare il controllo dell'integrità referenziale
> alla chiusura della transazione.
>
> Ciao
> G
_______________________________________________
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python