postgres.git / summary / log / commit / refs

commit    3d185cfc09c32b1f250adfbb62c0c7a3f96c5af2
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Wed Jan 10 23:09:29 2024 +0000
First released in: 17.0, 16.2

    Restore initdb's old behavior of always setting the lc_xxx GUCs.
    
    In commit 3e51b278d I (tgl) caused initdb to leave lc_messages and
    other lc_xxx GUCs commented-out in the installed postgresql.conf file
    if they were going to be set to 'C'.  This was a hack for cosmetic
    purposes, and it was buggy because lc_messages' wired-in default is
    not 'C' but '' (empty string).  That led to --no-locale not having
    the expected effect, since the postmaster would then obtain
    lc_messages from its startup environment.
    
    Let's just revert to the prior behavior of always de-commenting the
    lc_xxx entries; the argument for changing that longstanding behavior
    was weak in the first place.
    
    Also, fix postgresql.conf.sample's erroneous claim that the default
    value of lc_messages is 'C'.  I suspect that was what misled me into
    making this mistake in the first place.
    
    Report and patch by Kyotaro Horiguchi.  Back-patch to v16 where
    the problem was introduced.
    
    Discussion: https://postgr.es/m/20231122.162700.1995154567625541112.horikyota.ntt@gmail.com


src/backend/utils/misc/postgresql.conf.sample | 2 +- src/bin/initdb/initdb.c | 24 ++++++++---------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index b2809c711a1..835b0e9ba89 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -734,7 +734,7 @@ # encoding # These settings are initialized by initdb, but they can be changed. -#lc_messages = 'C' # locale for system error message +#lc_messages = '' # locale for system error message # strings #lc_monetary = 'C' # locale for monetary formatting #lc_numeric = 'C' # locale for number formatting diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 79181711909..ac409b00064 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -1227,25 +1227,17 @@ setup_config(void) conflines = replace_guc_value(conflines, "shared_buffers", repltok, false); - /* - * Hack: don't replace the LC_XXX GUCs when their value is 'C', because - * replace_guc_value will decide not to quote that, which looks strange. - */ - if (strcmp(lc_messages, "C") != 0) - conflines = replace_guc_value(conflines, "lc_messages", - lc_messages, false); + conflines = replace_guc_value(conflines, "lc_messages", + lc_messages, false); - if (strcmp(lc_monetary, "C") != 0) - conflines = replace_guc_value(conflines, "lc_monetary", - lc_monetary, false); + conflines = replace_guc_value(conflines, "lc_monetary", + lc_monetary, false); - if (strcmp(lc_numeric, "C") != 0) - conflines = replace_guc_value(conflines, "lc_numeric", - lc_numeric, false); + conflines = replace_guc_value(conflines, "lc_numeric", + lc_numeric, false); - if (strcmp(lc_time, "C") != 0) - conflines = replace_guc_value(conflines, "lc_time", - lc_time, false); + conflines = replace_guc_value(conflines, "lc_time", + lc_time, false); switch (locale_date_order(lc_time)) { [parent: 390298f08065]