diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/subscriptioncmds.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 2b6d3225594..e0add949534 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -301,10 +301,20 @@ CreateSubscription(CreateSubscriptionStmt *stmt) ereport(ERROR, (errmsg("could not connect to the publisher: %s", err))); - walrcv_create_slot(wrconn, slotname, false, &lsn); - ereport(NOTICE, - (errmsg("created replication slot \"%s\" on publisher", - slotname))); + PG_TRY(); + { + walrcv_create_slot(wrconn, slotname, false, &lsn); + ereport(NOTICE, + (errmsg("created replication slot \"%s\" on publisher", + slotname))); + } + PG_CATCH(); + { + /* Close the connection in case of failure. */ + walrcv_disconnect(wrconn); + PG_RE_THROW(); + } + PG_END_TRY(); /* And we are done with the remote side. */ walrcv_disconnect(wrconn); |