From 1116108c926820030bd18b5dbff9163c14e3ad6d Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 3 Apr 2017 11:10:28 -0400 Subject: [PATCH] Handle change of slot name in logical replication apply Since change of slot name is a supported operation, handle it more gracefully, instead of in the this-should-not-happen way. Author: Petr Jelinek --- src/backend/replication/logical/worker.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index bbf3506be0..d6986f59c1 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -1350,6 +1350,21 @@ reread_subscription(void) proc_exit(0); } + /* + * We need to make new connection to new slot if slot name has changed + * so exit here as well if that's the case. + */ + if (strcmp(newsub->slotname, MySubscription->slotname) != 0) + { + ereport(LOG, + (errmsg("logical replication worker for subscription \"%s\" will " + "restart because the replication slot name was changed", + MySubscription->name))); + + walrcv_disconnect(wrconn); + proc_exit(0); + } + /* * Exit if publication list was changed. The launcher will start * new worker. @@ -1382,8 +1397,7 @@ reread_subscription(void) } /* Check for other changes that should never happen too. */ - if (newsub->dbid != MySubscription->dbid || - strcmp(newsub->slotname, MySubscription->slotname) != 0) + if (newsub->dbid != MySubscription->dbid) { elog(ERROR, "subscription %u changed unexpectedly", MyLogicalRepWorker->subid);