> 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.
Muito Obrigado! Rogério A Bassete _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
