Re: [Util] Warn and Remove Invalid GUCs

Поиск
Список
Период
Сортировка
От Srinath Reddy Sadipiralla
Тема Re: [Util] Warn and Remove Invalid GUCs
Дата
Msg-id CAFC+b6oZNNf0922EAaPr67cZ1XETpS=nevh89_UzLykGZqLrdA@mail.gmail.com
обсуждение исходный текст
Ответы Re: [Util] Warn and Remove Invalid GUCs
Список pgsql-hackers
Hi,

On Thu, May 22, 2025 at 2:09 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Shaik Mohammad Mujeeb <mujeeb.sk@zohocorp.com> writes:
> Currently, if there's a typo in an extension name while adding a GUC to postgresql.conf, PostgreSQL server starts up silently without any warning. This can be misleading, as one might assume the configuration has been correctly applied, when in fact the value hasn’t been set due to the typo.

Well, yeah, because the core server has no way to identify bogus
extension GUCs if the relevant extension isn't loaded.  We do
already complain about such things at extension load time.
 
the extension is loaded and then i entered the bogus extension GUC into postgresql.conf and restarted, i did not observe any complain/warning .


> To improve this experience, I’m proposing a patch that issues a
> warning for such invalid GUC entries.

How will you know they are invalid?  All I see in the patch is
a syntactic check, which looks quite redundant with
assignable_custom_variable_name().

after the extension is loaded, MarkGUCPrefixReserved() appends reserved_class_prefix with extension name ,so this patch has code to check if the the GUC's prefix from the postgresql.conf is in the reserved_class_prefix or not ,if not it invalidates and throws warning.Please correct me if i am wrong.

+static bool
+has_valid_class_prefix(const char *name){
+ /* If there's no separator, it can't be a custom variable */
+ const char *sep = strchr(name, GUC_QUALIFIER_SEPARATOR);
+ size_t class_len = sep - name;
+ ListCell *lc;
+ foreach(lc, reserved_class_prefix)
+ {
+ const char *rcprefix = lfirst(lc);
+
+ if (strlen(rcprefix) == class_len &&
+ strncmp(name, rcprefix, class_len) == 0)
+ {
+ return true;
+ }
+ }
+
+ return false;
+}

+void WarnAndRemoveInvalidGUCs(){
+ HASH_SEQ_STATUS status;
+ GUCHashEntry *hentry;
+
+ /* Warn and remove invalid placeholders. */
+ hash_seq_init(&status, guc_hashtab);
+ while ((hentry = (GUCHashEntry *) hash_seq_search(&status)) != NULL)
+ {
+ struct config_generic *var = hentry->gucvar;
+
+ if((var->flags & GUC_CUSTOM_PLACEHOLDER) != 0 && !has_valid_class_prefix(var->name)){
+ ereport(WARNING,
+ (errcode(ERRCODE_INVALID_NAME),
+ errmsg("invalid configuration parameter name \"%s\", removing it",
+ var->name),
+ errdetail("\"%s\" doesn't has a reserved prefix.",
+   var->name)));
+ remove_gucvar(var);
+ }
+ }
+}
+


--
Thanks,
Srinath Reddy Sadipiralla
EDB: https://www.enterprisedb.com/

В списке pgsql-hackers по дате отправления: