Add option to enable two_phase commits via pg_create_logical_replication_slot.
Commit 0aa8a01d04 extends the output plugin API to allow decoding of prepared xacts and allowed the user to enable/disable the two-phase option via pg_logical_slot_get_changes(). This can lead to a problem such that the first time when it gets changes via pg_logical_slot_get_changes() without two_phase option enabled it will not get the prepared even though prepare is after consistent snapshot. Now next time during getting changes, if the two_phase option is enabled it can skip prepare because by that time start decoding point has been moved. So the user will only get commit prepared. Allow to enable/disable this option at the create slot time and default will be false. It will break the existing slots which is fine in a major release. Author: Ajin Cherian Reviewed-by: Amit Kapila and Vignesh C Discussion: https://postgr.es/m/[email protected] Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/19890a064ebf53dedcefed0d8339ed3d449b06e6 Modified Files -------------- contrib/test_decoding/expected/twophase.out | 34 +++++++++++----------- .../test_decoding/expected/twophase_snapshot.out | 6 ++-- contrib/test_decoding/expected/twophase_stream.out | 10 +++---- contrib/test_decoding/specs/twophase_snapshot.spec | 4 +-- contrib/test_decoding/sql/twophase.sql | 34 +++++++++++----------- contrib/test_decoding/sql/twophase_stream.sql | 10 +++---- contrib/test_decoding/test_decoding.c | 12 -------- doc/src/sgml/catalogs.sgml | 10 +++++++ doc/src/sgml/func.sgml | 10 ++++--- doc/src/sgml/logicaldecoding.sgml | 19 ++++++------ src/backend/catalog/system_views.sql | 4 ++- src/backend/replication/logical/logical.c | 12 ++++++++ src/backend/replication/slot.c | 10 ++++++- src/backend/replication/slotfuncs.c | 14 ++++++--- src/backend/replication/walsender.c | 6 ++-- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 14 ++++----- src/include/nodes/replnodes.h | 1 + src/include/replication/slot.h | 7 ++++- src/test/regress/expected/rules.out | 5 ++-- 20 files changed, 131 insertions(+), 93 deletions(-)
