diff options
author | Andres Freund <andres@anarazel.de> | 2018-10-31 14:47:41 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2018-10-31 15:46:40 -0700 |
commit | c33a01c7979dc267c81ece612af783ecacf22bc0 (patch) | |
tree | 0e01efb5b4f25b8dff372cf6d5f419e0b334e72b /src/backend/replication/logical/logical.c | |
parent | 2493e2c2d167ce7ad7d034c7c7de17d79e806c7a (diff) | |
download | postgresql-c33a01c7979dc267c81ece612af783ecacf22bc0.tar.gz postgresql-c33a01c7979dc267c81ece612af783ecacf22bc0.zip |
Disallow starting server with insufficient wal_level for existing slot.
Previously it was possible to create a slot, change wal_level, and
restart, even if the new wal_level was insufficient for the
slot. That's a problem for both logical and physical slots, because
the necessary WAL records are not generated.
This removes a few tests in newer versions that, somewhat
inexplicably, whether restarting with a too low wal_level worked (a
buggy behaviour!).
Reported-By: Joshua D. Drake
Author: Andres Freund
Discussion: https://postgr.es/m/20181029191304.lbsmhshkyymhw22w@alap3.anarazel.de
Backpatch: 9.4-, where replication slots where introduced
Diffstat (limited to 'src/backend/replication/logical/logical.c')
-rw-r--r-- | src/backend/replication/logical/logical.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 6fc762e318d..733e4d9958c 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -79,6 +79,11 @@ CheckLogicalDecodingRequirements(void) { CheckSlotRequirements(); + /* + * NB: Adding a new requirement likely means that RestoreSlotFromDisk() + * needs the same check. + */ + if (wal_level < WAL_LEVEL_LOGICAL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), |