Hi, On Thu, May 22, 2025 at 2:09 AM Tom Lane <t...@sss.pgh.pa.us> wrote:
> Shaik Mohammad Mujeeb <mujeeb...@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/