use GUC for cmdline
Here is Tomified version of my 2 pending patches.
Dropped the set_.._real change as it is not needed.
Desc would be:
* use GUC for settings from cmdline
--
marko
Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v
retrieving revision 1.220
diff -u -c -r1.220 postmaster.c
*** src/backend/postmaster/postmaster.c 2001/06/14 19:59:24 1.220
--- src/backend/postmaster/postmaster.c 2001/06/15 16:22:42
***************
*** 426,439 ****
#ifndef USE_ASSERT_CHECKING
postmaster_error("Assert checking is not compiled in.");
#else
! assert_enabled = atoi(optarg);
#endif
break;
case 'a':
/* Can no longer set authentication method. */
break;
case 'B':
! NBuffers = atoi(optarg);
break;
case 'b':
/* Can no longer set the backend executable file to use. */
--- 426,439 ----
#ifndef USE_ASSERT_CHECKING
postmaster_error("Assert checking is not compiled in.");
#else
! SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, true);
#endif
break;
case 'a':
/* Can no longer set authentication method. */
break;
case 'B':
! SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, true);
break;
case 'b':
/* Can no longer set the backend executable file to use. */
***************
*** 447,469 ****
* Turn on debugging for the postmaster and the backend
* servers descended from it.
*/
! DebugLvl = atoi(optarg);
break;
case 'F':
! enableFsync = false;
break;
case 'h':
! VirtualHost = optarg;
break;
case 'i':
! NetServer = true;
break;
case 'k':
! UnixSocketDir = optarg;
break;
#ifdef USE_SSL
case 'l':
! EnableSSL = true;
break;
#endif
case 'm':
--- 447,469 ----
* Turn on debugging for the postmaster and the backend
* servers descended from it.
*/
! SetConfigOption("debug_level", optarg, PGC_POSTMASTER, true);
break;
case 'F':
! SetConfigOption("enable_fsync", optarg, PGC_POSTMASTER, true);
break;
case 'h':
! SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true);
break;
case 'i':
! SetConfigOption("tcpip_socket", optarg, PGC_POSTMASTER, true);
break;
case 'k':
! SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true);
break;
#ifdef USE_SSL
case 'l':
! SetConfigOption("ssl", optarg, PGC_POSTMASTER, true);
break;
#endif
case 'm':
***************
*** 483,493 ****
* The max number of backends to start. Can't set to less
* than 1 or more than compiled-in limit.
*/
! MaxBackends = atoi(optarg);
! if (MaxBackends < 1)
! MaxBackends = 1;
! if (MaxBackends > MAXBACKENDS)
! MaxBackends = MAXBACKENDS;
break;
case 'n':
/* Don't reinit shared mem after abnormal exit */
--- 483,489 ----
* The max number of backends to start. Can't set to less
* than 1 or more than compiled-in limit.
*/
! SetConfigOption("max_connections", optarg, PGC_POSTMASTER, true);
break;
case 'n':
/* Don't reinit shared mem after abnormal exit */
***************
*** 504,510 ****
strcpy(original_extraoptions, optarg);
break;
case 'p':
! PostPortNumber = atoi(optarg);
break;
case 'S':
--- 500,506 ----
strcpy(original_extraoptions, optarg);
break;
case 'p':
! SetConfigOption("port", optarg, PGC_POSTMASTER, true);
break;
case 'S':
***************
*** 514,520 ****
* it's most badly needed on SysV-derived systems like
* SVR4 and HP-UX.
*/
! SilentMode = true;
break;
case 's':
--- 510,516 ----
* it's most badly needed on SysV-derived systems like
* SVR4 and HP-UX.
*/
! SetConfigOption("silent_mode", optarg, PGC_POSTMASTER, true);
break;
case 's':
Index: src/backend/tcop/postgres.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.220
diff -u -c -r1.220 postgres.c
*** src/backend/tcop/postgres.c 2001/06/12 22:54:06 1.220
--- src/backend/tcop/postgres.c 2001/06/15 16:22:47
***************
*** 1108,1113 ****
--- 1108,1115 ----
const char *DBName = NULL;
bool secure = true;
int errs = 0;
+ GucContext ctx;
+ char *tmp;
int firstchar;
StringInfo parser_input;
***************
*** 1117,1122 ****
--- 1119,1127 ----
char *potential_DataDir = NULL;
+ /* all options are allowed if not under postmaster */
+ ctx = IsUnderPostmaster ? PGC_BACKEND : PGC_POSTMASTER;
+
/*
* Catch standard options before doing much else. This even works on
* systems without getopt_long.
***************
*** 1188,1194 ****
{
case 'A':
#ifdef USE_ASSERT_CHECKING
! assert_enabled = atoi(optarg);
#else
fprintf(stderr, "Assert checking is not compiled in\n");
#endif
--- 1193,1199 ----
{
case 'A':
#ifdef USE_ASSERT_CHECKING
! SetConfigOption("debug_assertions", optarg, ctx, true);
#else
fprintf(stderr, "Assert checking is not compiled in\n");
#endif
***************
*** 1200,1206 ****
* specify the size of buffer pool
*/
if (secure)
! NBuffers = atoi(optarg);
break;
case 'C':
--- 1205,1211 ----
* specify the size of buffer pool
*/
if (secure)
! SetConfigOption("shared_buffers", optarg, ctx, true);
break;
case 'C':
***************
*** 1217,1233 ****
break;
case 'd': /* debug level */
! DebugLvl = atoi(optarg);
if (DebugLvl >= 1);
! Log_connections = true;
if (DebugLvl >= 2)
! Debug_print_query = true;
if (DebugLvl >= 3)
! Debug_print_parse = true;
if (DebugLvl >= 4)
! Debug_print_plan = true;
if (DebugLvl >= 5)
! Debug_print_rewritten = true;
break;
case 'E':
--- 1222,1239 ----
break;
case 'd': /* debug level */
! tmp = "true";
! SetConfigOption("debug_level", optarg, ctx, true);
if (DebugLvl >= 1);
! SetConfigOption("log_connections", tmp, ctx, true);
if (DebugLvl >= 2)
! SetConfigOption("debug_print_query", tmp, ctx, true);
if (DebugLvl >= 3)
! SetConfigOption("debug_print_parse", tmp, ctx, true);
if (DebugLvl >= 4)
! SetConfigOption("debug_print_plan", tmp, ctx, true);
if (DebugLvl >= 5)
! SetConfigOption("debug_print_rewritten", tmp, ctx, true);
break;
case 'E':
***************
*** 1252,1258 ****
* turn off fsync
*/
if (secure)
! enableFsync = false;
break;
case 'f':
--- 1258,1264 ----
* turn off fsync
*/
if (secure)
! SetConfigOption("fsync", "true", ctx, true);
break;
case 'f':
***************
*** 1260,1288 ****
/*
* f - forbid generation of certain plans
*/
switch (optarg[0])
{
case 's': /* seqscan */
! enable_seqscan = false;
break;
case 'i': /* indexscan */
! enable_indexscan = false;
break;
case 't': /* tidscan */
! enable_tidscan = false;
break;
case 'n': /* nestloop */
! enable_nestloop = false;
break;
case 'm': /* mergejoin */
! enable_mergejoin = false;
break;
case 'h': /* hashjoin */
! enable_hashjoin = false;
break;
default:
errs++;
}
break;
case 'i':
--- 1266,1297 ----
/*
* f - forbid generation of certain plans
*/
+ tmp = NULL;
switch (optarg[0])
{
case 's': /* seqscan */
! tmp = "enable_seqscan";
break;
case 'i': /* indexscan */
! tmp = "enable_indexscan";
break;
case 't': /* tidscan */
! tmp = "enable_tidscan";
break;
case 'n': /* nestloop */
! tmp = "enable_nestloop";
break;
case 'm': /* mergejoin */
! tmp = "enable_mergejoin";
break;
case 'h': /* hashjoin */
! tmp = "enable_hashjoin";
break;
default:
errs++;
}
+ if (tmp)
+ SetConfigOption(tmp, "false", ctx, true);
break;
case 'i':
***************
*** 1352,1364 ****
/*
* S - amount of sort memory to use in 1k bytes
*/
! {
! int S;
!
! S = atoi(optarg);
! if (S >= 4 * BLCKSZ / 1024)
! SortMem = S;
! }
break;
case 's':
--- 1361,1367 ----
/*
* S - amount of sort memory to use in 1k bytes
*/
! SetConfigOption("sort_mem", optarg, ctx, true);
break;
case 's':
***************
*** 1366,1372 ****
/*
* s - report usage statistics (timings) after each query
*/
! Show_query_stats = 1;
break;
case 't':
--- 1369,1375 ----
/*
* s - report usage statistics (timings) after each query
*/
! SetConfigOption("show_query_stats", optarg, ctx, true);
break;
case 't':
***************
*** 1380,1402 ****
* caution: -s can not be used together with -t.
* ----------------
*/
switch (optarg[0])
{
case 'p':
if (optarg[1] == 'a')
! Show_parser_stats = 1;
else if (optarg[1] == 'l')
! Show_planner_stats = 1;
else
errs++;
break;
case 'e':
! Show_executor_stats = 1;
break;
default:
errs++;
break;
}
break;
case 'v':
--- 1383,1408 ----
* caution: -s can not be used together with -t.
* ----------------
*/
+ tmp = NULL;
switch (optarg[0])
{
case 'p':
if (optarg[1] == 'a')
! tmp = "show_parser_stats";
else if (optarg[1] == 'l')
! tmp = "show_planner_stats";
else
errs++;
break;
case 'e':
! tmp = "show_parser_stats";
break;
default:
errs++;
break;
}
+ if (tmp)
+ SetConfigOption(tmp, "true", ctx, true);
break;
case 'v':
***************
*** 1460,1468 ****
elog(ERROR, "-c %s requires argument", optarg);
}
! /* all options are allowed if not under postmaster */
! SetConfigOption(name, value,
! (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER, true);
free(name);
if (value)
free(value);
--- 1466,1472 ----
elog(ERROR, "-c %s requires argument", optarg);
}
! SetConfigOption(name, value, ctx, true);
free(name);
if (value)
free(value);
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.38
diff -u -c -r1.38 guc.c
*** src/backend/utils/misc/guc.c 2001/06/12 22:54:06 1.38
--- src/backend/utils/misc/guc.c 2001/06/15 16:22:49
***************
*** 270,276 ****
DEF_PGPORT, 1, 65535, NULL, NULL},
{"sort_mem", PGC_USERSET, &SortMem,
! 512, 1, INT_MAX, NULL, NULL},
{"debug_level", PGC_USERSET, &DebugLvl,
0, 0, 16, NULL, NULL},
--- 270,276 ----
DEF_PGPORT, 1, 65535, NULL, NULL},
{"sort_mem", PGC_USERSET, &SortMem,
! 512, 4*BLCKSZ/1024, INT_MAX, NULL, NULL},
{"debug_level", PGC_USERSET, &DebugLvl,
0, 0, 16, NULL, NULL},
This is a new version of the "reset all update" patch?
Here is Tomified version of my 2 pending patches.
Dropped the set_.._real change as it is not needed.
Desc would be:* use GUC for settings from cmdline
--
markoIndex: src/backend/postmaster/postmaster.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v retrieving revision 1.220 diff -u -c -r1.220 postmaster.c *** src/backend/postmaster/postmaster.c 2001/06/14 19:59:24 1.220 --- src/backend/postmaster/postmaster.c 2001/06/15 16:22:42 *************** *** 426,439 **** #ifndef USE_ASSERT_CHECKING postmaster_error("Assert checking is not compiled in."); #else ! assert_enabled = atoi(optarg); #endif break; case 'a': /* Can no longer set authentication method. */ break; case 'B': ! NBuffers = atoi(optarg); break; case 'b': /* Can no longer set the backend executable file to use. */ --- 426,439 ---- #ifndef USE_ASSERT_CHECKING postmaster_error("Assert checking is not compiled in."); #else ! SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, true); #endif break; case 'a': /* Can no longer set authentication method. */ break; case 'B': ! SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, true); break; case 'b': /* Can no longer set the backend executable file to use. */ *************** *** 447,469 **** * Turn on debugging for the postmaster and the backend * servers descended from it. */ ! DebugLvl = atoi(optarg); break; case 'F': ! enableFsync = false; break; case 'h': ! VirtualHost = optarg; break; case 'i': ! NetServer = true; break; case 'k': ! UnixSocketDir = optarg; break; #ifdef USE_SSL case 'l': ! EnableSSL = true; break; #endif case 'm': --- 447,469 ---- * Turn on debugging for the postmaster and the backend * servers descended from it. */ ! SetConfigOption("debug_level", optarg, PGC_POSTMASTER, true); break; case 'F': ! SetConfigOption("enable_fsync", optarg, PGC_POSTMASTER, true); break; case 'h': ! SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true); break; case 'i': ! SetConfigOption("tcpip_socket", optarg, PGC_POSTMASTER, true); break; case 'k': ! SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true); break; #ifdef USE_SSL case 'l': ! SetConfigOption("ssl", optarg, PGC_POSTMASTER, true); break; #endif case 'm': *************** *** 483,493 **** * The max number of backends to start. Can't set to less * than 1 or more than compiled-in limit. */ ! MaxBackends = atoi(optarg); ! if (MaxBackends < 1) ! MaxBackends = 1; ! if (MaxBackends > MAXBACKENDS) ! MaxBackends = MAXBACKENDS; break; case 'n': /* Don't reinit shared mem after abnormal exit */ --- 483,489 ---- * The max number of backends to start. Can't set to less * than 1 or more than compiled-in limit. */ ! SetConfigOption("max_connections", optarg, PGC_POSTMASTER, true); break; case 'n': /* Don't reinit shared mem after abnormal exit */ *************** *** 504,510 **** strcpy(original_extraoptions, optarg); break; case 'p': ! PostPortNumber = atoi(optarg); break; case 'S':--- 500,506 ---- strcpy(original_extraoptions, optarg); break; case 'p': ! SetConfigOption("port", optarg, PGC_POSTMASTER, true); break; case 'S':***************
*** 514,520 ****
* it's most badly needed on SysV-derived systems like
* SVR4 and HP-UX.
*/
! SilentMode = true;
break;
case 's':--- 510,516 ---- * it's most badly needed on SysV-derived systems like * SVR4 and HP-UX. */ ! SetConfigOption("silent_mode", optarg, PGC_POSTMASTER, true); break; case 's':Index: src/backend/tcop/postgres.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/tcop/postgres.c,v retrieving revision 1.220 diff -u -c -r1.220 postgres.c *** src/backend/tcop/postgres.c 2001/06/12 22:54:06 1.220 --- src/backend/tcop/postgres.c 2001/06/15 16:22:47 *************** *** 1108,1113 **** --- 1108,1115 ---- const char *DBName = NULL; bool secure = true; int errs = 0; + GucContext ctx; + char *tmp;int firstchar; StringInfo parser_input; *************** *** 1117,1122 **** --- 1119,1127 ----char *potential_DataDir = NULL;
+ /* all options are allowed if not under postmaster */ + ctx = IsUnderPostmaster ? PGC_BACKEND : PGC_POSTMASTER; + /* * Catch standard options before doing much else. This even works on * systems without getopt_long. *************** *** 1188,1194 **** { case 'A': #ifdef USE_ASSERT_CHECKING ! assert_enabled = atoi(optarg); #else fprintf(stderr, "Assert checking is not compiled in\n"); #endif --- 1193,1199 ---- { case 'A': #ifdef USE_ASSERT_CHECKING ! SetConfigOption("debug_assertions", optarg, ctx, true); #else fprintf(stderr, "Assert checking is not compiled in\n"); #endif *************** *** 1200,1206 **** * specify the size of buffer pool */ if (secure) ! NBuffers = atoi(optarg); break;case 'C': --- 1205,1211 ---- * specify the size of buffer pool */ if (secure) ! SetConfigOption("shared_buffers", optarg, ctx, true); break;case 'C':
***************
*** 1217,1233 ****
break;case 'd': /* debug level */
! DebugLvl = atoi(optarg);
if (DebugLvl >= 1);
! Log_connections = true;
if (DebugLvl >= 2)
! Debug_print_query = true;
if (DebugLvl >= 3)
! Debug_print_parse = true;
if (DebugLvl >= 4)
! Debug_print_plan = true;
if (DebugLvl >= 5)
! Debug_print_rewritten = true;
break;case 'E': --- 1222,1239 ---- break;case 'd': /* debug level */
! tmp = "true";
! SetConfigOption("debug_level", optarg, ctx, true);
if (DebugLvl >= 1);
! SetConfigOption("log_connections", tmp, ctx, true);
if (DebugLvl >= 2)
! SetConfigOption("debug_print_query", tmp, ctx, true);
if (DebugLvl >= 3)
! SetConfigOption("debug_print_parse", tmp, ctx, true);
if (DebugLvl >= 4)
! SetConfigOption("debug_print_plan", tmp, ctx, true);
if (DebugLvl >= 5)
! SetConfigOption("debug_print_rewritten", tmp, ctx, true);
break;case 'E':
***************
*** 1252,1258 ****
* turn off fsync
*/
if (secure)
! enableFsync = false;
break;case 'f': --- 1258,1264 ---- * turn off fsync */ if (secure) ! SetConfigOption("fsync", "true", ctx, true); break;case 'f':
***************
*** 1260,1288 ****
/*
* f - forbid generation of certain plans
*/
switch (optarg[0])
{
case 's': /* seqscan */
! enable_seqscan = false;
break;
case 'i': /* indexscan */
! enable_indexscan = false;
break;
case 't': /* tidscan */
! enable_tidscan = false;
break;
case 'n': /* nestloop */
! enable_nestloop = false;
break;
case 'm': /* mergejoin */
! enable_mergejoin = false;
break;
case 'h': /* hashjoin */
! enable_hashjoin = false;
break;
default:
errs++;
}
break;case 'i': --- 1266,1297 ---- /* * f - forbid generation of certain plans */ + tmp = NULL; switch (optarg[0]) { case 's': /* seqscan */ ! tmp = "enable_seqscan"; break; case 'i': /* indexscan */ ! tmp = "enable_indexscan"; break; case 't': /* tidscan */ ! tmp = "enable_tidscan"; break; case 'n': /* nestloop */ ! tmp = "enable_nestloop"; break; case 'm': /* mergejoin */ ! tmp = "enable_mergejoin"; break; case 'h': /* hashjoin */ ! tmp = "enable_hashjoin"; break; default: errs++; } + if (tmp) + SetConfigOption(tmp, "false", ctx, true); break;case 'i':
***************
*** 1352,1364 ****
/*
* S - amount of sort memory to use in 1k bytes
*/
! {
! int S;
!
! S = atoi(optarg);
! if (S >= 4 * BLCKSZ / 1024)
! SortMem = S;
! }
break;case 's': --- 1361,1367 ---- /* * S - amount of sort memory to use in 1k bytes */ ! SetConfigOption("sort_mem", optarg, ctx, true); break;case 's':
***************
*** 1366,1372 ****
/*
* s - report usage statistics (timings) after each query
*/
! Show_query_stats = 1;
break;case 't': --- 1369,1375 ---- /* * s - report usage statistics (timings) after each query */ ! SetConfigOption("show_query_stats", optarg, ctx, true); break;case 't':
***************
*** 1380,1402 ****
* caution: -s can not be used together with -t.
* ----------------
*/
switch (optarg[0])
{
case 'p':
if (optarg[1] == 'a')
! Show_parser_stats = 1;
else if (optarg[1] == 'l')
! Show_planner_stats = 1;
else
errs++;
break;
case 'e':
! Show_executor_stats = 1;
break;
default:
errs++;
break;
}
break;case 'v': --- 1383,1408 ---- * caution: -s can not be used together with -t. * ---------------- */ + tmp = NULL; switch (optarg[0]) { case 'p': if (optarg[1] == 'a') ! tmp = "show_parser_stats"; else if (optarg[1] == 'l') ! tmp = "show_planner_stats"; else errs++; break; case 'e': ! tmp = "show_parser_stats"; break; default: errs++; break; } + if (tmp) + SetConfigOption(tmp, "true", ctx, true); break;case 'v':
***************
*** 1460,1468 ****
elog(ERROR, "-c %s requires argument", optarg);
}! /* all options are allowed if not under postmaster */ ! SetConfigOption(name, value, ! (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER, true); free(name); if (value) free(value); --- 1466,1472 ---- elog(ERROR, "-c %s requires argument", optarg); }! SetConfigOption(name, value, ctx, true); free(name); if (value) free(value); Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.38 diff -u -c -r1.38 guc.c *** src/backend/utils/misc/guc.c 2001/06/12 22:54:06 1.38 --- src/backend/utils/misc/guc.c 2001/06/15 16:22:49 *************** *** 270,276 **** DEF_PGPORT, 1, 65535, NULL, NULL},{"sort_mem", PGC_USERSET, &SortMem,
! 512, 1, INT_MAX, NULL, NULL},{"debug_level", PGC_USERSET, &DebugLvl, 0, 0, 16, NULL, NULL}, --- 270,276 ---- DEF_PGPORT, 1, 65535, NULL, NULL},{"sort_mem", PGC_USERSET, &SortMem,
! 512, 4*BLCKSZ/1024, INT_MAX, NULL, NULL},{"debug_level", PGC_USERSET, &DebugLvl,
0, 0, 16, NULL, NULL},---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Your patch has been added to the PostgreSQL unapplied patches list at:
http://candle.pha.pa.us/cgi-bin/pgpatches
I will try to apply it within the next 48 hours.
Here is Tomified version of my 2 pending patches.
Dropped the set_.._real change as it is not needed.
Desc would be:* use GUC for settings from cmdline
--
markoIndex: src/backend/postmaster/postmaster.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v retrieving revision 1.220 diff -u -c -r1.220 postmaster.c *** src/backend/postmaster/postmaster.c 2001/06/14 19:59:24 1.220 --- src/backend/postmaster/postmaster.c 2001/06/15 16:22:42 *************** *** 426,439 **** #ifndef USE_ASSERT_CHECKING postmaster_error("Assert checking is not compiled in."); #else ! assert_enabled = atoi(optarg); #endif break; case 'a': /* Can no longer set authentication method. */ break; case 'B': ! NBuffers = atoi(optarg); break; case 'b': /* Can no longer set the backend executable file to use. */ --- 426,439 ---- #ifndef USE_ASSERT_CHECKING postmaster_error("Assert checking is not compiled in."); #else ! SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, true); #endif break; case 'a': /* Can no longer set authentication method. */ break; case 'B': ! SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, true); break; case 'b': /* Can no longer set the backend executable file to use. */ *************** *** 447,469 **** * Turn on debugging for the postmaster and the backend * servers descended from it. */ ! DebugLvl = atoi(optarg); break; case 'F': ! enableFsync = false; break; case 'h': ! VirtualHost = optarg; break; case 'i': ! NetServer = true; break; case 'k': ! UnixSocketDir = optarg; break; #ifdef USE_SSL case 'l': ! EnableSSL = true; break; #endif case 'm': --- 447,469 ---- * Turn on debugging for the postmaster and the backend * servers descended from it. */ ! SetConfigOption("debug_level", optarg, PGC_POSTMASTER, true); break; case 'F': ! SetConfigOption("enable_fsync", optarg, PGC_POSTMASTER, true); break; case 'h': ! SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true); break; case 'i': ! SetConfigOption("tcpip_socket", optarg, PGC_POSTMASTER, true); break; case 'k': ! SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true); break; #ifdef USE_SSL case 'l': ! SetConfigOption("ssl", optarg, PGC_POSTMASTER, true); break; #endif case 'm': *************** *** 483,493 **** * The max number of backends to start. Can't set to less * than 1 or more than compiled-in limit. */ ! MaxBackends = atoi(optarg); ! if (MaxBackends < 1) ! MaxBackends = 1; ! if (MaxBackends > MAXBACKENDS) ! MaxBackends = MAXBACKENDS; break; case 'n': /* Don't reinit shared mem after abnormal exit */ --- 483,489 ---- * The max number of backends to start. Can't set to less * than 1 or more than compiled-in limit. */ ! SetConfigOption("max_connections", optarg, PGC_POSTMASTER, true); break; case 'n': /* Don't reinit shared mem after abnormal exit */ *************** *** 504,510 **** strcpy(original_extraoptions, optarg); break; case 'p': ! PostPortNumber = atoi(optarg); break; case 'S':--- 500,506 ---- strcpy(original_extraoptions, optarg); break; case 'p': ! SetConfigOption("port", optarg, PGC_POSTMASTER, true); break; case 'S':***************
*** 514,520 ****
* it's most badly needed on SysV-derived systems like
* SVR4 and HP-UX.
*/
! SilentMode = true;
break;
case 's':--- 510,516 ---- * it's most badly needed on SysV-derived systems like * SVR4 and HP-UX. */ ! SetConfigOption("silent_mode", optarg, PGC_POSTMASTER, true); break; case 's':Index: src/backend/tcop/postgres.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/tcop/postgres.c,v retrieving revision 1.220 diff -u -c -r1.220 postgres.c *** src/backend/tcop/postgres.c 2001/06/12 22:54:06 1.220 --- src/backend/tcop/postgres.c 2001/06/15 16:22:47 *************** *** 1108,1113 **** --- 1108,1115 ---- const char *DBName = NULL; bool secure = true; int errs = 0; + GucContext ctx; + char *tmp;int firstchar; StringInfo parser_input; *************** *** 1117,1122 **** --- 1119,1127 ----char *potential_DataDir = NULL;
+ /* all options are allowed if not under postmaster */ + ctx = IsUnderPostmaster ? PGC_BACKEND : PGC_POSTMASTER; + /* * Catch standard options before doing much else. This even works on * systems without getopt_long. *************** *** 1188,1194 **** { case 'A': #ifdef USE_ASSERT_CHECKING ! assert_enabled = atoi(optarg); #else fprintf(stderr, "Assert checking is not compiled in\n"); #endif --- 1193,1199 ---- { case 'A': #ifdef USE_ASSERT_CHECKING ! SetConfigOption("debug_assertions", optarg, ctx, true); #else fprintf(stderr, "Assert checking is not compiled in\n"); #endif *************** *** 1200,1206 **** * specify the size of buffer pool */ if (secure) ! NBuffers = atoi(optarg); break;case 'C': --- 1205,1211 ---- * specify the size of buffer pool */ if (secure) ! SetConfigOption("shared_buffers", optarg, ctx, true); break;case 'C':
***************
*** 1217,1233 ****
break;case 'd': /* debug level */
! DebugLvl = atoi(optarg);
if (DebugLvl >= 1);
! Log_connections = true;
if (DebugLvl >= 2)
! Debug_print_query = true;
if (DebugLvl >= 3)
! Debug_print_parse = true;
if (DebugLvl >= 4)
! Debug_print_plan = true;
if (DebugLvl >= 5)
! Debug_print_rewritten = true;
break;case 'E': --- 1222,1239 ---- break;case 'd': /* debug level */
! tmp = "true";
! SetConfigOption("debug_level", optarg, ctx, true);
if (DebugLvl >= 1);
! SetConfigOption("log_connections", tmp, ctx, true);
if (DebugLvl >= 2)
! SetConfigOption("debug_print_query", tmp, ctx, true);
if (DebugLvl >= 3)
! SetConfigOption("debug_print_parse", tmp, ctx, true);
if (DebugLvl >= 4)
! SetConfigOption("debug_print_plan", tmp, ctx, true);
if (DebugLvl >= 5)
! SetConfigOption("debug_print_rewritten", tmp, ctx, true);
break;case 'E':
***************
*** 1252,1258 ****
* turn off fsync
*/
if (secure)
! enableFsync = false;
break;case 'f': --- 1258,1264 ---- * turn off fsync */ if (secure) ! SetConfigOption("fsync", "true", ctx, true); break;case 'f':
***************
*** 1260,1288 ****
/*
* f - forbid generation of certain plans
*/
switch (optarg[0])
{
case 's': /* seqscan */
! enable_seqscan = false;
break;
case 'i': /* indexscan */
! enable_indexscan = false;
break;
case 't': /* tidscan */
! enable_tidscan = false;
break;
case 'n': /* nestloop */
! enable_nestloop = false;
break;
case 'm': /* mergejoin */
! enable_mergejoin = false;
break;
case 'h': /* hashjoin */
! enable_hashjoin = false;
break;
default:
errs++;
}
break;case 'i': --- 1266,1297 ---- /* * f - forbid generation of certain plans */ + tmp = NULL; switch (optarg[0]) { case 's': /* seqscan */ ! tmp = "enable_seqscan"; break; case 'i': /* indexscan */ ! tmp = "enable_indexscan"; break; case 't': /* tidscan */ ! tmp = "enable_tidscan"; break; case 'n': /* nestloop */ ! tmp = "enable_nestloop"; break; case 'm': /* mergejoin */ ! tmp = "enable_mergejoin"; break; case 'h': /* hashjoin */ ! tmp = "enable_hashjoin"; break; default: errs++; } + if (tmp) + SetConfigOption(tmp, "false", ctx, true); break;case 'i':
***************
*** 1352,1364 ****
/*
* S - amount of sort memory to use in 1k bytes
*/
! {
! int S;
!
! S = atoi(optarg);
! if (S >= 4 * BLCKSZ / 1024)
! SortMem = S;
! }
break;case 's': --- 1361,1367 ---- /* * S - amount of sort memory to use in 1k bytes */ ! SetConfigOption("sort_mem", optarg, ctx, true); break;case 's':
***************
*** 1366,1372 ****
/*
* s - report usage statistics (timings) after each query
*/
! Show_query_stats = 1;
break;case 't': --- 1369,1375 ---- /* * s - report usage statistics (timings) after each query */ ! SetConfigOption("show_query_stats", optarg, ctx, true); break;case 't':
***************
*** 1380,1402 ****
* caution: -s can not be used together with -t.
* ----------------
*/
switch (optarg[0])
{
case 'p':
if (optarg[1] == 'a')
! Show_parser_stats = 1;
else if (optarg[1] == 'l')
! Show_planner_stats = 1;
else
errs++;
break;
case 'e':
! Show_executor_stats = 1;
break;
default:
errs++;
break;
}
break;case 'v': --- 1383,1408 ---- * caution: -s can not be used together with -t. * ---------------- */ + tmp = NULL; switch (optarg[0]) { case 'p': if (optarg[1] == 'a') ! tmp = "show_parser_stats"; else if (optarg[1] == 'l') ! tmp = "show_planner_stats"; else errs++; break; case 'e': ! tmp = "show_parser_stats"; break; default: errs++; break; } + if (tmp) + SetConfigOption(tmp, "true", ctx, true); break;case 'v':
***************
*** 1460,1468 ****
elog(ERROR, "-c %s requires argument", optarg);
}! /* all options are allowed if not under postmaster */ ! SetConfigOption(name, value, ! (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER, true); free(name); if (value) free(value); --- 1466,1472 ---- elog(ERROR, "-c %s requires argument", optarg); }! SetConfigOption(name, value, ctx, true); free(name); if (value) free(value); Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.38 diff -u -c -r1.38 guc.c *** src/backend/utils/misc/guc.c 2001/06/12 22:54:06 1.38 --- src/backend/utils/misc/guc.c 2001/06/15 16:22:49 *************** *** 270,276 **** DEF_PGPORT, 1, 65535, NULL, NULL},{"sort_mem", PGC_USERSET, &SortMem,
! 512, 1, INT_MAX, NULL, NULL},{"debug_level", PGC_USERSET, &DebugLvl, 0, 0, 16, NULL, NULL}, --- 270,276 ---- DEF_PGPORT, 1, 65535, NULL, NULL},{"sort_mem", PGC_USERSET, &SortMem,
! 512, 4*BLCKSZ/1024, INT_MAX, NULL, NULL},{"debug_level", PGC_USERSET, &DebugLvl,
0, 0, 16, NULL, NULL},---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
On Mon, Jun 18, 2001 at 01:16:24PM -0400, Bruce Momjian wrote:
This is a new version of the "reset all update" patch?
Yes.
Here is Tomified version of my 2 pending patches.
Dropped the set_.._real change as it is not needed.
Desc would be:* use GUC for settings from cmdline
--
marko
Bruce Momjian <pgman@candle.pha.pa.us> writes:
This is a new version of the "reset all update" patch?
No, this goes on top of that.
Since Peter says he's in the midst of restructuring the postmaster, it'd
probably be best to wait till he's done before committing these changes.
(It being mainly a GUC thing, he might want to review/apply the patch
himself anyway.)
regards, tom lane
Bruce Momjian <pgman@candle.pha.pa.us> writes:
This is a new version of the "reset all update" patch?
No, this goes on top of that.
Since Peter says he's in the midst of restructuring the postmaster, it'd
probably be best to wait till he's done before committing these changes.
(It being mainly a GUC thing, he might want to review/apply the patch
himself anyway.)
Marko says it is a new version of the "reset all update" patch, or at
least a new version of the stuff we haven't applied yet.
I can hold until Peter is done and merge as needed.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Bruce Momjian <pgman@candle.pha.pa.us> writes:
No, this goes on top of that.
Marko says it is a new version of the "reset all update" patch, or at
least a new version of the stuff we haven't applied yet.
You're right, I was confused about what we'd applied or not applied yet.
My mistake.
I can hold until Peter is done and merge as needed.
I'd still recommend that, unless Peter isn't as close to committing
fork-before-authenticate as I think he is...
regards, tom lane
Bruce Momjian <pgman@candle.pha.pa.us> writes:
No, this goes on top of that.
Marko says it is a new version of the "reset all update" patch, or at
least a new version of the stuff we haven't applied yet.You're right, I was confused about what we'd applied or not applied yet.
My mistake.I can hold until Peter is done and merge as needed.
I'd still recommend that, unless Peter isn't as close to committing
fork-before-authenticate as I think he is...
I can wait. There is no huge rush for the patch unless we are releasing
7.2 soon. :-)
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Tom Lane writes:
I can hold until Peter is done and merge as needed.
I'd still recommend that, unless Peter isn't as close to committing
fork-before-authenticate as I think he is...
You'll be the judge of that. ;-) But I don't see this code interfering.
--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
Tom Lane writes:
I can hold until Peter is done and merge as needed.
I'd still recommend that, unless Peter isn't as close to committing
fork-before-authenticate as I think he is...You'll be the judge of that. ;-) But I don't see this code interfering.
I didn't think it would interfere either. Let me apply it and Peter let
me know if you get a CVS collision and I can back it out.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Peter thinks no collision. Patch applied. Thanks.
Here is Tomified version of my 2 pending patches.
Dropped the set_.._real change as it is not needed.
Desc would be:* use GUC for settings from cmdline
--
markoIndex: src/backend/postmaster/postmaster.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v retrieving revision 1.220 diff -u -c -r1.220 postmaster.c *** src/backend/postmaster/postmaster.c 2001/06/14 19:59:24 1.220 --- src/backend/postmaster/postmaster.c 2001/06/15 16:22:42 *************** *** 426,439 **** #ifndef USE_ASSERT_CHECKING postmaster_error("Assert checking is not compiled in."); #else ! assert_enabled = atoi(optarg); #endif break; case 'a': /* Can no longer set authentication method. */ break; case 'B': ! NBuffers = atoi(optarg); break; case 'b': /* Can no longer set the backend executable file to use. */ --- 426,439 ---- #ifndef USE_ASSERT_CHECKING postmaster_error("Assert checking is not compiled in."); #else ! SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, true); #endif break; case 'a': /* Can no longer set authentication method. */ break; case 'B': ! SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, true); break; case 'b': /* Can no longer set the backend executable file to use. */ *************** *** 447,469 **** * Turn on debugging for the postmaster and the backend * servers descended from it. */ ! DebugLvl = atoi(optarg); break; case 'F': ! enableFsync = false; break; case 'h': ! VirtualHost = optarg; break; case 'i': ! NetServer = true; break; case 'k': ! UnixSocketDir = optarg; break; #ifdef USE_SSL case 'l': ! EnableSSL = true; break; #endif case 'm': --- 447,469 ---- * Turn on debugging for the postmaster and the backend * servers descended from it. */ ! SetConfigOption("debug_level", optarg, PGC_POSTMASTER, true); break; case 'F': ! SetConfigOption("enable_fsync", optarg, PGC_POSTMASTER, true); break; case 'h': ! SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true); break; case 'i': ! SetConfigOption("tcpip_socket", optarg, PGC_POSTMASTER, true); break; case 'k': ! SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true); break; #ifdef USE_SSL case 'l': ! SetConfigOption("ssl", optarg, PGC_POSTMASTER, true); break; #endif case 'm': *************** *** 483,493 **** * The max number of backends to start. Can't set to less * than 1 or more than compiled-in limit. */ ! MaxBackends = atoi(optarg); ! if (MaxBackends < 1) ! MaxBackends = 1; ! if (MaxBackends > MAXBACKENDS) ! MaxBackends = MAXBACKENDS; break; case 'n': /* Don't reinit shared mem after abnormal exit */ --- 483,489 ---- * The max number of backends to start. Can't set to less * than 1 or more than compiled-in limit. */ ! SetConfigOption("max_connections", optarg, PGC_POSTMASTER, true); break; case 'n': /* Don't reinit shared mem after abnormal exit */ *************** *** 504,510 **** strcpy(original_extraoptions, optarg); break; case 'p': ! PostPortNumber = atoi(optarg); break; case 'S':--- 500,506 ---- strcpy(original_extraoptions, optarg); break; case 'p': ! SetConfigOption("port", optarg, PGC_POSTMASTER, true); break; case 'S':***************
*** 514,520 ****
* it's most badly needed on SysV-derived systems like
* SVR4 and HP-UX.
*/
! SilentMode = true;
break;
case 's':--- 510,516 ---- * it's most badly needed on SysV-derived systems like * SVR4 and HP-UX. */ ! SetConfigOption("silent_mode", optarg, PGC_POSTMASTER, true); break; case 's':Index: src/backend/tcop/postgres.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/tcop/postgres.c,v retrieving revision 1.220 diff -u -c -r1.220 postgres.c *** src/backend/tcop/postgres.c 2001/06/12 22:54:06 1.220 --- src/backend/tcop/postgres.c 2001/06/15 16:22:47 *************** *** 1108,1113 **** --- 1108,1115 ---- const char *DBName = NULL; bool secure = true; int errs = 0; + GucContext ctx; + char *tmp;int firstchar; StringInfo parser_input; *************** *** 1117,1122 **** --- 1119,1127 ----char *potential_DataDir = NULL;
+ /* all options are allowed if not under postmaster */ + ctx = IsUnderPostmaster ? PGC_BACKEND : PGC_POSTMASTER; + /* * Catch standard options before doing much else. This even works on * systems without getopt_long. *************** *** 1188,1194 **** { case 'A': #ifdef USE_ASSERT_CHECKING ! assert_enabled = atoi(optarg); #else fprintf(stderr, "Assert checking is not compiled in\n"); #endif --- 1193,1199 ---- { case 'A': #ifdef USE_ASSERT_CHECKING ! SetConfigOption("debug_assertions", optarg, ctx, true); #else fprintf(stderr, "Assert checking is not compiled in\n"); #endif *************** *** 1200,1206 **** * specify the size of buffer pool */ if (secure) ! NBuffers = atoi(optarg); break;case 'C': --- 1205,1211 ---- * specify the size of buffer pool */ if (secure) ! SetConfigOption("shared_buffers", optarg, ctx, true); break;case 'C':
***************
*** 1217,1233 ****
break;case 'd': /* debug level */
! DebugLvl = atoi(optarg);
if (DebugLvl >= 1);
! Log_connections = true;
if (DebugLvl >= 2)
! Debug_print_query = true;
if (DebugLvl >= 3)
! Debug_print_parse = true;
if (DebugLvl >= 4)
! Debug_print_plan = true;
if (DebugLvl >= 5)
! Debug_print_rewritten = true;
break;case 'E': --- 1222,1239 ---- break;case 'd': /* debug level */
! tmp = "true";
! SetConfigOption("debug_level", optarg, ctx, true);
if (DebugLvl >= 1);
! SetConfigOption("log_connections", tmp, ctx, true);
if (DebugLvl >= 2)
! SetConfigOption("debug_print_query", tmp, ctx, true);
if (DebugLvl >= 3)
! SetConfigOption("debug_print_parse", tmp, ctx, true);
if (DebugLvl >= 4)
! SetConfigOption("debug_print_plan", tmp, ctx, true);
if (DebugLvl >= 5)
! SetConfigOption("debug_print_rewritten", tmp, ctx, true);
break;case 'E':
***************
*** 1252,1258 ****
* turn off fsync
*/
if (secure)
! enableFsync = false;
break;case 'f': --- 1258,1264 ---- * turn off fsync */ if (secure) ! SetConfigOption("fsync", "true", ctx, true); break;case 'f':
***************
*** 1260,1288 ****
/*
* f - forbid generation of certain plans
*/
switch (optarg[0])
{
case 's': /* seqscan */
! enable_seqscan = false;
break;
case 'i': /* indexscan */
! enable_indexscan = false;
break;
case 't': /* tidscan */
! enable_tidscan = false;
break;
case 'n': /* nestloop */
! enable_nestloop = false;
break;
case 'm': /* mergejoin */
! enable_mergejoin = false;
break;
case 'h': /* hashjoin */
! enable_hashjoin = false;
break;
default:
errs++;
}
break;case 'i': --- 1266,1297 ---- /* * f - forbid generation of certain plans */ + tmp = NULL; switch (optarg[0]) { case 's': /* seqscan */ ! tmp = "enable_seqscan"; break; case 'i': /* indexscan */ ! tmp = "enable_indexscan"; break; case 't': /* tidscan */ ! tmp = "enable_tidscan"; break; case 'n': /* nestloop */ ! tmp = "enable_nestloop"; break; case 'm': /* mergejoin */ ! tmp = "enable_mergejoin"; break; case 'h': /* hashjoin */ ! tmp = "enable_hashjoin"; break; default: errs++; } + if (tmp) + SetConfigOption(tmp, "false", ctx, true); break;case 'i':
***************
*** 1352,1364 ****
/*
* S - amount of sort memory to use in 1k bytes
*/
! {
! int S;
!
! S = atoi(optarg);
! if (S >= 4 * BLCKSZ / 1024)
! SortMem = S;
! }
break;case 's': --- 1361,1367 ---- /* * S - amount of sort memory to use in 1k bytes */ ! SetConfigOption("sort_mem", optarg, ctx, true); break;case 's':
***************
*** 1366,1372 ****
/*
* s - report usage statistics (timings) after each query
*/
! Show_query_stats = 1;
break;case 't': --- 1369,1375 ---- /* * s - report usage statistics (timings) after each query */ ! SetConfigOption("show_query_stats", optarg, ctx, true); break;case 't':
***************
*** 1380,1402 ****
* caution: -s can not be used together with -t.
* ----------------
*/
switch (optarg[0])
{
case 'p':
if (optarg[1] == 'a')
! Show_parser_stats = 1;
else if (optarg[1] == 'l')
! Show_planner_stats = 1;
else
errs++;
break;
case 'e':
! Show_executor_stats = 1;
break;
default:
errs++;
break;
}
break;case 'v': --- 1383,1408 ---- * caution: -s can not be used together with -t. * ---------------- */ + tmp = NULL; switch (optarg[0]) { case 'p': if (optarg[1] == 'a') ! tmp = "show_parser_stats"; else if (optarg[1] == 'l') ! tmp = "show_planner_stats"; else errs++; break; case 'e': ! tmp = "show_parser_stats"; break; default: errs++; break; } + if (tmp) + SetConfigOption(tmp, "true", ctx, true); break;case 'v':
***************
*** 1460,1468 ****
elog(ERROR, "-c %s requires argument", optarg);
}! /* all options are allowed if not under postmaster */ ! SetConfigOption(name, value, ! (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER, true); free(name); if (value) free(value); --- 1466,1472 ---- elog(ERROR, "-c %s requires argument", optarg); }! SetConfigOption(name, value, ctx, true); free(name); if (value) free(value); Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.38 diff -u -c -r1.38 guc.c *** src/backend/utils/misc/guc.c 2001/06/12 22:54:06 1.38 --- src/backend/utils/misc/guc.c 2001/06/15 16:22:49 *************** *** 270,276 **** DEF_PGPORT, 1, 65535, NULL, NULL},{"sort_mem", PGC_USERSET, &SortMem,
! 512, 1, INT_MAX, NULL, NULL},{"debug_level", PGC_USERSET, &DebugLvl, 0, 0, 16, NULL, NULL}, --- 270,276 ---- DEF_PGPORT, 1, 65535, NULL, NULL},{"sort_mem", PGC_USERSET, &SortMem,
! 512, 4*BLCKSZ/1024, INT_MAX, NULL, NULL},{"debug_level", PGC_USERSET, &DebugLvl,
0, 0, 16, NULL, NULL},---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Bruce Momjian writes:
Peter thinks no collision. Patch applied. Thanks.
Now that I look at it, this patch is pretty broken. For one, calling
SetConfigOption("option_name", optarg, PGC_POSTMASTER, true);
when the option letter doesn't take an argument is surely wrong.
Hint: Try 'postmaster -i'.
Here is Tomified version of my 2 pending patches.
Dropped the set_.._real change as it is not needed.
Desc would be:* use GUC for settings from cmdline
--
markoIndex: src/backend/postmaster/postmaster.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v retrieving revision 1.220 diff -u -c -r1.220 postmaster.c *** src/backend/postmaster/postmaster.c 2001/06/14 19:59:24 1.220 --- src/backend/postmaster/postmaster.c 2001/06/15 16:22:42 *************** *** 426,439 **** #ifndef USE_ASSERT_CHECKING postmaster_error("Assert checking is not compiled in."); #else ! assert_enabled = atoi(optarg); #endif break; case 'a': /* Can no longer set authentication method. */ break; case 'B': ! NBuffers = atoi(optarg); break; case 'b': /* Can no longer set the backend executable file to use. */ --- 426,439 ---- #ifndef USE_ASSERT_CHECKING postmaster_error("Assert checking is not compiled in."); #else ! SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, true); #endif break; case 'a': /* Can no longer set authentication method. */ break; case 'B': ! SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, true); break; case 'b': /* Can no longer set the backend executable file to use. */ *************** *** 447,469 **** * Turn on debugging for the postmaster and the backend * servers descended from it. */ ! DebugLvl = atoi(optarg); break; case 'F': ! enableFsync = false; break; case 'h': ! VirtualHost = optarg; break; case 'i': ! NetServer = true; break; case 'k': ! UnixSocketDir = optarg; break; #ifdef USE_SSL case 'l': ! EnableSSL = true; break; #endif case 'm': --- 447,469 ---- * Turn on debugging for the postmaster and the backend * servers descended from it. */ ! SetConfigOption("debug_level", optarg, PGC_POSTMASTER, true); break; case 'F': ! SetConfigOption("enable_fsync", optarg, PGC_POSTMASTER, true); break; case 'h': ! SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true); break; case 'i': ! SetConfigOption("tcpip_socket", optarg, PGC_POSTMASTER, true); break; case 'k': ! SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true); break; #ifdef USE_SSL case 'l': ! SetConfigOption("ssl", optarg, PGC_POSTMASTER, true); break; #endif case 'm': *************** *** 483,493 **** * The max number of backends to start. Can't set to less * than 1 or more than compiled-in limit. */ ! MaxBackends = atoi(optarg); ! if (MaxBackends < 1) ! MaxBackends = 1; ! if (MaxBackends > MAXBACKENDS) ! MaxBackends = MAXBACKENDS; break; case 'n': /* Don't reinit shared mem after abnormal exit */ --- 483,489 ---- * The max number of backends to start. Can't set to less * than 1 or more than compiled-in limit. */ ! SetConfigOption("max_connections", optarg, PGC_POSTMASTER, true); break; case 'n': /* Don't reinit shared mem after abnormal exit */ *************** *** 504,510 **** strcpy(original_extraoptions, optarg); break; case 'p': ! PostPortNumber = atoi(optarg); break; case 'S':--- 500,506 ---- strcpy(original_extraoptions, optarg); break; case 'p': ! SetConfigOption("port", optarg, PGC_POSTMASTER, true); break; case 'S':***************
*** 514,520 ****
* it's most badly needed on SysV-derived systems like
* SVR4 and HP-UX.
*/
! SilentMode = true;
break;
case 's':--- 510,516 ---- * it's most badly needed on SysV-derived systems like * SVR4 and HP-UX. */ ! SetConfigOption("silent_mode", optarg, PGC_POSTMASTER, true); break; case 's':Index: src/backend/tcop/postgres.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/tcop/postgres.c,v retrieving revision 1.220 diff -u -c -r1.220 postgres.c *** src/backend/tcop/postgres.c 2001/06/12 22:54:06 1.220 --- src/backend/tcop/postgres.c 2001/06/15 16:22:47 *************** *** 1108,1113 **** --- 1108,1115 ---- const char *DBName = NULL; bool secure = true; int errs = 0; + GucContext ctx; + char *tmp;int firstchar; StringInfo parser_input; *************** *** 1117,1122 **** --- 1119,1127 ----char *potential_DataDir = NULL;
+ /* all options are allowed if not under postmaster */ + ctx = IsUnderPostmaster ? PGC_BACKEND : PGC_POSTMASTER; + /* * Catch standard options before doing much else. This even works on * systems without getopt_long. *************** *** 1188,1194 **** { case 'A': #ifdef USE_ASSERT_CHECKING ! assert_enabled = atoi(optarg); #else fprintf(stderr, "Assert checking is not compiled in\n"); #endif --- 1193,1199 ---- { case 'A': #ifdef USE_ASSERT_CHECKING ! SetConfigOption("debug_assertions", optarg, ctx, true); #else fprintf(stderr, "Assert checking is not compiled in\n"); #endif *************** *** 1200,1206 **** * specify the size of buffer pool */ if (secure) ! NBuffers = atoi(optarg); break;case 'C': --- 1205,1211 ---- * specify the size of buffer pool */ if (secure) ! SetConfigOption("shared_buffers", optarg, ctx, true); break;case 'C':
***************
*** 1217,1233 ****
break;case 'd': /* debug level */
! DebugLvl = atoi(optarg);
if (DebugLvl >= 1);
! Log_connections = true;
if (DebugLvl >= 2)
! Debug_print_query = true;
if (DebugLvl >= 3)
! Debug_print_parse = true;
if (DebugLvl >= 4)
! Debug_print_plan = true;
if (DebugLvl >= 5)
! Debug_print_rewritten = true;
break;case 'E': --- 1222,1239 ---- break;case 'd': /* debug level */
! tmp = "true";
! SetConfigOption("debug_level", optarg, ctx, true);
if (DebugLvl >= 1);
! SetConfigOption("log_connections", tmp, ctx, true);
if (DebugLvl >= 2)
! SetConfigOption("debug_print_query", tmp, ctx, true);
if (DebugLvl >= 3)
! SetConfigOption("debug_print_parse", tmp, ctx, true);
if (DebugLvl >= 4)
! SetConfigOption("debug_print_plan", tmp, ctx, true);
if (DebugLvl >= 5)
! SetConfigOption("debug_print_rewritten", tmp, ctx, true);
break;case 'E':
***************
*** 1252,1258 ****
* turn off fsync
*/
if (secure)
! enableFsync = false;
break;case 'f': --- 1258,1264 ---- * turn off fsync */ if (secure) ! SetConfigOption("fsync", "true", ctx, true); break;case 'f':
***************
*** 1260,1288 ****
/*
* f - forbid generation of certain plans
*/
switch (optarg[0])
{
case 's': /* seqscan */
! enable_seqscan = false;
break;
case 'i': /* indexscan */
! enable_indexscan = false;
break;
case 't': /* tidscan */
! enable_tidscan = false;
break;
case 'n': /* nestloop */
! enable_nestloop = false;
break;
case 'm': /* mergejoin */
! enable_mergejoin = false;
break;
case 'h': /* hashjoin */
! enable_hashjoin = false;
break;
default:
errs++;
}
break;case 'i': --- 1266,1297 ---- /* * f - forbid generation of certain plans */ + tmp = NULL; switch (optarg[0]) { case 's': /* seqscan */ ! tmp = "enable_seqscan"; break; case 'i': /* indexscan */ ! tmp = "enable_indexscan"; break; case 't': /* tidscan */ ! tmp = "enable_tidscan"; break; case 'n': /* nestloop */ ! tmp = "enable_nestloop"; break; case 'm': /* mergejoin */ ! tmp = "enable_mergejoin"; break; case 'h': /* hashjoin */ ! tmp = "enable_hashjoin"; break; default: errs++; } + if (tmp) + SetConfigOption(tmp, "false", ctx, true); break;case 'i':
***************
*** 1352,1364 ****
/*
* S - amount of sort memory to use in 1k bytes
*/
! {
! int S;
!
! S = atoi(optarg);
! if (S >= 4 * BLCKSZ / 1024)
! SortMem = S;
! }
break;case 's': --- 1361,1367 ---- /* * S - amount of sort memory to use in 1k bytes */ ! SetConfigOption("sort_mem", optarg, ctx, true); break;case 's':
***************
*** 1366,1372 ****
/*
* s - report usage statistics (timings) after each query
*/
! Show_query_stats = 1;
break;case 't': --- 1369,1375 ---- /* * s - report usage statistics (timings) after each query */ ! SetConfigOption("show_query_stats", optarg, ctx, true); break;case 't':
***************
*** 1380,1402 ****
* caution: -s can not be used together with -t.
* ----------------
*/
switch (optarg[0])
{
case 'p':
if (optarg[1] == 'a')
! Show_parser_stats = 1;
else if (optarg[1] == 'l')
! Show_planner_stats = 1;
else
errs++;
break;
case 'e':
! Show_executor_stats = 1;
break;
default:
errs++;
break;
}
break;case 'v': --- 1383,1408 ---- * caution: -s can not be used together with -t. * ---------------- */ + tmp = NULL; switch (optarg[0]) { case 'p': if (optarg[1] == 'a') ! tmp = "show_parser_stats"; else if (optarg[1] == 'l') ! tmp = "show_planner_stats"; else errs++; break; case 'e': ! tmp = "show_parser_stats"; break; default: errs++; break; } + if (tmp) + SetConfigOption(tmp, "true", ctx, true); break;case 'v':
***************
*** 1460,1468 ****
elog(ERROR, "-c %s requires argument", optarg);
}! /* all options are allowed if not under postmaster */ ! SetConfigOption(name, value, ! (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER, true); free(name); if (value) free(value); --- 1466,1472 ---- elog(ERROR, "-c %s requires argument", optarg); }! SetConfigOption(name, value, ctx, true); free(name); if (value) free(value); Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.38 diff -u -c -r1.38 guc.c *** src/backend/utils/misc/guc.c 2001/06/12 22:54:06 1.38 --- src/backend/utils/misc/guc.c 2001/06/15 16:22:49 *************** *** 270,276 **** DEF_PGPORT, 1, 65535, NULL, NULL},{"sort_mem", PGC_USERSET, &SortMem,
! 512, 1, INT_MAX, NULL, NULL},{"debug_level", PGC_USERSET, &DebugLvl, 0, 0, 16, NULL, NULL}, --- 270,276 ---- DEF_PGPORT, 1, 65535, NULL, NULL},{"sort_mem", PGC_USERSET, &SortMem,
! 512, 4*BLCKSZ/1024, INT_MAX, NULL, NULL},{"debug_level", PGC_USERSET, &DebugLvl,
0, 0, 16, NULL, NULL},---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
Peter Eisentraut <peter_e@gmx.net> writes:
Now that I look at it, this patch is pretty broken. For one, calling
SetConfigOption("option_name", optarg, PGC_POSTMASTER, true);
when the option letter doesn't take an argument is surely wrong.
Hint: Try 'postmaster -i'.
Also try
postmaster -o -F
which has always worked in the past. Now it causes backends to fail
to start up, saying
FATAL 1: 'fsync' cannot be changed now
regards, tom lane
Peter Eisentraut <peter_e@gmx.net> writes:
Now that I look at it, this patch is pretty broken. For one, calling
SetConfigOption("option_name", optarg, PGC_POSTMASTER, true);
when the option letter doesn't take an argument is surely wrong.Hint: Try 'postmaster -i'.
Also try
postmaster -o -F
which has always worked in the past. Now it causes backends to fail
to start up, saying
FATAL 1: 'fsync' cannot be changed now
OK, I have backed out the patch and attached it here. Marko, can you
fix the problems and resubmit? Thanks.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Attachments:
/bjm/difftext/plainDownload+98-87
On Tue, Jun 19, 2001 at 07:41:11PM -0400, Bruce Momjian wrote:
Peter Eisentraut <peter_e@gmx.net> writes:
Now that I look at it, this patch is pretty broken. For one, calling
SetConfigOption("option_name", optarg, PGC_POSTMASTER, true);
when the option letter doesn't take an argument is surely wrong.Hint: Try 'postmaster -i'.
Also try
postmaster -o -F
which has always worked in the past. Now it causes backends to fail
to start up, saying
FATAL 1: 'fsync' cannot be changed nowOK, I have backed out the patch and attached it here. Marko, can you
fix the problems and resubmit? Thanks.
Oh, well... Here it is.
I have not fixed the '-o -F', for which the reason is that
'fsync' var has in guc.c context of PGC_SIGHUP. Another
such variable is 'log_connections' - it has PGC_SIGHUP
and in same time is command-line settable.
How should this be fixed? Simpliest would be to change those
to PGC_BACKEND. But what exactly means PGC_SIGHUP in
ConfigureNames arrays? ATM I am confused. In set_config_option
it seems it should equal to either PGC_BACKEND or PGC_POSTMASTER
only has different error handling. But why PGC_SIGHUP in
ConfigureNames?
--
marko
Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /opt/cvs/pgsql/pgsql/src/backend/postmaster/postmaster.c,v
retrieving revision 1.223
diff -u -r1.223 postmaster.c
--- src/backend/postmaster/postmaster.c 2001/06/19 23:40:10 1.223
+++ src/backend/postmaster/postmaster.c 2001/06/20 12:09:01
@@ -426,14 +426,14 @@
#ifndef USE_ASSERT_CHECKING
postmaster_error("Assert checking is not compiled in.");
#else
- assert_enabled = atoi(optarg);
+ SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, true);
#endif
break;
case 'a':
/* Can no longer set authentication method. */
break;
case 'B':
- NBuffers = atoi(optarg);
+ SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, true);
break;
case 'b':
/* Can no longer set the backend executable file to use. */
@@ -447,23 +447,23 @@
* Turn on debugging for the postmaster and the backend
* servers descended from it.
*/
- DebugLvl = atoi(optarg);
+ SetConfigOption("debug_level", optarg, PGC_POSTMASTER, true);
break;
case 'F':
- enableFsync = false;
+ SetConfigOption("enable_fsync", "false", PGC_POSTMASTER, true);
break;
case 'h':
- VirtualHost = optarg;
+ SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true);
break;
case 'i':
- NetServer = true;
+ SetConfigOption("tcpip_socket", "true", PGC_POSTMASTER, true);
break;
case 'k':
- UnixSocketDir = optarg;
+ SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true);
break;
#ifdef USE_SSL
case 'l':
- EnableSSL = true;
+ SetConfigOption("ssl", "true", PGC_POSTMASTER, true);
break;
#endif
case 'm':
@@ -483,11 +483,7 @@
* The max number of backends to start. Can't set to less
* than 1 or more than compiled-in limit.
*/
- MaxBackends = atoi(optarg);
- if (MaxBackends < 1)
- MaxBackends = 1;
- if (MaxBackends > MAXBACKENDS)
- MaxBackends = MAXBACKENDS;
+ SetConfigOption("max_connections", optarg, PGC_POSTMASTER, true);
break;
case 'n':
/* Don't reinit shared mem after abnormal exit */
@@ -504,7 +500,7 @@
strcpy(original_extraoptions, optarg);
break;
case 'p':
- PostPortNumber = atoi(optarg);
+ SetConfigOption("port", optarg, PGC_POSTMASTER, true);
break;
case 'S':
@@ -514,7 +510,7 @@
* it's most badly needed on SysV-derived systems like
* SVR4 and HP-UX.
*/
- SilentMode = true;
+ SetConfigOption("silent_mode", "true", PGC_POSTMASTER, true);
break;
case 's':
Index: src/backend/tcop/postgres.c
===================================================================
RCS file: /opt/cvs/pgsql/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.222
diff -u -r1.222 postgres.c
--- src/backend/tcop/postgres.c 2001/06/19 23:40:10 1.222
+++ src/backend/tcop/postgres.c 2001/06/20 12:08:39
@@ -1108,6 +1108,8 @@
const char *DBName = NULL;
bool secure = true;
int errs = 0;
+ GucContext ctx;
+ char *tmp;
int firstchar;
StringInfo parser_input;
@@ -1117,6 +1119,9 @@
char *potential_DataDir = NULL;
+ /* all options are allowed if not under postmaster */
+ ctx = IsUnderPostmaster ? PGC_BACKEND : PGC_POSTMASTER;
+
/*
* Catch standard options before doing much else. This even works on
* systems without getopt_long.
@@ -1188,7 +1193,7 @@
{
case 'A':
#ifdef USE_ASSERT_CHECKING
- assert_enabled = atoi(optarg);
+ SetConfigOption("debug_assertions", optarg, ctx, true);
#else
fprintf(stderr, "Assert checking is not compiled in\n");
#endif
@@ -1200,7 +1205,7 @@
* specify the size of buffer pool
*/
if (secure)
- NBuffers = atoi(optarg);
+ SetConfigOption("shared_buffers", optarg, ctx, true);
break;
case 'C':
@@ -1217,17 +1222,18 @@
break;
case 'd': /* debug level */
- DebugLvl = atoi(optarg);
+ tmp = "true";
+ SetConfigOption("debug_level", optarg, ctx, true);
if (DebugLvl >= 1);
- Log_connections = true;
+ SetConfigOption("log_connections", tmp, ctx, true);
if (DebugLvl >= 2)
- Debug_print_query = true;
+ SetConfigOption("debug_print_query", tmp, ctx, true);
if (DebugLvl >= 3)
- Debug_print_parse = true;
+ SetConfigOption("debug_print_parse", tmp, ctx, true);
if (DebugLvl >= 4)
- Debug_print_plan = true;
+ SetConfigOption("debug_print_plan", tmp, ctx, true);
if (DebugLvl >= 5)
- Debug_print_rewritten = true;
+ SetConfigOption("debug_print_rewritten", tmp, ctx, true);
break;
case 'E':
@@ -1252,7 +1258,7 @@
* turn off fsync
*/
if (secure)
- enableFsync = false;
+ SetConfigOption("fsync", "false", ctx, true);
break;
case 'f':
@@ -1260,29 +1266,32 @@
/*
* f - forbid generation of certain plans
*/
+ tmp = NULL;
switch (optarg[0])
{
case 's': /* seqscan */
- enable_seqscan = false;
+ tmp = "enable_seqscan";
break;
case 'i': /* indexscan */
- enable_indexscan = false;
+ tmp = "enable_indexscan";
break;
case 't': /* tidscan */
- enable_tidscan = false;
+ tmp = "enable_tidscan";
break;
case 'n': /* nestloop */
- enable_nestloop = false;
+ tmp = "enable_nestloop";
break;
case 'm': /* mergejoin */
- enable_mergejoin = false;
+ tmp = "enable_mergejoin";
break;
case 'h': /* hashjoin */
- enable_hashjoin = false;
+ tmp = "enable_hashjoin";
break;
default:
errs++;
}
+ if (tmp)
+ SetConfigOption(tmp, "false", ctx, true);
break;
case 'i':
@@ -1352,13 +1361,7 @@
/*
* S - amount of sort memory to use in 1k bytes
*/
- {
- int S;
-
- S = atoi(optarg);
- if (S >= 4 * BLCKSZ / 1024)
- SortMem = S;
- }
+ SetConfigOption("sort_mem", optarg, ctx, true);
break;
case 's':
@@ -1366,7 +1369,7 @@
/*
* s - report usage statistics (timings) after each query
*/
- Show_query_stats = 1;
+ SetConfigOption("show_query_stats", "true", ctx, true);
break;
case 't':
@@ -1380,23 +1383,26 @@
* caution: -s can not be used together with -t.
* ----------------
*/
+ tmp = NULL;
switch (optarg[0])
{
case 'p':
if (optarg[1] == 'a')
- Show_parser_stats = 1;
+ tmp = "show_parser_stats";
else if (optarg[1] == 'l')
- Show_planner_stats = 1;
+ tmp = "show_planner_stats";
else
errs++;
break;
case 'e':
- Show_executor_stats = 1;
+ tmp = "show_parser_stats";
break;
default:
errs++;
break;
}
+ if (tmp)
+ SetConfigOption(tmp, "true", ctx, true);
break;
case 'v':
@@ -1460,9 +1466,7 @@
elog(ERROR, "-c %s requires argument", optarg);
}
- /* all options are allowed if not under postmaster */
- SetConfigOption(name, value,
- (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER, true);
+ SetConfigOption(name, value, ctx, true);
free(name);
if (value)
free(value);
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /opt/cvs/pgsql/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.41
diff -u -r1.41 guc.c
--- src/backend/utils/misc/guc.c 2001/06/19 23:40:10 1.41
+++ src/backend/utils/misc/guc.c 2001/06/20 12:02:52
@@ -276,7 +276,7 @@
DEF_PGPORT, 1, 65535, NULL, NULL},
{"sort_mem", PGC_USERSET, &SortMem,
- 512, 1, INT_MAX, NULL, NULL},
+ 512, 4*BLCKSZ/1024, INT_MAX, NULL, NULL},
{"debug_level", PGC_USERSET, &DebugLvl,
0, 0, 16, NULL, NULL},
Marko Kreen writes:
I have not fixed the '-o -F', for which the reason is that
'fsync' var has in guc.c context of PGC_SIGHUP. Another
such variable is 'log_connections' - it has PGC_SIGHUP
and in same time is command-line settable.How should this be fixed? Simpliest would be to change those
to PGC_BACKEND.
No. PGC_BACKEND settings have no permission check, because users can pass
them in from the client with the PGOPTIONS environment variable. The fix
might involve a non-trivial rearrangement of the way PGOPTIONS is
processed (might be impossible, because PGC_BACKEND might be useless if
the setting will only happen after the first table access (pg_shadow)) or
another context level (might be too much work for one case). At the
moment you might want to just cheat and fix the context at PGC_POSTMASTER
for this particular case.
But what exactly means PGC_SIGHUP in ConfigureNames arrays? ATM I am
confused. In set_config_option it seems it should equal to either
PGC_BACKEND or PGC_POSTMASTER only has different error handling. But
why PGC_SIGHUP in ConfigureNames?
See include/utils/guc.h
--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
Marko Kreen <marko@l-t.ee> writes:
No. PGC_BACKEND settings have no permission check, because users can pass
them in from the client with the PGOPTIONS environment variable. The fix
might involve a non-trivial rearrangement of the way PGOPTIONS is
processed (might be impossible, because PGC_BACKEND might be useless if
the setting will only happen after the first table access (pg_shadow)) or
another context level (might be too much work for one case). At the
moment you might want to just cheat and fix the context at PGC_POSTMASTER
for this particular case.
Do you mean following?
if (DebugLvl >= 1); - SetConfigOption("log_connections", tmp, ctx, true); + SetConfigOption("log_connections", tmp, PGC_POSTMASTER, true);
In this particular case, there is no reason for log_connections to be
restricted that I can see --- it's a pretty harmless switch. I'd
recommend downgrading its PGC restriction level to BACKEND.
BTW, *please* remove the bogus ';' on the if() line.
if (secure) - SetConfigOption("fsync", "false", ctx, true); + SetConfigOption("fsync", "false", PGC_POSTMASTER, true);
This seems like an appropriate fix. I would recommend doing the same
with all the option switch settings that are protected with "if
(secure)". This is not a hack: essentially it says we will treat
options passed to the postmaster with -o as postmaster-time options.
Note that the above change for log_connections is shown to be wrong
by this same logic, because -d is *not* a secure switch. If you do want
to keep log_connections protected against being set by mere users,
then the appropriate coding would be
if (DebugLvl >= 1 && secure)
SetConfigOption("log_connections", tmp, PGC_POSTMASTER, true);
if (DebugLvl >= 2)
SetConfigOption("debug_print_query", tmp, ctx, true);
... etc ...
but again, I don't see a rationale for this restriction.
regards, tom lane
Import Notes
Reply to msg id not found: 20010622002750.A11926@l-t.eeReference msg id not found: 20010622002750.A11926@l-t.ee | Resolved by subject fallback
On Wed, Jun 20, 2001 at 05:43:07PM +0200, Peter Eisentraut wrote:
Marko Kreen writes:
I have not fixed the '-o -F', for which the reason is that
'fsync' var has in guc.c context of PGC_SIGHUP. Another
such variable is 'log_connections' - it has PGC_SIGHUP
and in same time is command-line settable.How should this be fixed? Simpliest would be to change those
to PGC_BACKEND.No. PGC_BACKEND settings have no permission check, because users can pass
them in from the client with the PGOPTIONS environment variable. The fix
might involve a non-trivial rearrangement of the way PGOPTIONS is
processed (might be impossible, because PGC_BACKEND might be useless if
the setting will only happen after the first table access (pg_shadow)) or
another context level (might be too much work for one case). At the
moment you might want to just cheat and fix the context at PGC_POSTMASTER
for this particular case.
Do you mean following?
--
marko
diff -u src/backend/tcop/postgres.c src/backend/tcop/postgres.c
--- src/backend/tcop/postgres.c
+++ src/backend/tcop/postgres.c
@@ -1225,7 +1225,7 @@
tmp = "true";
SetConfigOption("debug_level", optarg, ctx, true);
if (DebugLvl >= 1);
- SetConfigOption("log_connections", tmp, ctx, true);
+ SetConfigOption("log_connections", tmp, PGC_POSTMASTER, true);
if (DebugLvl >= 2)
SetConfigOption("debug_print_query", tmp, ctx, true);
if (DebugLvl >= 3)
@@ -1258,7 +1258,7 @@
* turn off fsync
*/
if (secure)
- SetConfigOption("fsync", "false", ctx, true);
+ SetConfigOption("fsync", "false", PGC_POSTMASTER, true);
break;
case 'f':
On Thu, Jun 21, 2001 at 06:23:03PM -0400, Tom Lane wrote:
Marko Kreen <marko@l-t.ee> writes:
if (DebugLvl >= 1); - SetConfigOption("log_connections", tmp, ctx, true); + SetConfigOption("log_connections", tmp, PGC_POSTMASTER, true);In this particular case, there is no reason for log_connections to be
restricted that I can see --- it's a pretty harmless switch. I'd
recommend downgrading its PGC restriction level to BACKEND.BTW, *please* remove the bogus ';' on the if() line.
if (secure) - SetConfigOption("fsync", "false", ctx, true); + SetConfigOption("fsync", "false", PGC_POSTMASTER, true);This seems like an appropriate fix. I would recommend doing the same
with all the option switch settings that are protected with "if
(secure)". This is not a hack: essentially it says we will treat
options passed to the postmaster with -o as postmaster-time options.
Well?
--
marko
diff -u src/backend/tcop/postgres.c src/backend/tcop/postgres.c
--- src/backend/tcop/postgres.c
+++ src/backend/tcop/postgres.c
@@ -1110,6 +1110,7 @@
bool secure = true;
int errs = 0;
GucContext ctx;
+ GucContext secure_ctx = PGC_POSTMASTER;
char *tmp;
int firstchar;
@@ -1207,8 +1208,7 @@
/*
* specify the size of buffer pool
*/
- if (secure)
- SetConfigOption("shared_buffers", optarg, ctx, true);
+ SetConfigOption("shared_buffers", optarg, secure_ctx, true);
break;
case 'C':
@@ -1227,8 +1227,8 @@
case 'd': /* debug level */
tmp = "true";
SetConfigOption("debug_level", optarg, ctx, true);
- if (DebugLvl >= 1);
- SetConfigOption("log_connections", tmp, PGC_POSTMASTER, true);
+ if (DebugLvl >= 1)
+ SetConfigOption("log_connections", tmp, ctx, true);
if (DebugLvl >= 2)
SetConfigOption("debug_print_query", tmp, ctx, true);
if (DebugLvl >= 3)
@@ -1260,8 +1260,7 @@
/*
* turn off fsync
*/
- if (secure)
- SetConfigOption("fsync", "false", PGC_POSTMASTER, true);
+ SetConfigOption("fsync", "false", secure_ctx, true);
break;
case 'f':
@@ -1356,6 +1355,7 @@
DBName = strdup(optarg);
secure = false; /* subsequent switches are NOT
* secure */
+ secure_ctx = ctx;
}
break;
diff -u src/backend/utils/misc/guc.c src/backend/utils/misc/guc.c
--- src/backend/utils/misc/guc.c
+++ src/backend/utils/misc/guc.c
@@ -196,7 +196,7 @@
{"fsync", PGC_SIGHUP, &enableFsync, true, NULL},
{"silent_mode", PGC_POSTMASTER, &SilentMode, false, NULL},
- {"log_connections", PGC_SIGHUP, &Log_connections, false, NULL},
+ {"log_connections", PGC_BACKEND, &Log_connections, false, NULL},
{"log_timestamp", PGC_SIGHUP, &Log_timestamp, false, NULL},
{"log_pid", PGC_SIGHUP, &Log_pid, false, NULL},
Marko Kreen <marko@l-t.ee> writes:
This seems like an appropriate fix. I would recommend doing the same
with all the option switch settings that are protected with "if
(secure)". This is not a hack: essentially it says we will treat
options passed to the postmaster with -o as postmaster-time options.
- if (secure) - SetConfigOption("shared_buffers", optarg, ctx, true); + SetConfigOption("shared_buffers", optarg, secure_ctx, true);
Uh, removing the security checks is NOT what I had in mind. Wasn't
my example clear enough?
regards, tom lane