PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Sincronizando 2 banco de dados um falhou ao confirmar


Como você deseja realizar uma transação distribuída , você precisa do protocolo de confirmação de duas fases .

Você inicia as transações em ambos os bancos de dados como de costume, mas em vez de confirmá-las, você executa
PREPARE TRANSACTION 'some_name';

Isso executa tudo o que pode falhar durante uma confirmação e persiste as transações. Depois que isso for bem-sucedido, execute o seguinte em ambos os bancos de dados:
COMMIT PREPARED 'some_name';

para comprometer as transações.

Se algo falhar durante a PREPARE TRANSACTION , você executa o seguinte para se livrar das transações já preparadas:
ROLLBACK PREPARED 'some_name';

Observe que você precisa software gerenciador de transações se você usar transações preparadas, para que quaisquer transações preparadas que são deixadas para trás após uma falha ou outro problema inesperado sejam limpas de forma confiável. As transações preparadas que não são confirmadas ou revertidas permanecem para sempre e com certeza quebrarão seu banco de dados.