aboutsummaryrefslogtreecommitdiff
path: root/src/backend/replication/slot.c
diff options
context:
space:
mode:
authorAmit Kapila <akapila@postgresql.org>2024-09-13 09:29:13 +0530
committerAmit Kapila <akapila@postgresql.org>2024-09-13 09:31:23 +0530
commit4d8489f4f1fa86a99e6db0ea702911e1cf92fa81 (patch)
tree0f222ebc3eaf4f618509270a18a3bbbb1ae36078 /src/backend/replication/slot.c
parent7b1ddbae361b0ed92d5696d666ae85a2cc4dd883 (diff)
downloadpostgresql-4d8489f4f1fa86a99e6db0ea702911e1cf92fa81.tar.gz
postgresql-4d8489f4f1fa86a99e6db0ea702911e1cf92fa81.zip
Prohibit altering invalidated replication slots.
ALTER_REPLICATION_SLOT for invalid replication slots should not be allowed because there is no way to get back the invalidated (logical) slot to work. Author: Bharath Rupireddy Reviewed-by: Peter Smith, Shveta Malik Discussion: https://www.postgresql.org/message-id/CALj2ACW4fSOMiKjQ3=2NVBMTZRTG8Ujg6jsK9z3EvOtvA4vzKQ@mail.gmail.com
Diffstat (limited to 'src/backend/replication/slot.c')
-rw-r--r--src/backend/replication/slot.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index 0a037761569..6828100cf1a 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -820,6 +820,13 @@ ReplicationSlotAlter(const char *name, const bool *failover,
errmsg("cannot use %s with a physical replication slot",
"ALTER_REPLICATION_SLOT"));
+ if (MyReplicationSlot->data.invalidated != RS_INVAL_NONE)
+ ereport(ERROR,
+ errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
+ errmsg("cannot alter invalid replication slot \"%s\"", name),
+ errdetail("This replication slot has been invalidated due to \"%s\".",
+ SlotInvalidationCauses[MyReplicationSlot->data.invalidated]));
+
if (RecoveryInProgress())
{
/*