summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Vondra2017-08-30 21:55:30 +0000
committerTomas Vondra2017-08-30 22:12:25 +0000
commite71c1dd42ae9c47023f3f9aee60d6663fb1474c1 (patch)
tree28a95724e82790d35a02952d6a7bd035986007b8
parent298ed72a44c2bedb793e8fdd368a7f4e71c66883 (diff)
Disable logical decoding as unsupported
Commit 665c224a6b2afa disabled CREATE PUBLICATION/SUBSCRIPTION, but it was still possible to create a logical replication slot and call pg_logical_slot_get_changes() on it. That would however crash and burn as ReorderBufferCommit() relies on subtransactions, and BeginInternalSubTransaction() is not expected to fail, leading to segfaults in the PG_CATCH block. Simply disallowing creating logical slots (and whatever else relies on CheckLogicalDecodingRequirements) seems like the best fix.
-rw-r--r--src/backend/replication/logical/logical.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c
index efb9785f25..f6774df96f 100644
--- a/src/backend/replication/logical/logical.c
+++ b/src/backend/replication/logical/logical.c
@@ -77,6 +77,16 @@ CheckLogicalDecodingRequirements(void)
{
CheckSlotRequirements();
+ /*
+ * Postgres-XL does not support logical replication for now. We could create
+ * the logical replication slot, but attempts to decode the WAL would crash
+ * and burn as ReorderBufferCommit() uses subtransactions internally. We need
+ */
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("Postgres-XL does not support logical replication"),
+ errdetail("The feature is not currently supported")));
+
if (wal_level < WAL_LEVEL_LOGICAL)
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),