Sto eseguendo un inserimento di record in un database da un file di registro. Occasionalmente (~ 1 riga su ogni mille) una delle righe viola la chiave primaria e causa il fallimento della transazione. Attualmente, l'utente deve passare manualmente attraverso il file che ha causato l'errore e rimuovere la riga incriminata prima di tentare di reimportarla. Dato che ci sono centinaia di questi file da importare, non è pratico.Continuazione di una transazione dopo l'errore di violazione della chiave primaria
La mia domanda: Come posso ignorare l'inserimento di record che violeranno il vincolo di chiave primaria, senza dover fare una dichiarazione SELECT
prima di ogni riga per vedere se esiste già?
Nota: sono a conoscenza della domanda molto simile #1054695, ma sembra essere una risposta specifica di SQL Server e sto utilizzando PostgreSQL (importazione tramite Python/psycopg2).
Non funzionerà, quando si verifica un errore, la transazione viene interrotta e il rollback. È necessario un gestore di eccezioni all'interno del database. Richiesta non riuscita: ERRORE: la transazione corrente viene interrotta, i comandi ignorati fino alla fine del blocco di transazione –
Sì, lo sarà. Questo è il punto principale di SAVEPOINT. Ho modificato la mia risposta per dare un esempio concreto. –
---- edit ---- Scusa, ho sbagliato ... peccato per me;) Funziona bene, hai ragione. –