> Leandro, sem querer abusar, pode me fornecer um LOG do psql que simula
> isso de exemplo?

Imagine assim:
Servidores A, B e C

Comece a transação em cada um:
A> BEGIN;
B> BEGIN;
C> BEGIN;

Faça alguma coisa em cada servidor:
A> INSERT INTO foo VALUES (1,2,3,4);
B> INSERT INTO foo VALUES (1,2,3,4);
C> INSERT INTO foo VALUES (1,2,3,4);

Agora tente preparar as transações:
A> PREPARE TRANSACTION 'xpto';
B> PREPARE TRANSACTION 'xpto';
C> PREPARE TRANSACTION 'xpto';

A sua aplicação deve ter ciência que os três PREPARE acima deram certo.
Se *todos* derem certo:
A> COMMIT PREPARED 'xpto';
B> COMMIT PREPARED 'xpto';
C> COMMIT PREPARED 'xpto';
Terminou.

Agora vamos simular um erro no servidor B, se o PREPARE TRANSACTION
falhar no B, você deverá fazer:
A> ROLLBACK PREPARED 'xpto';
C> ROLLBACK PREPARED 'xpto';
E emitir um erro para seu usuário.
Feito.

PREPARE TRANSACTION é totalmente ACID, ou seja, atômico, garantido e
persistente.
Imagine que na hora do COMMIT, um dos servidores falhe! você pode
fazer o COMMIT depois que esse servidor voltar, pois o PREPARE
TRANSACTION já garantiu isso de forma persistente, em disco.

Cuide apenas para que nenhum dos PREPARE TRANSACTION fique sem seu
respectivo COMMIT ou ROLLBACK.

[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a