PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

La sincronizzazione di 2 database uno non è riuscito a eseguire il commit

Poiché desideri eseguire una transazione distribuita , è necessario il protocollo di commit a due fasi .

Inizi le transazioni su entrambi i database come al solito, ma invece di eseguirne il commit, esegui

PREPARE TRANSACTION 'some_name';

Questo esegue tutto ciò che potrebbe non riuscire durante un commit e mantiene le transazioni. Una volta che l'operazione è riuscita, esegui quanto segue su entrambi i database:

COMMIT PREPARED 'some_name';

per impegnare le transazioni.

Se qualcosa non riesce durante la PREPARE TRANSACTION , esegui quanto segue per eliminare le transazioni già preparate:

ROLLBACK PREPARED 'some_name';

Tieni presente che è necessario software di gestione delle transazioni se si utilizzano transazioni preparate, in modo che tutte le transazioni preparate lasciate indietro dopo un arresto anomalo o altri problemi imprevisti vengano ripulite in modo affidabile. Le transazioni preparate che non sono state impegnate o ripristinate rimarranno in circolazione per sempre e con assoluta certezza interromperanno il tuo database.