From e71c1dd42ae9c47023f3f9aee60d6663fb1474c1 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Wed, 30 Aug 2017 23:55:30 +0200 Subject: [PATCH] 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. --- src/backend/replication/logical/logical.c | 10 ++++++++++ 1 file changed, 10 insertions(+) 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), -- 2.39.5