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 Python@lists.python.it http://lists.python.it/mailman/listinfo/python