> Non ci dici questa chiave primaria di che tipo è e che valori assume. Scusami. Certo, è un numero intero. > > Inoltre, che intendi con "prenota"? Ipotizzando che esistano due tabelle: progressivi_documenti (id_doc, data_doc, causale, id_cliente, etc..) struttura_documenti(prog_riga, id_doc, descrizione, um, quantita, etc...) (ho semplificato eh)
prenotare l'd significa fare un insert sulla prima tabella, senza il commit e poter lavorare sulla seconda tabella. La seconda tabella è referenziata alla prima tramite id_doc. Agli inserimenti, il database pretende che ci sia l'id inserito nella prima. Ma se l'utente dovesse annullare l'inserimento, non mi deve rimanere l'id inserito nella prima. > Allora, *assumendo* che questo id sia essenzialmente un intero per cui > un DDT debba avere un id maggiore di quello precedente, la soluzione più > semplice che mi viene in mente è quella di utilizzare la serializzazione > del database: > http://www.postgresql.org/docs/9.0/interactive/transaction-iso.html#XACT-SERIALIZABLE > > > In pratica, puoi creare una tabella `ddt_id` dove memorizzare l'"ultimo" > ID utilizzato. > > CREATE TABLE ddt_id ( > ddt_id INTEGER NOT NULL PRIMARY KEY; > ); > > Quindi, all'interno di una transazione serializzabile: > 1) SELECT dell'ultimo ID inserito dalla tabella `ddt_id` > 2) UPDATE sulla tabella `ddt_id` per incrementare l'ID > 3) Usare l'ID incrementato nel DDT > 4) COMMIT > > A questo punto se un altra transazione ha cercato di fare l'UPDATE sulla > tabella `ddt_id`, riceverai un errore (solo il primo commit riuscirà). > Rispondo senza aver letto il link: siamo sicuri che l'update possa generare un errore? Credo che l'update possa essere tipo: "UPDATE progressivi_documenti SET id_doc = id_doc+1" come fa a generare un errore? Non mi è chiaro, magari leggendo il link capisco. > > Tra l'altro l'idea di avere una tabella che contiene una sola riga non > mi convince molto... Parli della TUA tabella vero? _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python