*
*
* 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
*
ALLOCSET_DEFAULT_MAXSIZE);
MemoryContextSwitchTo(PostmasterContext);
+ IgnoreSystemIndexes(false);
+
/*
* Options setup
*/
/* 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)
{
{
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
/* 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':
* 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':
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 */
strcpy(original_extraoptions, optarg);
break;
case 'p':
- SetConfigOption("port", optarg, PGC_POSTMASTER, true);
+ SetConfigOption("port", optarg, PGC_POSTMASTER, PGC_S_ARGV);
break;
case 'S':
* 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':
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);
}
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
*/
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.
* 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>.
{
const char *name;
GucContext context;
+ GucSource source;
void *variable;
};
{
const char *name;
GucContext context;
+ GucSource source;
bool *variable;
bool default_val;
/* No need for parse_hook ... presumably both values are legal */
{
const char *name;
GucContext context;
+ GucSource source;
int *variable;
int default_val;
int min;
{
const char *name;
GucContext context;
+ GucSource source;
double *variable;
double default_val;
double min;
{
const char *name;
GucContext context;
+ GucSource source;
char **variable;
const char *boot_default_val;
bool (*parse_hook) (const char *proposed);
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
}
};
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
* 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
}
};
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
}
};
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
}
};
*/
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;
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
*conf->variable = boolval;
if (makeDefault)
conf->default_val = boolval;
+ conf->source = source;
}
}
else if (DoIt)
*conf->variable = intval;
if (makeDefault)
conf->default_val = intval;
+ conf->source = source;
}
}
else if (DoIt)
*conf->variable = dval;
if (makeDefault)
conf->default_val = dval;
+ conf->source = source;
}
}
else if (DoIt)
free(conf->default_val);
conf->default_val = str;
}
+ conf->source = source;
}
}
else if (DoIt)
*/
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);
}