diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 2de21903a1..8983cb5f5e 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -4170,8 +4170,8 @@ ANY num_sync ( ). + slot on the remote instance. The slot name can be configured + (using ), otherwise it will be generated. The default is off. This parameter can only be set in the postgresql.conf file or on the server command line. If this parameter is changed while the WAL receiver process is running, diff --git a/src/backend/postmaster/startup.c b/src/backend/postmaster/startup.c index fd9ac35dac..134600db7d 100644 --- a/src/backend/postmaster/startup.c +++ b/src/backend/postmaster/startup.c @@ -116,13 +116,8 @@ StartupRereadConfig(void) conninfoChanged = strcmp(conninfo, PrimaryConnInfo) != 0; slotnameChanged = strcmp(slotname, PrimarySlotName) != 0; + tempSlotChanged = (tempSlot != wal_receiver_create_temp_slot); - /* - * wal_receiver_create_temp_slot is used only when we have no slot - * configured. We do not need to track this change if it has no effect. - */ - if (!slotnameChanged && strcmp(PrimarySlotName, "") == 0) - tempSlotChanged = tempSlot != wal_receiver_create_temp_slot; pfree(conninfo); pfree(slotname); diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index 760e3c7ab0..303e739b5b 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -245,12 +245,6 @@ WalReceiverMain(void) startpoint = walrcv->receiveStart; startpointTLI = walrcv->receiveStartTLI; - /* - * At most one of is_temp_slot and slotname can be set; otherwise, - * RequestXLogStreaming messed up. - */ - Assert(!is_temp_slot || (slotname[0] == '\0')); - /* Initialise to a sanish value */ walrcv->lastMsgSendTime = walrcv->lastMsgReceiptTime = walrcv->latestWalEndTime = now; @@ -365,14 +359,14 @@ WalReceiverMain(void) /* * Create temporary replication slot if requested, and update slot - * name in shared memory. (Note the slot name cannot already be set - * in this case.) + * name in shared memory. */ if (is_temp_slot) { - snprintf(slotname, sizeof(slotname), - "pg_walreceiver_%lld", - (long long int) walrcv_get_backend_pid(wrconn)); + if (slotname[0] == '\0') + snprintf(slotname, sizeof(slotname), + "pg_walreceiver_%lld", + (long long int) walrcv_get_backend_pid(wrconn)); walrcv_create_slot(wrconn, slotname, true, 0, NULL); diff --git a/src/backend/replication/walreceiverfuncs.c b/src/backend/replication/walreceiverfuncs.c index 21d1823607..28117883e1 100644 --- a/src/backend/replication/walreceiverfuncs.c +++ b/src/backend/replication/walreceiverfuncs.c @@ -218,7 +218,7 @@ ShutdownWalRcv(void) * "recptr" indicates the position where streaming should begin. "conninfo" * is a libpq connection string to use. "slotname" is, optionally, the name * of a replication slot to acquire. "create_temp_slot" indicates to create - * a temporary slot when no "slotname" is given. + * a temporary slot. * * WAL receivers do not directly load GUC parameters used for the connection * to the primary, and rely on the values passed down by the caller of this @@ -254,23 +254,17 @@ RequestXLogStreaming(TimeLineID tli, XLogRecPtr recptr, const char *conninfo, else walrcv->conninfo[0] = '\0'; - /* - * Use configured replication slot if present, and ignore the value - * of create_temp_slot as the slot name should be persistent. Otherwise, - * use create_temp_slot to determine whether this WAL receiver should - * create a temporary slot by itself and use it, or not. - */ if (slotname != NULL && slotname[0] != '\0') { strlcpy((char *) walrcv->slotname, slotname, NAMEDATALEN); - walrcv->is_temp_slot = false; } else { walrcv->slotname[0] = '\0'; - walrcv->is_temp_slot = create_temp_slot; } + walrcv->is_temp_slot = create_temp_slot; + if (walrcv->walRcvState == WALRCV_STOPPED) { launch = true; diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 79bc7ac8ca..e702e3eddc 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2051,7 +2051,7 @@ static struct config_bool ConfigureNamesBool[] = { {"wal_receiver_create_temp_slot", PGC_SIGHUP, REPLICATION_STANDBY, - gettext_noop("Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured."), + gettext_noop("Sets whether a WAL receiver should create a temporary replication slot."), }, &wal_receiver_create_temp_slot, false, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index e9f8ca775d..e09be86940 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -319,8 +319,7 @@ #max_standby_streaming_delay = 30s # max delay before canceling queries # when reading streaming WAL; # -1 allows indefinite delay -#wal_receiver_create_temp_slot = off # Create temp slot if primary_slot_name - # is not set. +#wal_receiver_create_temp_slot = off # Create temporary replication slot #wal_receiver_status_interval = 10s # send replies at least this often # 0 disables #hot_standby_feedback = off # send info from standby to prevent