* error.
*/
save_client_min_messages =
- pstrdup(GetConfigOption("client_min_messages", false));
+ pstrdup(GetConfigOption("client_min_messages", false, false));
if (client_min_messages < WARNING)
(void) set_config_option("client_min_messages", "warning",
PGC_USERSET, PGC_S_SESSION,
GUC_ACTION_LOCAL, true);
save_log_min_messages =
- pstrdup(GetConfigOption("log_min_messages", false));
+ pstrdup(GetConfigOption("log_min_messages", false, false));
if (log_min_messages < WARNING)
(void) set_config_option("log_min_messages", "warning",
PGC_SUSET, PGC_S_SESSION,
* but we cannot do that. We have to actually set the search_path GUC in
* case the extension script examines or changes it.
*/
- save_search_path = pstrdup(GetConfigOption("search_path", false));
+ save_search_path = pstrdup(GetConfigOption("search_path", false, false));
initStringInfo(&pathbuf);
appendStringInfoString(&pathbuf, quote_identifier(schemaName));
/* In SIGHUP cases in the postmaster, report changes */
if (context == PGC_SIGHUP && !IsUnderPostmaster)
{
- const char *preval = GetConfigOption(item->name, false);
+ const char *preval = GetConfigOption(item->name, true, false);
- /* string variables could be NULL; treat that as empty */
+ /* If option doesn't exist yet or is NULL, treat as empty string */
if (!preval)
preval = "";
/* must dup, else might have dangling pointer below */
if (pre_value)
{
- const char *post_value = GetConfigOption(item->name, false);
+ const char *post_value = GetConfigOption(item->name, true, false);
if (!post_value)
post_value = "";
/*
- * Fetch the current value of the option `name'. If the option doesn't exist,
- * throw an ereport and don't return.
+ * Fetch the current value of the option `name', as a string.
+ *
+ * If the option doesn't exist, return NULL if missing_ok is true (NOTE that
+ * this cannot be distinguished from a string variable with a NULL value!),
+ * otherwise throw an ereport and don't return.
*
* If restrict_superuser is true, we also enforce that only superusers can
* see GUC_SUPERUSER_ONLY variables. This should only be passed as true
* valid until the next call to configuration related functions.
*/
const char *
-GetConfigOption(const char *name, bool restrict_superuser)
+GetConfigOption(const char *name, bool missing_ok, bool restrict_superuser)
{
struct config_generic *record;
static char buffer[256];
record = find_option(name, false, ERROR);
if (record == NULL)
+ {
+ if (missing_ok)
+ return NULL;
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("unrecognized configuration parameter \"%s\"", name)));
+ errmsg("unrecognized configuration parameter \"%s\"",
+ name)));
+ }
if (restrict_superuser &&
(record->flags & GUC_SUPERUSER_ONLY) &&
!superuser())
extern void EmitWarningsOnPlaceholders(const char *className);
-extern const char *GetConfigOption(const char *name, bool restrict_superuser);
+extern const char *GetConfigOption(const char *name, bool missing_ok,
+ bool restrict_superuser);
extern const char *GetConfigOptionResetString(const char *name);
extern void ProcessConfigFile(GucContext context);
extern void InitializeGUCOptions(void);