diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index cd118d30d74272cb5fd27d5bb4f5d318961c798c..48cbf570e83c47fb2f6de914f6f56aec7c688977 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -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();
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index 7d6300f4a911704daf9760fb6006859dd62e265d..1723733799ae7a36880fc673e50d6f35d9e8bc44 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -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);
 }
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 6fe2cdd61bbbc5e1740f8e18215b2b43b3009a43..6bd43cae144a3e8835ed8916a8b4ba8f11a10853 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -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.
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index e1357670cb8ab75930ab63aa214d55801a113de9..976b434655f307f2313930d55f8b56473f8d9387 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -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");
 	}
 
 	/*
diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l
index c6d96f5ac8a73abcdde7d29853e2c8f01ad13f1e..b4fffd72529998075080eae6f7b5966da6202d8d 100644
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -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);
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index c2e697417481eaf2f37cb3a86f236ace230b90a1..6e112caa43c65990ebcb2a3a6c2d3ce27a8a6f2c 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -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);
 }
 
 
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index c4e9a44a3e8ee01b645ecb1b42154eb6b2fa8f84..f7361dff47ebd19cf78478ef4d65b18e7b85ca64 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -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);