Questo dovrebbe essere facile per chi ha familiarità con PostgreSQL:rollback dopo l'errore nella transazione
La mia applicazione emette un begin_work
, fa una serie di operazioni, e poi emette un commit
. Le operazioni e il commit sono racchiusi all'interno di un blocco try-catch, la cui dichiarazione catch effettua un rollback
. Presupposto: se si verifica un errore durante un'operazione SQL, Postgresql eseguirà automaticamente il rollback della transazione, pertanto il mio rollback sarà ridondante ma innocuo. Questa supposizione è corretta?
(Il motivo per cui sto Tornare indietro in ogni caso:. Nel caso in cui un'eccezione non correlata a un'operazione SQL ocurs)
Quindi, sembra che la mia ipotesi fosse sbagliata, ma avevo comunque ragione di fare un rollback. Grazie! –
@JonSmark corretto. Pg contrassegna la transazione come interrotta, ma non ritorna alla modalità di autocommit o apre una nuova transazione fino all'emissione di un rollback. La ragione è che altrimenti si possono avere situazioni sgradevoli come "INSERT INTO historytable SELECT * FROM maintable", non riuscendo poi a seguire la seguente "maintable TRUNCATE TABLE". Ahia! –