mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-17 19:30:00 +08:00
Save source of GUC settings, allowing different sources to be processed in
any order without affecting results.
This commit is contained in:
parent
ab786f6299
commit
51f195580f
@ -8,7 +8,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.120 2002/01/10 01:11:45 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.121 2002/02/23 01:31:34 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -262,7 +262,7 @@ BootstrapMain(int argc, char *argv[])
|
||||
* parsing */
|
||||
break;
|
||||
case 'F':
|
||||
SetConfigOption("fsync", "false", PGC_POSTMASTER, true);
|
||||
SetConfigOption("fsync", "false", PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
case 'o':
|
||||
StrNCpy(OutputFileName, optarg, MAXPGPATH);
|
||||
@ -274,7 +274,7 @@ BootstrapMain(int argc, char *argv[])
|
||||
/* indicates fork from postmaster */
|
||||
break;
|
||||
case 'B':
|
||||
SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, true);
|
||||
SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
|
@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.57 2001/12/09 04:37:50 thomas Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.58 2002/02/23 01:31:35 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -780,7 +780,7 @@ SetPGVariable(const char *name, List *args)
|
||||
if (strcasecmp(name, "session_authorization") == 0)
|
||||
SetSessionAuthorization(value);
|
||||
else
|
||||
SetConfigOption(name, value, superuser() ? PGC_SUSET : PGC_USERSET, false);
|
||||
SetConfigOption(name, value, superuser() ? PGC_SUSET : PGC_USERSET, PGC_S_SESSION);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -846,5 +846,5 @@ ResetPGVariable(const char *name)
|
||||
else
|
||||
SetConfigOption(name, NULL,
|
||||
superuser() ? PGC_SUSET : PGC_USERSET,
|
||||
false);
|
||||
PGC_S_SESSION);
|
||||
}
|
||||
|
@ -37,7 +37,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.266 2002/02/19 20:45:04 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.267 2002/02/23 01:31:35 petere Exp $
|
||||
*
|
||||
* NOTES
|
||||
*
|
||||
@ -396,6 +396,8 @@ PostmasterMain(int argc, char *argv[])
|
||||
ALLOCSET_DEFAULT_MAXSIZE);
|
||||
MemoryContextSwitchTo(PostmasterContext);
|
||||
|
||||
IgnoreSystemIndexes(false);
|
||||
|
||||
/*
|
||||
* Options setup
|
||||
*/
|
||||
@ -403,60 +405,12 @@ PostmasterMain(int argc, char *argv[])
|
||||
|
||||
/* PGPORT environment variable, if set, overrides GUC setting */
|
||||
if (getenv("PGPORT"))
|
||||
SetConfigOption("port", getenv("PGPORT"), PGC_POSTMASTER, true);
|
||||
SetConfigOption("port", getenv("PGPORT"),
|
||||
PGC_POSTMASTER, PGC_S_ARGV/*sortof*/);
|
||||
|
||||
potential_DataDir = getenv("PGDATA"); /* default value */
|
||||
|
||||
/*
|
||||
* First we must scan for a -D argument to get the data dir. Then read
|
||||
* the config file. Finally, scan all the other arguments. (Command
|
||||
* line switches override config file.)
|
||||
*
|
||||
* Note: The two lists of options must be exactly the same, even though
|
||||
* perhaps the first one would only have to be "D:" with opterr turned
|
||||
* off. But some versions of getopt (notably GNU) are going to
|
||||
* arbitrarily permute some "non-options" (according to the local
|
||||
* world view) which will result in some switches being associated
|
||||
* with the wrong argument. Death and destruction will occur.
|
||||
*/
|
||||
opterr = 1;
|
||||
while ((opt = getopt(argc, argv, "A:a:B:b:c:D:d:Fh:ik:lm:MN:no:p:Ss-:")) != -1)
|
||||
{
|
||||
switch (opt)
|
||||
{
|
||||
case 'D':
|
||||
potential_DataDir = optarg;
|
||||
break;
|
||||
|
||||
case '?':
|
||||
fprintf(stderr, gettext("Try '%s --help' for more information.\n"), progname);
|
||||
ExitPostmaster(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Postmaster accepts no non-option switch arguments.
|
||||
*/
|
||||
if (optind < argc)
|
||||
{
|
||||
postmaster_error("invalid argument -- %s", argv[optind]);
|
||||
fprintf(stderr, gettext("Try '%s --help' for more information.\n"),
|
||||
progname);
|
||||
ExitPostmaster(1);
|
||||
}
|
||||
|
||||
checkDataDir(potential_DataDir); /* issues error messages */
|
||||
SetDataDir(potential_DataDir);
|
||||
|
||||
ProcessConfigFile(PGC_POSTMASTER);
|
||||
|
||||
IgnoreSystemIndexes(false);
|
||||
|
||||
/* reset getopt(3) to rescan arguments */
|
||||
optind = 1;
|
||||
#ifdef HAVE_INT_OPTRESET
|
||||
optreset = 1; /* some systems need this too */
|
||||
#endif
|
||||
|
||||
while ((opt = getopt(argc, argv, "A:a:B:b:c:D:d:Fh:ik:lm:MN:no:p:Ss-:")) != -1)
|
||||
{
|
||||
@ -464,7 +418,7 @@ PostmasterMain(int argc, char *argv[])
|
||||
{
|
||||
case 'A':
|
||||
#ifdef USE_ASSERT_CHECKING
|
||||
SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, true);
|
||||
SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, PGC_S_ARGV);
|
||||
#else
|
||||
postmaster_error("Assert checking is not compiled in.");
|
||||
#endif
|
||||
@ -473,13 +427,13 @@ PostmasterMain(int argc, char *argv[])
|
||||
/* Can no longer set authentication method. */
|
||||
break;
|
||||
case 'B':
|
||||
SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, true);
|
||||
SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
case 'b':
|
||||
/* Can no longer set the backend executable file to use. */
|
||||
break;
|
||||
case 'D':
|
||||
/* already done above */
|
||||
potential_DataDir = optarg;
|
||||
break;
|
||||
case 'd':
|
||||
|
||||
@ -487,23 +441,23 @@ PostmasterMain(int argc, char *argv[])
|
||||
* Turn on debugging for the postmaster and the backend
|
||||
* servers descended from it.
|
||||
*/
|
||||
SetConfigOption("debug_level", optarg, PGC_POSTMASTER, true);
|
||||
SetConfigOption("debug_level", optarg, PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
case 'F':
|
||||
SetConfigOption("fsync", "false", PGC_POSTMASTER, true);
|
||||
SetConfigOption("fsync", "false", PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
case 'h':
|
||||
SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true);
|
||||
SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
case 'i':
|
||||
SetConfigOption("tcpip_socket", "true", PGC_POSTMASTER, true);
|
||||
SetConfigOption("tcpip_socket", "true", PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
case 'k':
|
||||
SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true);
|
||||
SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
#ifdef USE_SSL
|
||||
case 'l':
|
||||
SetConfigOption("ssl", "true", PGC_POSTMASTER, true);
|
||||
SetConfigOption("ssl", "true", PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
#endif
|
||||
case 'm':
|
||||
@ -519,7 +473,7 @@ PostmasterMain(int argc, char *argv[])
|
||||
break;
|
||||
case 'N':
|
||||
/* The max number of backends to start. */
|
||||
SetConfigOption("max_connections", optarg, PGC_POSTMASTER, true);
|
||||
SetConfigOption("max_connections", optarg, PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
case 'n':
|
||||
/* Don't reinit shared mem after abnormal exit */
|
||||
@ -536,7 +490,7 @@ PostmasterMain(int argc, char *argv[])
|
||||
strcpy(original_extraoptions, optarg);
|
||||
break;
|
||||
case 'p':
|
||||
SetConfigOption("port", optarg, PGC_POSTMASTER, true);
|
||||
SetConfigOption("port", optarg, PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
case 'S':
|
||||
|
||||
@ -546,7 +500,7 @@ PostmasterMain(int argc, char *argv[])
|
||||
* it's most badly needed on SysV-derived systems like
|
||||
* SVR4 and HP-UX.
|
||||
*/
|
||||
SetConfigOption("silent_mode", "true", PGC_POSTMASTER, true);
|
||||
SetConfigOption("silent_mode", "true", PGC_POSTMASTER, PGC_S_ARGV);
|
||||
break;
|
||||
case 's':
|
||||
|
||||
@ -573,7 +527,7 @@ PostmasterMain(int argc, char *argv[])
|
||||
elog(ERROR, "-c %s requires argument", optarg);
|
||||
}
|
||||
|
||||
SetConfigOption(name, value, PGC_POSTMASTER, true);
|
||||
SetConfigOption(name, value, PGC_POSTMASTER, PGC_S_ARGV);
|
||||
free(name);
|
||||
if (value)
|
||||
free(value);
|
||||
@ -581,12 +535,22 @@ PostmasterMain(int argc, char *argv[])
|
||||
}
|
||||
|
||||
default:
|
||||
/* shouldn't get here */
|
||||
fprintf(stderr, gettext("Try '%s --help' for more information.\n"), progname);
|
||||
ExitPostmaster(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Postmaster accepts no non-option switch arguments.
|
||||
*/
|
||||
if (optind < argc)
|
||||
{
|
||||
postmaster_error("invalid argument -- %s", argv[optind]);
|
||||
fprintf(stderr, gettext("Try '%s --help' for more information.\n"),
|
||||
progname);
|
||||
ExitPostmaster(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for invalid combinations of switches
|
||||
*/
|
||||
@ -601,6 +565,11 @@ PostmasterMain(int argc, char *argv[])
|
||||
ExitPostmaster(1);
|
||||
}
|
||||
|
||||
checkDataDir(potential_DataDir); /* issues error messages */
|
||||
SetDataDir(potential_DataDir);
|
||||
|
||||
ProcessConfigFile(PGC_POSTMASTER);
|
||||
|
||||
/*
|
||||
* Now that we are done processing the postmaster arguments, reset
|
||||
* getopt(3) library so that it will work correctly in subprocesses.
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.246 2002/02/19 19:54:43 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.247 2002/02/23 01:31:36 petere Exp $
|
||||
*
|
||||
* NOTES
|
||||
* this is the "main" module of the postgres backend and
|
||||
@ -1089,6 +1089,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
bool secure;
|
||||
int errs = 0;
|
||||
GucContext ctx;
|
||||
GucSource gucsource;
|
||||
char *tmp;
|
||||
|
||||
int firstchar;
|
||||
@ -1164,13 +1165,14 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
/* all options are allowed until '-p' */
|
||||
secure = true;
|
||||
ctx = PGC_POSTMASTER;
|
||||
gucsource = PGC_S_ARGV; /* initial switches came from command line */
|
||||
|
||||
while ((flag = getopt(argc, argv, "A:B:c:CD:d:Eef:FiNOPo:p:S:st:v:W:x:-:")) != -1)
|
||||
switch (flag)
|
||||
{
|
||||
case 'A':
|
||||
#ifdef USE_ASSERT_CHECKING
|
||||
SetConfigOption("debug_assertions", optarg, ctx, true);
|
||||
SetConfigOption("debug_assertions", optarg, ctx, gucsource);
|
||||
#else
|
||||
elog(NOTICE, "Assert checking is not compiled in");
|
||||
#endif
|
||||
@ -1181,7 +1183,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
/*
|
||||
* specify the size of buffer pool
|
||||
*/
|
||||
SetConfigOption("shared_buffers", optarg, ctx, true);
|
||||
SetConfigOption("shared_buffers", optarg, ctx, gucsource);
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
@ -1198,17 +1200,17 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
break;
|
||||
|
||||
case 'd': /* debug level */
|
||||
SetConfigOption("debug_level", optarg, ctx, true);
|
||||
SetConfigOption("debug_level", optarg, ctx, gucsource);
|
||||
if (DebugLvl >= 1)
|
||||
SetConfigOption("log_connections", "true", ctx, true);
|
||||
SetConfigOption("log_connections", "true", ctx, gucsource);
|
||||
if (DebugLvl >= 2)
|
||||
SetConfigOption("debug_print_query", "true", ctx, true);
|
||||
SetConfigOption("debug_print_query", "true", ctx, gucsource);
|
||||
if (DebugLvl >= 3)
|
||||
SetConfigOption("debug_print_parse", "true", ctx, true);
|
||||
SetConfigOption("debug_print_parse", "true", ctx, gucsource);
|
||||
if (DebugLvl >= 4)
|
||||
SetConfigOption("debug_print_plan", "true", ctx, true);
|
||||
SetConfigOption("debug_print_plan", "true", ctx, gucsource);
|
||||
if (DebugLvl >= 5)
|
||||
SetConfigOption("debug_print_rewritten", "true", ctx, true);
|
||||
SetConfigOption("debug_print_rewritten", "true", ctx, gucsource);
|
||||
break;
|
||||
|
||||
case 'E':
|
||||
@ -1232,7 +1234,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
/*
|
||||
* turn off fsync
|
||||
*/
|
||||
SetConfigOption("fsync", "false", ctx, true);
|
||||
SetConfigOption("fsync", "false", ctx, gucsource);
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
@ -1265,7 +1267,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
errs++;
|
||||
}
|
||||
if (tmp)
|
||||
SetConfigOption(tmp, "false", ctx, true);
|
||||
SetConfigOption(tmp, "false", ctx, gucsource);
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
@ -1319,6 +1321,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
secure = false; /* subsequent switches are NOT
|
||||
* secure */
|
||||
ctx = PGC_BACKEND;
|
||||
gucsource = PGC_S_CLIENT;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1327,7 +1330,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
/*
|
||||
* S - amount of sort memory to use in 1k bytes
|
||||
*/
|
||||
SetConfigOption("sort_mem", optarg, ctx, true);
|
||||
SetConfigOption("sort_mem", optarg, ctx, gucsource);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
@ -1335,7 +1338,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
/*
|
||||
* s - report usage statistics (timings) after each query
|
||||
*/
|
||||
SetConfigOption("show_query_stats", "true", ctx, true);
|
||||
SetConfigOption("show_query_stats", "true", ctx, gucsource);
|
||||
break;
|
||||
|
||||
case 't':
|
||||
@ -1368,7 +1371,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
break;
|
||||
}
|
||||
if (tmp)
|
||||
SetConfigOption(tmp, "true", ctx, true);
|
||||
SetConfigOption(tmp, "true", ctx, gucsource);
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
@ -1432,7 +1435,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
elog(ERROR, "-c %s requires argument", optarg);
|
||||
}
|
||||
|
||||
SetConfigOption(name, value, ctx, true);
|
||||
SetConfigOption(name, value, ctx, gucsource);
|
||||
free(name);
|
||||
if (value)
|
||||
free(value);
|
||||
@ -1451,7 +1454,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
(Show_parser_stats || Show_planner_stats || Show_executor_stats))
|
||||
{
|
||||
elog(NOTICE, "Query statistics are disabled because parser, planner, or executor statistics are on.");
|
||||
SetConfigOption("show_query_stats", "false", ctx, true);
|
||||
SetConfigOption("show_query_stats", "false", ctx, gucsource);
|
||||
}
|
||||
|
||||
if (!IsUnderPostmaster)
|
||||
@ -1623,7 +1626,7 @@ PostgresMain(int argc, char *argv[], const char *username)
|
||||
if (!IsUnderPostmaster)
|
||||
{
|
||||
puts("\nPOSTGRES backend interactive interface ");
|
||||
puts("$Revision: 1.246 $ $Date: 2002/02/19 19:54:43 $\n");
|
||||
puts("$Revision: 1.247 $ $Date: 2002/02/23 01:31:36 $\n");
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* Copyright 2000 by PostgreSQL Global Development Group
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/guc-file.l,v 1.9 2001/08/06 13:45:15 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/guc-file.l,v 1.10 2002/02/23 01:31:36 petere Exp $
|
||||
*/
|
||||
|
||||
%{
|
||||
@ -240,13 +240,15 @@ ProcessConfigFile(GucContext context)
|
||||
*/
|
||||
for(item = head; item; item=item->next)
|
||||
{
|
||||
if (!set_config_option(item->name, item->value, context, false, false))
|
||||
if (!set_config_option(item->name, item->value, context,
|
||||
false, PGC_S_INFINITY))
|
||||
goto cleanup_exit;
|
||||
}
|
||||
|
||||
/* If we got here all the options parsed okay. */
|
||||
for(item = head; item; item=item->next)
|
||||
set_config_option(item->name, item->value, context, true, true);
|
||||
set_config_option(item->name, item->value, context,
|
||||
true, PGC_S_FILE);
|
||||
|
||||
cleanup_exit:
|
||||
free_name_value_list(head);
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Support for grand unified configuration scheme, including SET
|
||||
* command, configuration file, and command line options.
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.58 2001/10/30 05:38:56 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.59 2002/02/23 01:31:36 petere Exp $
|
||||
*
|
||||
* Copyright 2000 by PostgreSQL Global Development Group
|
||||
* Written by Peter Eisentraut <peter_e@gmx.net>.
|
||||
@ -107,6 +107,7 @@ struct config_generic
|
||||
{
|
||||
const char *name;
|
||||
GucContext context;
|
||||
GucSource source;
|
||||
void *variable;
|
||||
};
|
||||
|
||||
@ -115,6 +116,7 @@ struct config_bool
|
||||
{
|
||||
const char *name;
|
||||
GucContext context;
|
||||
GucSource source;
|
||||
bool *variable;
|
||||
bool default_val;
|
||||
/* No need for parse_hook ... presumably both values are legal */
|
||||
@ -126,6 +128,7 @@ struct config_int
|
||||
{
|
||||
const char *name;
|
||||
GucContext context;
|
||||
GucSource source;
|
||||
int *variable;
|
||||
int default_val;
|
||||
int min;
|
||||
@ -139,6 +142,7 @@ struct config_real
|
||||
{
|
||||
const char *name;
|
||||
GucContext context;
|
||||
GucSource source;
|
||||
double *variable;
|
||||
double default_val;
|
||||
double min;
|
||||
@ -157,6 +161,7 @@ struct config_string
|
||||
{
|
||||
const char *name;
|
||||
GucContext context;
|
||||
GucSource source;
|
||||
char **variable;
|
||||
const char *boot_default_val;
|
||||
bool (*parse_hook) (const char *proposed);
|
||||
@ -193,157 +198,157 @@ static struct config_bool
|
||||
ConfigureNamesBool[] =
|
||||
{
|
||||
{
|
||||
"enable_seqscan", PGC_USERSET, &enable_seqscan, true, NULL
|
||||
"enable_seqscan", PGC_USERSET, PGC_S_DEFAULT, &enable_seqscan, true, NULL
|
||||
},
|
||||
{
|
||||
"enable_indexscan", PGC_USERSET, &enable_indexscan, true, NULL
|
||||
"enable_indexscan", PGC_USERSET, PGC_S_DEFAULT, &enable_indexscan, true, NULL
|
||||
},
|
||||
{
|
||||
"enable_tidscan", PGC_USERSET, &enable_tidscan, true, NULL
|
||||
"enable_tidscan", PGC_USERSET, PGC_S_DEFAULT, &enable_tidscan, true, NULL
|
||||
},
|
||||
{
|
||||
"enable_sort", PGC_USERSET, &enable_sort, true, NULL
|
||||
"enable_sort", PGC_USERSET, PGC_S_DEFAULT, &enable_sort, true, NULL
|
||||
},
|
||||
{
|
||||
"enable_nestloop", PGC_USERSET, &enable_nestloop, true, NULL
|
||||
"enable_nestloop", PGC_USERSET, PGC_S_DEFAULT, &enable_nestloop, true, NULL
|
||||
},
|
||||
{
|
||||
"enable_mergejoin", PGC_USERSET, &enable_mergejoin, true, NULL
|
||||
"enable_mergejoin", PGC_USERSET, PGC_S_DEFAULT, &enable_mergejoin, true, NULL
|
||||
},
|
||||
{
|
||||
"enable_hashjoin", PGC_USERSET, &enable_hashjoin, true, NULL
|
||||
"enable_hashjoin", PGC_USERSET, PGC_S_DEFAULT, &enable_hashjoin, true, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"ksqo", PGC_USERSET, &_use_keyset_query_optimizer, false, NULL
|
||||
"ksqo", PGC_USERSET, PGC_S_DEFAULT, &_use_keyset_query_optimizer, false, NULL
|
||||
},
|
||||
{
|
||||
"geqo", PGC_USERSET, &enable_geqo, true, NULL
|
||||
"geqo", PGC_USERSET, PGC_S_DEFAULT, &enable_geqo, true, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"tcpip_socket", PGC_POSTMASTER, &NetServer, false, NULL
|
||||
"tcpip_socket", PGC_POSTMASTER, PGC_S_DEFAULT, &NetServer, false, NULL
|
||||
},
|
||||
{
|
||||
"ssl", PGC_POSTMASTER, &EnableSSL, false, NULL
|
||||
"ssl", PGC_POSTMASTER, PGC_S_DEFAULT, &EnableSSL, false, NULL
|
||||
},
|
||||
{
|
||||
"fsync", PGC_SIGHUP, &enableFsync, true, NULL
|
||||
"fsync", PGC_SIGHUP, PGC_S_DEFAULT, &enableFsync, true, NULL
|
||||
},
|
||||
{
|
||||
"silent_mode", PGC_POSTMASTER, &SilentMode, false, NULL
|
||||
"silent_mode", PGC_POSTMASTER, PGC_S_DEFAULT, &SilentMode, false, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"log_connections", PGC_BACKEND, &Log_connections, false, NULL
|
||||
"log_connections", PGC_BACKEND, PGC_S_DEFAULT, &Log_connections, false, NULL
|
||||
},
|
||||
{
|
||||
"log_timestamp", PGC_SIGHUP, &Log_timestamp, false, NULL
|
||||
"log_timestamp", PGC_SIGHUP, PGC_S_DEFAULT, &Log_timestamp, false, NULL
|
||||
},
|
||||
{
|
||||
"log_pid", PGC_SIGHUP, &Log_pid, false, NULL
|
||||
"log_pid", PGC_SIGHUP, PGC_S_DEFAULT, &Log_pid, false, NULL
|
||||
},
|
||||
|
||||
#ifdef USE_ASSERT_CHECKING
|
||||
{
|
||||
"debug_assertions", PGC_USERSET, &assert_enabled, true, NULL
|
||||
"debug_assertions", PGC_USERSET, PGC_S_DEFAULT, &assert_enabled, true, NULL
|
||||
},
|
||||
#endif
|
||||
|
||||
{
|
||||
"debug_print_query", PGC_USERSET, &Debug_print_query, false, NULL
|
||||
"debug_print_query", PGC_USERSET, PGC_S_DEFAULT, &Debug_print_query, false, NULL
|
||||
},
|
||||
{
|
||||
"debug_print_parse", PGC_USERSET, &Debug_print_parse, false, NULL
|
||||
"debug_print_parse", PGC_USERSET, PGC_S_DEFAULT, &Debug_print_parse, false, NULL
|
||||
},
|
||||
{
|
||||
"debug_print_rewritten", PGC_USERSET, &Debug_print_rewritten, false, NULL
|
||||
"debug_print_rewritten", PGC_USERSET, PGC_S_DEFAULT, &Debug_print_rewritten, false, NULL
|
||||
},
|
||||
{
|
||||
"debug_print_plan", PGC_USERSET, &Debug_print_plan, false, NULL
|
||||
"debug_print_plan", PGC_USERSET, PGC_S_DEFAULT, &Debug_print_plan, false, NULL
|
||||
},
|
||||
{
|
||||
"debug_pretty_print", PGC_USERSET, &Debug_pretty_print, false, NULL
|
||||
"debug_pretty_print", PGC_USERSET, PGC_S_DEFAULT, &Debug_pretty_print, false, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"show_parser_stats", PGC_USERSET, &Show_parser_stats, false, NULL
|
||||
"show_parser_stats", PGC_USERSET, PGC_S_DEFAULT, &Show_parser_stats, false, NULL
|
||||
},
|
||||
{
|
||||
"show_planner_stats", PGC_USERSET, &Show_planner_stats, false, NULL
|
||||
"show_planner_stats", PGC_USERSET, PGC_S_DEFAULT, &Show_planner_stats, false, NULL
|
||||
},
|
||||
{
|
||||
"show_executor_stats", PGC_USERSET, &Show_executor_stats, false, NULL
|
||||
"show_executor_stats", PGC_USERSET, PGC_S_DEFAULT, &Show_executor_stats, false, NULL
|
||||
},
|
||||
{
|
||||
"show_query_stats", PGC_USERSET, &Show_query_stats, false, NULL
|
||||
"show_query_stats", PGC_USERSET, PGC_S_DEFAULT, &Show_query_stats, false, NULL
|
||||
},
|
||||
#ifdef BTREE_BUILD_STATS
|
||||
{
|
||||
"show_btree_build_stats", PGC_SUSET, &Show_btree_build_stats, false, NULL
|
||||
"show_btree_build_stats", PGC_SUSET, PGC_S_DEFAULT, &Show_btree_build_stats, false, NULL
|
||||
},
|
||||
#endif
|
||||
|
||||
{
|
||||
"stats_start_collector", PGC_POSTMASTER, &pgstat_collect_startcollector, true, NULL
|
||||
"stats_start_collector", PGC_POSTMASTER, PGC_S_DEFAULT, &pgstat_collect_startcollector, true, NULL
|
||||
},
|
||||
{
|
||||
"stats_reset_on_server_start", PGC_POSTMASTER, &pgstat_collect_resetonpmstart, true, NULL
|
||||
"stats_reset_on_server_start", PGC_POSTMASTER, PGC_S_DEFAULT, &pgstat_collect_resetonpmstart, true, NULL
|
||||
},
|
||||
{
|
||||
"stats_command_string", PGC_SUSET, &pgstat_collect_querystring, false, NULL
|
||||
"stats_command_string", PGC_SUSET, PGC_S_DEFAULT, &pgstat_collect_querystring, false, NULL
|
||||
},
|
||||
{
|
||||
"stats_row_level", PGC_SUSET, &pgstat_collect_tuplelevel, false, NULL
|
||||
"stats_row_level", PGC_SUSET, PGC_S_DEFAULT, &pgstat_collect_tuplelevel, false, NULL
|
||||
},
|
||||
{
|
||||
"stats_block_level", PGC_SUSET, &pgstat_collect_blocklevel, false, NULL
|
||||
"stats_block_level", PGC_SUSET, PGC_S_DEFAULT, &pgstat_collect_blocklevel, false, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"trace_notify", PGC_USERSET, &Trace_notify, false, NULL
|
||||
"trace_notify", PGC_USERSET, PGC_S_DEFAULT, &Trace_notify, false, NULL
|
||||
},
|
||||
|
||||
#ifdef LOCK_DEBUG
|
||||
{
|
||||
"trace_locks", PGC_SUSET, &Trace_locks, false, NULL
|
||||
"trace_locks", PGC_SUSET, PGC_S_DEFAULT, &Trace_locks, false, NULL
|
||||
},
|
||||
{
|
||||
"trace_userlocks", PGC_SUSET, &Trace_userlocks, false, NULL
|
||||
"trace_userlocks", PGC_SUSET, PGC_S_DEFAULT, &Trace_userlocks, false, NULL
|
||||
},
|
||||
{
|
||||
"trace_lwlocks", PGC_SUSET, &Trace_lwlocks, false, NULL
|
||||
"trace_lwlocks", PGC_SUSET, PGC_S_DEFAULT, &Trace_lwlocks, false, NULL
|
||||
},
|
||||
{
|
||||
"debug_deadlocks", PGC_SUSET, &Debug_deadlocks, false, NULL
|
||||
"debug_deadlocks", PGC_SUSET, PGC_S_DEFAULT, &Debug_deadlocks, false, NULL
|
||||
},
|
||||
#endif
|
||||
|
||||
{
|
||||
"hostname_lookup", PGC_SIGHUP, &HostnameLookup, false, NULL
|
||||
"hostname_lookup", PGC_SIGHUP, PGC_S_DEFAULT, &HostnameLookup, false, NULL
|
||||
},
|
||||
{
|
||||
"show_source_port", PGC_SIGHUP, &ShowPortNumber, false, NULL
|
||||
"show_source_port", PGC_SIGHUP, PGC_S_DEFAULT, &ShowPortNumber, false, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"sql_inheritance", PGC_USERSET, &SQL_inheritance, true, NULL
|
||||
"sql_inheritance", PGC_USERSET, PGC_S_DEFAULT, &SQL_inheritance, true, NULL
|
||||
},
|
||||
{
|
||||
"australian_timezones", PGC_USERSET, &Australian_timezones, false, ClearDateCache
|
||||
"australian_timezones", PGC_USERSET, PGC_S_DEFAULT, &Australian_timezones, false, ClearDateCache
|
||||
},
|
||||
{
|
||||
"fixbtree", PGC_POSTMASTER, &FixBTree, true, NULL
|
||||
"fixbtree", PGC_POSTMASTER, PGC_S_DEFAULT, &FixBTree, true, NULL
|
||||
},
|
||||
{
|
||||
"password_encryption", PGC_USERSET, &Password_encryption, false, NULL
|
||||
"password_encryption", PGC_USERSET, PGC_S_DEFAULT, &Password_encryption, false, NULL
|
||||
},
|
||||
{
|
||||
"transform_null_equals", PGC_USERSET, &Transform_null_equals, false, NULL
|
||||
"transform_null_equals", PGC_USERSET, PGC_S_DEFAULT, &Transform_null_equals, false, NULL
|
||||
},
|
||||
|
||||
{
|
||||
NULL, 0, NULL, false, NULL
|
||||
NULL, 0, 0, NULL, false, NULL
|
||||
}
|
||||
};
|
||||
|
||||
@ -352,34 +357,34 @@ static struct config_int
|
||||
ConfigureNamesInt[] =
|
||||
{
|
||||
{
|
||||
"geqo_threshold", PGC_USERSET, &geqo_rels,
|
||||
"geqo_threshold", PGC_USERSET, PGC_S_DEFAULT, &geqo_rels,
|
||||
DEFAULT_GEQO_RELS, 2, INT_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
"geqo_pool_size", PGC_USERSET, &Geqo_pool_size,
|
||||
"geqo_pool_size", PGC_USERSET, PGC_S_DEFAULT, &Geqo_pool_size,
|
||||
DEFAULT_GEQO_POOL_SIZE, 0, MAX_GEQO_POOL_SIZE, NULL, NULL
|
||||
},
|
||||
{
|
||||
"geqo_effort", PGC_USERSET, &Geqo_effort,
|
||||
"geqo_effort", PGC_USERSET, PGC_S_DEFAULT, &Geqo_effort,
|
||||
1, 1, INT_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
"geqo_generations", PGC_USERSET, &Geqo_generations,
|
||||
"geqo_generations", PGC_USERSET, PGC_S_DEFAULT, &Geqo_generations,
|
||||
0, 0, INT_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
"geqo_random_seed", PGC_USERSET, &Geqo_random_seed,
|
||||
"geqo_random_seed", PGC_USERSET, PGC_S_DEFAULT, &Geqo_random_seed,
|
||||
-1, INT_MIN, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"deadlock_timeout", PGC_POSTMASTER, &DeadlockTimeout,
|
||||
"deadlock_timeout", PGC_POSTMASTER, PGC_S_DEFAULT, &DeadlockTimeout,
|
||||
1000, 0, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
#ifdef ENABLE_SYSLOG
|
||||
{
|
||||
"syslog", PGC_SIGHUP, &Use_syslog,
|
||||
"syslog", PGC_SIGHUP, PGC_S_DEFAULT, &Use_syslog,
|
||||
0, 0, 2, NULL, NULL
|
||||
},
|
||||
#endif
|
||||
@ -390,121 +395,121 @@ static struct config_int
|
||||
* constraints here are partially unused.
|
||||
*/
|
||||
{
|
||||
"max_connections", PGC_POSTMASTER, &MaxBackends,
|
||||
"max_connections", PGC_POSTMASTER, PGC_S_DEFAULT, &MaxBackends,
|
||||
DEF_MAXBACKENDS, 1, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"shared_buffers", PGC_POSTMASTER, &NBuffers,
|
||||
"shared_buffers", PGC_POSTMASTER, PGC_S_DEFAULT, &NBuffers,
|
||||
DEF_NBUFFERS, 16, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"port", PGC_POSTMASTER, &PostPortNumber,
|
||||
"port", PGC_POSTMASTER, PGC_S_DEFAULT, &PostPortNumber,
|
||||
DEF_PGPORT, 1, 65535, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"unix_socket_permissions", PGC_POSTMASTER, &Unix_socket_permissions,
|
||||
"unix_socket_permissions", PGC_POSTMASTER, PGC_S_DEFAULT, &Unix_socket_permissions,
|
||||
0777, 0000, 0777, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"sort_mem", PGC_USERSET, &SortMem,
|
||||
"sort_mem", PGC_USERSET, PGC_S_DEFAULT, &SortMem,
|
||||
512, 4 * BLCKSZ / 1024, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"vacuum_mem", PGC_USERSET, &VacuumMem,
|
||||
"vacuum_mem", PGC_USERSET, PGC_S_DEFAULT, &VacuumMem,
|
||||
8192, 1024, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"max_files_per_process", PGC_BACKEND, &max_files_per_process,
|
||||
"max_files_per_process", PGC_BACKEND, PGC_S_DEFAULT, &max_files_per_process,
|
||||
1000, 25, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"debug_level", PGC_USERSET, &DebugLvl,
|
||||
"debug_level", PGC_USERSET, PGC_S_DEFAULT, &DebugLvl,
|
||||
0, 0, 16, NULL, NULL
|
||||
},
|
||||
|
||||
#ifdef LOCK_DEBUG
|
||||
{
|
||||
"trace_lock_oidmin", PGC_SUSET, &Trace_lock_oidmin,
|
||||
"trace_lock_oidmin", PGC_SUSET, PGC_S_DEFAULT, &Trace_lock_oidmin,
|
||||
BootstrapObjectIdData, 1, INT_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
"trace_lock_table", PGC_SUSET, &Trace_lock_table,
|
||||
"trace_lock_table", PGC_SUSET, PGC_S_DEFAULT, &Trace_lock_table,
|
||||
0, 0, INT_MAX, NULL, NULL
|
||||
},
|
||||
#endif
|
||||
{
|
||||
"max_expr_depth", PGC_USERSET, &max_expr_depth,
|
||||
"max_expr_depth", PGC_USERSET, PGC_S_DEFAULT, &max_expr_depth,
|
||||
DEFAULT_MAX_EXPR_DEPTH, 10, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"max_fsm_relations", PGC_POSTMASTER, &MaxFSMRelations,
|
||||
"max_fsm_relations", PGC_POSTMASTER, PGC_S_DEFAULT, &MaxFSMRelations,
|
||||
100, 10, INT_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
"max_fsm_pages", PGC_POSTMASTER, &MaxFSMPages,
|
||||
"max_fsm_pages", PGC_POSTMASTER, PGC_S_DEFAULT, &MaxFSMPages,
|
||||
10000, 1000, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"max_locks_per_transaction", PGC_POSTMASTER, &max_locks_per_xact,
|
||||
"max_locks_per_transaction", PGC_POSTMASTER, PGC_S_DEFAULT, &max_locks_per_xact,
|
||||
64, 10, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"authentication_timeout", PGC_SIGHUP, &AuthenticationTimeout,
|
||||
"authentication_timeout", PGC_SIGHUP, PGC_S_DEFAULT, &AuthenticationTimeout,
|
||||
60, 1, 600, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"pre_auth_delay", PGC_SIGHUP, &PreAuthDelay,
|
||||
"pre_auth_delay", PGC_SIGHUP, PGC_S_DEFAULT, &PreAuthDelay,
|
||||
0, 0, 60, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"checkpoint_segments", PGC_SIGHUP, &CheckPointSegments,
|
||||
"checkpoint_segments", PGC_SIGHUP, PGC_S_DEFAULT, &CheckPointSegments,
|
||||
3, 1, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"checkpoint_timeout", PGC_SIGHUP, &CheckPointTimeout,
|
||||
"checkpoint_timeout", PGC_SIGHUP, PGC_S_DEFAULT, &CheckPointTimeout,
|
||||
300, 30, 3600, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"wal_buffers", PGC_POSTMASTER, &XLOGbuffers,
|
||||
"wal_buffers", PGC_POSTMASTER, PGC_S_DEFAULT, &XLOGbuffers,
|
||||
8, 4, INT_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"wal_files", PGC_SIGHUP, &XLOGfiles,
|
||||
"wal_files", PGC_SIGHUP, PGC_S_DEFAULT, &XLOGfiles,
|
||||
0, 0, 64, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"wal_debug", PGC_SUSET, &XLOG_DEBUG,
|
||||
"wal_debug", PGC_SUSET, PGC_S_DEFAULT, &XLOG_DEBUG,
|
||||
0, 0, 16, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"commit_delay", PGC_USERSET, &CommitDelay,
|
||||
"commit_delay", PGC_USERSET, PGC_S_DEFAULT, &CommitDelay,
|
||||
0, 0, 100000, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"commit_siblings", PGC_USERSET, &CommitSiblings,
|
||||
"commit_siblings", PGC_USERSET, PGC_S_DEFAULT, &CommitSiblings,
|
||||
5, 1, 1000, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
NULL, 0, NULL, 0, 0, 0, NULL, NULL
|
||||
NULL, 0, 0, NULL, 0, 0, 0, NULL, NULL
|
||||
}
|
||||
};
|
||||
|
||||
@ -513,34 +518,34 @@ static struct config_real
|
||||
ConfigureNamesReal[] =
|
||||
{
|
||||
{
|
||||
"effective_cache_size", PGC_USERSET, &effective_cache_size,
|
||||
"effective_cache_size", PGC_USERSET, PGC_S_DEFAULT, &effective_cache_size,
|
||||
DEFAULT_EFFECTIVE_CACHE_SIZE, 0, DBL_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
"random_page_cost", PGC_USERSET, &random_page_cost,
|
||||
"random_page_cost", PGC_USERSET, PGC_S_DEFAULT, &random_page_cost,
|
||||
DEFAULT_RANDOM_PAGE_COST, 0, DBL_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
"cpu_tuple_cost", PGC_USERSET, &cpu_tuple_cost,
|
||||
"cpu_tuple_cost", PGC_USERSET, PGC_S_DEFAULT, &cpu_tuple_cost,
|
||||
DEFAULT_CPU_TUPLE_COST, 0, DBL_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
"cpu_index_tuple_cost", PGC_USERSET, &cpu_index_tuple_cost,
|
||||
"cpu_index_tuple_cost", PGC_USERSET, PGC_S_DEFAULT, &cpu_index_tuple_cost,
|
||||
DEFAULT_CPU_INDEX_TUPLE_COST, 0, DBL_MAX, NULL, NULL
|
||||
},
|
||||
{
|
||||
"cpu_operator_cost", PGC_USERSET, &cpu_operator_cost,
|
||||
"cpu_operator_cost", PGC_USERSET, PGC_S_DEFAULT, &cpu_operator_cost,
|
||||
DEFAULT_CPU_OPERATOR_COST, 0, DBL_MAX, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"geqo_selection_bias", PGC_USERSET, &Geqo_selection_bias,
|
||||
"geqo_selection_bias", PGC_USERSET, PGC_S_DEFAULT, &Geqo_selection_bias,
|
||||
DEFAULT_GEQO_SELECTION_BIAS, MIN_GEQO_SELECTION_BIAS,
|
||||
MAX_GEQO_SELECTION_BIAS, NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
NULL, 0, NULL, 0.0, 0.0, 0.0, NULL, NULL
|
||||
NULL, 0, 0, NULL, 0.0, 0.0, 0.0, NULL, NULL
|
||||
}
|
||||
};
|
||||
|
||||
@ -549,54 +554,54 @@ static struct config_string
|
||||
ConfigureNamesString[] =
|
||||
{
|
||||
{
|
||||
"default_transaction_isolation", PGC_USERSET, &default_iso_level_string,
|
||||
"default_transaction_isolation", PGC_USERSET, PGC_S_DEFAULT, &default_iso_level_string,
|
||||
"read committed", check_defaultxactisolevel, assign_defaultxactisolevel
|
||||
},
|
||||
|
||||
{
|
||||
"dynamic_library_path", PGC_SUSET, &Dynamic_library_path,
|
||||
"dynamic_library_path", PGC_SUSET, PGC_S_DEFAULT, &Dynamic_library_path,
|
||||
"$libdir", NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"krb_server_keyfile", PGC_POSTMASTER, &pg_krb_server_keyfile,
|
||||
"krb_server_keyfile", PGC_POSTMASTER, PGC_S_DEFAULT, &pg_krb_server_keyfile,
|
||||
PG_KRB_SRVTAB, NULL, NULL
|
||||
},
|
||||
|
||||
#ifdef ENABLE_SYSLOG
|
||||
{
|
||||
"syslog_facility", PGC_POSTMASTER, &Syslog_facility,
|
||||
"syslog_facility", PGC_POSTMASTER, PGC_S_DEFAULT, &Syslog_facility,
|
||||
"LOCAL0", check_facility, NULL
|
||||
},
|
||||
{
|
||||
"syslog_ident", PGC_POSTMASTER, &Syslog_ident,
|
||||
"syslog_ident", PGC_POSTMASTER, PGC_S_DEFAULT, &Syslog_ident,
|
||||
"postgres", NULL, NULL
|
||||
},
|
||||
#endif
|
||||
|
||||
{
|
||||
"unix_socket_group", PGC_POSTMASTER, &Unix_socket_group,
|
||||
"unix_socket_group", PGC_POSTMASTER, PGC_S_DEFAULT, &Unix_socket_group,
|
||||
"", NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"unix_socket_directory", PGC_POSTMASTER, &UnixSocketDir,
|
||||
"unix_socket_directory", PGC_POSTMASTER, PGC_S_DEFAULT, &UnixSocketDir,
|
||||
"", NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"virtual_host", PGC_POSTMASTER, &VirtualHost,
|
||||
"virtual_host", PGC_POSTMASTER, PGC_S_DEFAULT, &VirtualHost,
|
||||
"", NULL, NULL
|
||||
},
|
||||
|
||||
{
|
||||
"wal_sync_method", PGC_SIGHUP, &XLOG_sync_method,
|
||||
"wal_sync_method", PGC_SIGHUP, PGC_S_DEFAULT, &XLOG_sync_method,
|
||||
XLOG_sync_method_default, check_xlog_sync_method,
|
||||
assign_xlog_sync_method
|
||||
},
|
||||
|
||||
{
|
||||
NULL, 0, NULL, NULL, NULL, NULL
|
||||
NULL, 0, 0, NULL, NULL, NULL, NULL
|
||||
}
|
||||
};
|
||||
|
||||
@ -870,11 +875,12 @@ parse_real(const char *value, double *result)
|
||||
*/
|
||||
bool
|
||||
set_config_option(const char *name, const char *value,
|
||||
GucContext context, bool DoIt, bool makeDefault)
|
||||
GucContext context, bool DoIt, GucSource source)
|
||||
{
|
||||
struct config_generic *record;
|
||||
enum config_type type;
|
||||
int elevel;
|
||||
bool makeDefault;
|
||||
|
||||
elevel = (context == PGC_SIGHUP) ? DEBUG : ERROR;
|
||||
|
||||
@ -885,6 +891,15 @@ set_config_option(const char *name, const char *value,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (record->source > source)
|
||||
{
|
||||
if (DebugLvl > 1)
|
||||
elog(DEBUG, "setting %s refused because previous source is higher",
|
||||
name);
|
||||
return false;
|
||||
}
|
||||
makeDefault = source < PGC_S_SESSION;
|
||||
|
||||
/*
|
||||
* Check if the option can be set at this time. See guc.h for the
|
||||
* precise rules. Note that we don't want to throw errors if we're in
|
||||
@ -961,6 +976,7 @@ set_config_option(const char *name, const char *value,
|
||||
*conf->variable = boolval;
|
||||
if (makeDefault)
|
||||
conf->default_val = boolval;
|
||||
conf->source = source;
|
||||
}
|
||||
}
|
||||
else if (DoIt)
|
||||
@ -1005,6 +1021,7 @@ set_config_option(const char *name, const char *value,
|
||||
*conf->variable = intval;
|
||||
if (makeDefault)
|
||||
conf->default_val = intval;
|
||||
conf->source = source;
|
||||
}
|
||||
}
|
||||
else if (DoIt)
|
||||
@ -1049,6 +1066,7 @@ set_config_option(const char *name, const char *value,
|
||||
*conf->variable = dval;
|
||||
if (makeDefault)
|
||||
conf->default_val = dval;
|
||||
conf->source = source;
|
||||
}
|
||||
}
|
||||
else if (DoIt)
|
||||
@ -1099,6 +1117,7 @@ set_config_option(const char *name, const char *value,
|
||||
free(conf->default_val);
|
||||
conf->default_val = str;
|
||||
}
|
||||
conf->source = source;
|
||||
}
|
||||
}
|
||||
else if (DoIt)
|
||||
@ -1143,9 +1162,9 @@ set_config_option(const char *name, const char *value,
|
||||
*/
|
||||
void
|
||||
SetConfigOption(const char *name, const char *value,
|
||||
GucContext context, bool makeDefault)
|
||||
GucContext context, GucSource source)
|
||||
{
|
||||
(void) set_config_option(name, value, context, true, makeDefault);
|
||||
(void) set_config_option(name, value, context, true, source);
|
||||
}
|
||||
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
* External declarations pertaining to backend/utils/misc/guc.c and
|
||||
* backend/utils/misc/guc-file.l
|
||||
*
|
||||
* $Id: guc.h,v 1.13 2001/11/05 17:46:36 momjian Exp $
|
||||
* $Id: guc.h,v 1.14 2002/02/23 01:31:37 petere Exp $
|
||||
*/
|
||||
#ifndef GUC_H
|
||||
#define GUC_H
|
||||
@ -46,15 +46,32 @@ typedef enum
|
||||
PGC_USERSET
|
||||
} GucContext;
|
||||
|
||||
/*
|
||||
* The following type records the source of the current setting. A
|
||||
* new setting can only take effect if the previous setting had the
|
||||
* same or lower level. (E.g, changing the config file doesn't
|
||||
* override the postmaster command line.)
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
PGC_S_DEFAULT = 0, /* wired-in default */
|
||||
PGC_S_FILE = 1, /* postgresql.conf */
|
||||
PGC_S_ARGV = 2, /* postmaster command line */
|
||||
PGC_S_DATABASE = 3, /* per-database setting */
|
||||
PGC_S_USER = 4, /* per-user setting */
|
||||
PGC_S_CLIENT = 5, /* from client (PGOPTIONS) */
|
||||
PGC_S_SESSION = 6, /* SET command */
|
||||
PGC_S_INFINITY = 100 /* can be used to avoid checks */
|
||||
} GucSource;
|
||||
|
||||
extern void SetConfigOption(const char *name, const char *value,
|
||||
GucContext context, bool makeDefault);
|
||||
GucContext context, GucSource source);
|
||||
extern const char *GetConfigOption(const char *name);
|
||||
extern void ProcessConfigFile(GucContext context);
|
||||
extern void ResetAllOptions(bool isStartup);
|
||||
extern void ParseLongOption(const char *string, char **name, char **value);
|
||||
extern bool set_config_option(const char *name, const char *value,
|
||||
GucContext context, bool DoIt, bool makeDefault);
|
||||
GucContext context, bool DoIt, GucSource source);
|
||||
extern void ShowAllGUCConfig(void);
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user