Thread
Commits
-
Fix failure to verify PGC_[SU_]BACKEND GUCs in pg_file_settings view.
- ea61b1cf6470 12.18 landed
- e87252ceb8dc 16.2 landed
- cb88f44ec805 13.14 landed
- bf4f30a0fada 14.11 landed
- 76dd3d94a504 15.6 landed
- 059de3ca4766 17.0 landed
-
Two small bugs in guc.c
Tom Lane <tgl@sss.pgh.pa.us> — 2023-12-26T19:02:33Z
I investigated the report at [1] about pg_file_settings not reporting invalid values of "log_connections". It turns out it's broken for PGC_BACKEND and PGC_SU_BACKEND parameters, but not other ones. The cause is a bit of premature optimization in this logic: * If a PGC_BACKEND or PGC_SU_BACKEND parameter is changed in * the config file, we want to accept the new value in the * postmaster (whence it will propagate to * subsequently-started backends), but ignore it in existing * backends. ... Upon detecting that case, set_config_option just returns -1 immediately without bothering to validate the value. It should check for invalid input before returning -1, which we can mechanize with a one-line fix: - return -1; + changeVal = false; While studying this, I also noted that the bit to prevent changes in parallel workers seems seriously broken: if (IsInParallelMode() && changeVal && action != GUC_ACTION_SAVE) ereport(elevel, (errcode(ERRCODE_INVALID_TRANSACTION_STATE), errmsg("cannot set parameters during a parallel operation"))); This is evidently assuming that ereport() won't return, which seems like a very dubious assumption given the various values that elevel can have. Maybe it's accidentally true -- I don't recall any reports of trouble here -- but it sure looks fragile. Hence, proposed patch attached. regards, tom lane [1] https://www.postgresql.org/message-id/flat/CAK30z9T9gaF_isNquccZxi7agXCSjPjMsFXiifmkfu4VpZguxw%40mail.gmail.com -
Re: Two small bugs in guc.c
Tristan Partin <tristan@neon.tech> — 2023-12-27T18:26:42Z
On Tue Dec 26, 2023 at 1:02 PM CST, Tom Lane wrote: > I investigated the report at [1] about pg_file_settings not reporting > invalid values of "log_connections". It turns out it's broken for > PGC_BACKEND and PGC_SU_BACKEND parameters, but not other ones. > The cause is a bit of premature optimization in this logic: > > * If a PGC_BACKEND or PGC_SU_BACKEND parameter is changed in > * the config file, we want to accept the new value in the > * postmaster (whence it will propagate to > * subsequently-started backends), but ignore it in existing > * backends. ... > > Upon detecting that case, set_config_option just returns -1 immediately > without bothering to validate the value. It should check for invalid > input before returning -1, which we can mechanize with a one-line fix: > > - return -1; > + changeVal = false; > > While studying this, I also noted that the bit to prevent changes in > parallel workers seems seriously broken: > > if (IsInParallelMode() && changeVal && action != GUC_ACTION_SAVE) > ereport(elevel, > (errcode(ERRCODE_INVALID_TRANSACTION_STATE), > errmsg("cannot set parameters during a parallel operation"))); > > This is evidently assuming that ereport() won't return, which seems > like a very dubious assumption given the various values that elevel > can have. Maybe it's accidentally true -- I don't recall any > reports of trouble here -- but it sure looks fragile. > > Hence, proposed patch attached. Looks good to me. -- Tristan Partin Neon (https://neon.tech)