mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
Be more careful about GucSource for internally-driven GUC settings.
The original advice for hard-wired SetConfigOption calls was to use PGC_S_OVERRIDE, particularly for PGC_INTERNAL GUCs. However, that's really overkill for PGC_INTERNAL GUCs, since there is no possibility that we need to override a user-provided setting. Instead use PGC_S_DYNAMIC_DEFAULT in most places, so that the value will appear with source = 'default' in pg_settings and thereby not be shown by psql's new \dconfig command. The one exception is that when changing in_hot_standby in a hot-standby session, we still use PGC_S_OVERRIDE, because people felt that seeing that in \dconfig would be a good thing. Similarly use PGC_S_DYNAMIC_DEFAULT for the auto-tune value of wal_buffers (if possible, that is if wal_buffers wasn't explicitly set to -1), and for the typical 2MB value of max_stack_depth. In combination these changes remove four not-very-interesting entries from the typical output of \dconfig, all of which people fingered as "why is that showing up?" in the discussion thread. Discussion: https://postgr.es/m/3118455.1649267333@sss.pgh.pa.us
This commit is contained in:
@ -4167,7 +4167,7 @@ ReadControlFile(void)
|
||||
|
||||
snprintf(wal_segsz_str, sizeof(wal_segsz_str), "%d", wal_segment_size);
|
||||
SetConfigOption("wal_segment_size", wal_segsz_str, PGC_INTERNAL,
|
||||
PGC_S_OVERRIDE);
|
||||
PGC_S_DYNAMIC_DEFAULT);
|
||||
|
||||
/* check and update variables dependent on wal_segment_size */
|
||||
if (ConvertToXSegs(min_wal_size_mb, wal_segment_size) < 2)
|
||||
@ -4186,7 +4186,7 @@ ReadControlFile(void)
|
||||
|
||||
/* Make the initdb settings visible as GUC variables, too */
|
||||
SetConfigOption("data_checksums", DataChecksumsEnabled() ? "yes" : "no",
|
||||
PGC_INTERNAL, PGC_S_OVERRIDE);
|
||||
PGC_INTERNAL, PGC_S_DYNAMIC_DEFAULT);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -4343,13 +4343,22 @@ XLOGShmemSize(void)
|
||||
* This isn't an amazingly clean place to do this, but we must wait till
|
||||
* NBuffers has received its final value, and must do it before using the
|
||||
* value of XLOGbuffers to do anything important.
|
||||
*
|
||||
* We prefer to report this value's source as PGC_S_DYNAMIC_DEFAULT.
|
||||
* However, if the DBA explicitly set wal_buffers = -1 in the config file,
|
||||
* then PGC_S_DYNAMIC_DEFAULT will fail to override that and we must force
|
||||
* the matter with PGC_S_OVERRIDE.
|
||||
*/
|
||||
if (XLOGbuffers == -1)
|
||||
{
|
||||
char buf[32];
|
||||
|
||||
snprintf(buf, sizeof(buf), "%d", XLOGChooseNumBuffers());
|
||||
SetConfigOption("wal_buffers", buf, PGC_POSTMASTER, PGC_S_OVERRIDE);
|
||||
SetConfigOption("wal_buffers", buf, PGC_POSTMASTER,
|
||||
PGC_S_DYNAMIC_DEFAULT);
|
||||
if (XLOGbuffers == -1) /* failed to apply it? */
|
||||
SetConfigOption("wal_buffers", buf, PGC_POSTMASTER,
|
||||
PGC_S_OVERRIDE);
|
||||
}
|
||||
Assert(XLOGbuffers > 0);
|
||||
|
||||
|
Reference in New Issue
Block a user