Hi I got a report from Gabriele Bartolini and team that the pg_settings view does not get the pending_restart flag set when a setting's line is removed from a file (as opposed to its value changed).
The explanation seems to be that GUC_PENDING_RESTART is set by set_config_option, but when ProcessConfigFileInternal is called only to provide data (applySettings=true), then set_config_option is never called and thus the flag doesn't get set. I tried the attached patch, which sets GUC_PENDING_RESTART if we're doing pg_file_settings(). Then any subsequent read of pg_settings will have the pending_restart flag set. This seems to work correctly, and consistently with the case where you change a line (without removing it) in unpatched master. You could argue that this is *weird* (why does reading pg_file_settings set a flag in global state?) ... but that weirdness is not something this patch is introducing. -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/ "Hay dos momentos en la vida de un hombre en los que no debería especular: cuando puede permitírselo y cuando no puede" (Mark Twain)
>From 71fa384a6bf7aef58bdbe6d382cbc1219dbaa420 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera <alvhe...@alvh.no-ip.org> Date: Mon, 26 Jul 2021 18:35:09 -0400 Subject: [PATCH] fix guc --- src/backend/utils/misc/guc-file.l | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l index 986ce542e3..1fe3af6284 100644 --- a/src/backend/utils/misc/guc-file.l +++ b/src/backend/utils/misc/guc-file.l @@ -354,6 +354,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel) gconf->name), NULL, 0, &head, &tail); + gconf->status |= GUC_PENDING_RESTART; error = true; continue; } -- 2.20.1