diff options
author | Tomas Vondra | 2017-08-30 21:55:30 +0000 |
---|---|---|
committer | Tomas Vondra | 2017-08-30 22:12:25 +0000 |
commit | e71c1dd42ae9c47023f3f9aee60d6663fb1474c1 (patch) | |
tree | 28a95724e82790d35a02952d6a7bd035986007b8 | |
parent | 298ed72a44c2bedb793e8fdd368a7f4e71c66883 (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.c | 10 |
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), |