Thread: use GUC for cmdline

use GUC for cmdline

From
Marko Kreen
Date:
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},

Re: use GUC for cmdline

From
Bruce Momjian
Date:
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
>
> --
> 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},
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://www.postgresql.org/search.mpl
>

--
  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

Re: use GUC for cmdline

From
Bruce Momjian
Date:
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
>
> --
> 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},
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://www.postgresql.org/search.mpl
>

--
  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

Re: use GUC for cmdline

From
Marko Kreen
Date:
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


Re: use GUC for cmdline

From
Bruce Momjian
Date:
> 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

Re: use GUC for cmdline

From
Tom Lane
Date:
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

Re: use GUC for cmdline

From
Tom Lane
Date:
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

Re: use GUC for cmdline

From
Peter Eisentraut
Date:
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


Re: use GUC for cmdline

From
Bruce Momjian
Date:
> 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

Re: use GUC for cmdline

From
Bruce Momjian
Date:
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
>
> --
> 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},
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://www.postgresql.org/search.mpl
>

--
  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

Re: use GUC for cmdline

From
Bruce Momjian
Date:
> 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

Re: use GUC for cmdline

From
Peter Eisentraut
Date:
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
> >
> > --
> > 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},
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 6: Have you searched our list archives?
> >
> > http://www.postgresql.org/search.mpl
> >
>
>

--
Peter Eisentraut   peter_e@gmx.net   http://funkturm.homeip.net/~peter


Re: use GUC for cmdline

From
Tom Lane
Date:
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

Re: use GUC for cmdline

From
Bruce Momjian
Date:
> 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
? config.log
? config.cache
? config.status
? GNUmakefile
? contrib/retep/build
? contrib/retep/jars
? doc/src/sgml/ln8.html
? doc/src/sgml/bookindex.sgml
? doc/src/sgml/setindex.sgml
? doc/src/sgml/reference.html
? doc/src/sgml/sql-commands.html
? doc/src/sgml/app-pgdump.html
? doc/src/sgml/sql-abort.html
? doc/src/sgml/sql-altergroup.html
? doc/src/sgml/sql-altertable.html
? doc/src/sgml/sql-alteruser.html
? doc/src/sgml/sql-analyze.html
? doc/src/sgml/sql-begin.html
? doc/src/sgml/sql-checkpoint.html
? doc/src/sgml/sql-close.html
? doc/src/sgml/sql-cluster.html
? doc/src/sgml/sql-comment.html
? doc/src/sgml/sql-commit.html
? doc/src/sgml/sql-copy.html
? doc/src/sgml/sql-createaggregate.html
? doc/src/sgml/sql-createconstraint.html
? doc/src/sgml/sql-createdatabase.html
? doc/src/sgml/sql-createfunction.html
? doc/src/sgml/sql-creategroup.html
? doc/src/sgml/sql-createindex.html
? doc/src/sgml/sql-createlanguage.html
? doc/src/sgml/sql-createoperator.html
? doc/src/sgml/sql-createrule.html
? doc/src/sgml/sql-createsequence.html
? doc/src/sgml/sql-createtable.html
? doc/src/sgml/sql-createtableas.html
? doc/src/sgml/HTML.index
? doc/src/sgml/sql-createtrigger.html
? doc/src/sgml/sql-createtype.html
? doc/src/sgml/sql-createuser.html
? doc/src/sgml/sql-createview.html
? doc/src/sgml/sql-declare.html
? doc/src/sgml/sql-delete.html
? doc/src/sgml/sql-dropaggregate.html
? doc/src/sgml/sql-dropdatabase.html
? doc/src/sgml/sql-dropfunction.html
? doc/src/sgml/sql-dropgroup.html
? doc/src/sgml/sql-dropindex.html
? doc/src/sgml/sql-droplanguage.html
? doc/src/sgml/sql-dropoperator.html
? doc/src/sgml/sql-droprule.html
? doc/src/sgml/sql-dropsequence.html
? doc/src/sgml/sql-droptable.html
? doc/src/sgml/sql-droptrigger.html
? doc/src/sgml/sql-droptype.html
? doc/src/sgml/sql-dropuser.html
? doc/src/sgml/sql-dropview.html
? doc/src/sgml/sql-end.html
? doc/src/sgml/sql-explain.html
? doc/src/sgml/sql-fetch.html
? doc/src/sgml/sql-grant.html
? doc/src/sgml/sql-insert.html
? doc/src/sgml/sql-listen.html
? doc/src/sgml/sql-load.html
? doc/src/sgml/sql-lock.html
? doc/src/sgml/sql-move.html
? doc/src/sgml/sql-notify.html
? doc/src/sgml/sql-reindex.html
? doc/src/sgml/sql-reset.html
? doc/src/sgml/sql-revoke.html
? doc/src/sgml/sql-rollback.html
? doc/src/sgml/sql-select.html
? doc/src/sgml/sql-selectinto.html
? doc/src/sgml/sql-set.html
? doc/src/sgml/sql-set-constraints.html
? doc/src/sgml/sql-set-session-authorization.html
? doc/src/sgml/sql-set-transaction.html
? doc/src/sgml/sql-show.html
? doc/src/sgml/sql-truncate.html
? doc/src/sgml/sql-unlisten.html
? doc/src/sgml/sql-update.html
? doc/src/sgml/sql-vacuum.html
? doc/src/sgml/reference-client.html
? doc/src/sgml/app-createdb.html
? doc/src/sgml/app-createuser.html
? doc/src/sgml/app-dropdb.html
? doc/src/sgml/app-dropuser.html
? doc/src/sgml/app-ecpg.html
? doc/src/sgml/app-pgaccess.html
? doc/src/sgml/app-pgconfig.html
? doc/src/sgml/app-pg-dumpall.html
? doc/src/sgml/app-pgrestore.html
? doc/src/sgml/app-psql.html
? doc/src/sgml/app-pgtclsh.html
? doc/src/sgml/app-pgtksh.html
? doc/src/sgml/app-vacuumdb.html
? doc/src/sgml/reference-server.html
? doc/src/sgml/app-createlang.html
? doc/src/sgml/app-droplang.html
? doc/src/sgml/app-initdb.html
? doc/src/sgml/app-initlocation.html
? doc/src/sgml/app-ipcclean.html
? doc/src/sgml/app-pg-ctl.html
? doc/src/sgml/app-pg-passwd.html
? doc/src/sgml/app-postgres.html
? doc/src/sgml/app-postmaster.html
? src/GNUmakefile
? src/Makefile.custom
? src/Makefile.global
? src/crtags
? src/log
? src/backend/postgres
? src/backend/catalog/global.description
? src/backend/catalog/global.bki
? src/backend/catalog/template1.bki
? src/backend/catalog/template1.description
? src/backend/catalog/postgres.bki
? src/backend/catalog/postgres.description
? src/backend/port/Makefile
? src/backend/postmaster/ttypb
? src/bin/initdb/initdb
? src/bin/initlocation/initlocation
? src/bin/ipcclean/ipcclean
? src/bin/pg_config/pg_config
? src/bin/pg_ctl/pg_ctl
? src/bin/pg_dump/pg_dump
? src/bin/pg_dump/pg_restore
? src/bin/pg_dump/pg_dumpall
? src/bin/pg_id/pg_id
? src/bin/pg_passwd/pg_passwd
? src/bin/pgaccess/pgaccess
? src/bin/pgaccess/doc/html/tutorial/x
? src/bin/pgtclsh/pgtclsh
? src/bin/pgtclsh/pgtksh
? src/bin/pgtclsh/Makefile.tkdefs
? src/bin/pgtclsh/Makefile.tcldefs
? src/bin/psql/psql
? src/bin/scripts/createlang
? src/include/config.h
? src/include/stamp-h
? src/interfaces/ecpg/lib/libecpg.so.3.3.0
? src/interfaces/ecpg/preproc/ecpg
? src/interfaces/jdbc/build
? src/interfaces/jdbc/jars
? src/interfaces/jdbc/org/postgresql/Driver.java
? src/interfaces/libpgeasy/libpgeasy.so.2.2
? src/interfaces/libpgtcl/libpgtcl.so.2.2
? src/interfaces/libpq/libpq.so.2.2
? src/interfaces/odbc/libpsqlodbc.so.0.27
? src/interfaces/perl5/blib
? src/interfaces/perl5/pm_to_blib
? src/interfaces/perl5/Makefile
? src/interfaces/perl5/Pg.c
? src/interfaces/perl5/Pg.bs
? src/interfaces/python/Setup
? src/interfaces/python/Setup.in
? src/interfaces/python/Makefile.pre.in
? src/interfaces/python/sedscript
? src/interfaces/python/Makefile.pre
? src/interfaces/python/config.c
? src/interfaces/python/Makefile
? src/pl/plperl/blib
? src/pl/plperl/Makefile
? src/pl/plperl/pm_to_blib
? src/pl/plperl/SPI.c
? src/pl/plperl/plperl.bs
? src/pl/plpgsql/src/libplpgsql.so.1.0
? src/pl/tcl/Makefile.tcldefs
? src/pl/tcl/modules/pltcl_loadmod
? src/pl/tcl/modules/pltcl_delmod
? src/pl/tcl/modules/pltcl_listmod
Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v
retrieving revision 1.221
retrieving revision 1.222
diff -c -r1.221 -r1.222
*** src/backend/postmaster/postmaster.c    2001/06/16 22:58:12    1.221
--- src/backend/postmaster/postmaster.c    2001/06/18 23:42:32    1.222
***************
*** 28,34 ****
   *
   *
   * IDENTIFICATION
!  *      $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.221 2001/06/16 22:58:12
tglExp $ 
   *
   * NOTES
   *
--- 28,34 ----
   *
   *
   * IDENTIFICATION
!  *      $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.222 2001/06/18 23:42:32
momjianExp $ 
   *
   * NOTES
   *
***************
*** 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
retrieving revision 1.221
diff -c -r1.220 -r1.221
*** src/backend/tcop/postgres.c    2001/06/12 22:54:06    1.220
--- src/backend/tcop/postgres.c    2001/06/18 23:42:32    1.221
***************
*** 8,14 ****
   *
   *
   * IDENTIFICATION
!  *      $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.220 2001/06/12 22:54:06 tgl Exp $
   *
   * NOTES
   *      this is the "main" module of the postgres backend and
--- 8,14 ----
   *
   *
   * IDENTIFICATION
!  *      $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.221 2001/06/18 23:42:32 momjian
Exp$ 
   *
   * NOTES
   *      this is the "main" module of the postgres backend and
***************
*** 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);
***************
*** 1709,1715 ****
      if (!IsUnderPostmaster)
      {
          puts("\nPOSTGRES backend interactive interface ");
!         puts("$Revision: 1.220 $ $Date: 2001/06/12 22:54:06 $\n");
      }

      /*
--- 1713,1719 ----
      if (!IsUnderPostmaster)
      {
          puts("\nPOSTGRES backend interactive interface ");
!         puts("$Revision: 1.221 $ $Date: 2001/06/18 23:42:32 $\n");
      }

      /*
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -c -r1.39 -r1.40
*** src/backend/utils/misc/guc.c    2001/06/18 16:14:43    1.39
--- src/backend/utils/misc/guc.c    2001/06/18 23:42:32    1.40
***************
*** 4,10 ****
   * Support for grand unified configuration scheme, including SET
   * command, configuration file, and command line options.
   *
!  * $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.39 2001/06/18 16:14:43 momjian Exp $
   *
   * Copyright 2000 by PostgreSQL Global Development Group
   * Written by Peter Eisentraut <peter_e@gmx.net>.
--- 4,10 ----
   * Support for grand unified configuration scheme, including SET
   * command, configuration file, and command line options.
   *
!  * $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.40 2001/06/18 23:42:32 momjian Exp $
   *
   * Copyright 2000 by PostgreSQL Global Development Group
   * Written by Peter Eisentraut <peter_e@gmx.net>.
***************
*** 276,282 ****
      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},
--- 276,282 ----
      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},

Re: use GUC for cmdline

From
Marko Kreen
Date:
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 now
>
> OK, 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},

Re: use GUC for cmdline

From
Peter Eisentraut
Date:
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


Re: use GUC for cmdline

From
Marko Kreen
Date:
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':

Re: use GUC for cmdline

From
Tom Lane
Date:
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

Re: use GUC for cmdline

From
Marko Kreen
Date:
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},


Re: use GUC for cmdline

From
Tom Lane
Date:
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

Re: use GUC for cmdline

From
Marko Kreen
Date:
On Thu, Jun 21, 2001 at 07:50:44PM -0400, Tom Lane wrote:
> 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?

Ee, this is done in set_config_option?

secure_ctx = PGC_POSTMASTER until '-p' then it will
get ordinary 'ctx'.  This should follow use of secure.
Ofcourse this assumes all GUC vars you want to protect
with 'secure' have PGC_POSTMASTER/PGC_SIGHUP as context.
Wont it be true?

--
marko


Re: use GUC for cmdline

From
Tom Lane
Date:
Marko Kreen <marko@l-t.ee> writes:
>> Uh, removing the security checks is NOT what I had in mind.  Wasn't
>> my example clear enough?

> Ee, this is done in set_config_option?

No, you still need the if (secure) --- because that changes while
we're reading the switches.  *If* secure is true, it's okay to set
the option with PGC_POSTMASTER context.

            regards, tom lane

Re: use GUC for cmdline

From
Marko Kreen
Date:
On Thu, Jun 21, 2001 at 09:09:20PM -0400, Tom Lane wrote:
> Marko Kreen <marko@l-t.ee> writes:
> >> Uh, removing the security checks is NOT what I had in mind.  Wasn't
> >> my example clear enough?
>
> > Ee, this is done in set_config_option?
>
> No, you still need the if (secure) --- because that changes while
> we're reading the switches.  *If* secure is true, it's okay to set
> the option with PGC_POSTMASTER context.

secure_ctx changes too.  it will be PGC_BACKEND after '-p'.

I did it this way, because I imagined the 'if (secure)' as a
permission check for non-GUC variables.  For GUC the permission
checks should be done in guc.c, this also means clearer code
in postgres.c.  Now that I think about it, it could be
even simplified to the following.

This is mostly matter of taste, and I can ofcourse do it your
way, but ATM it seems to me you missed the secure_ctx = ctx;
line in last patch.

--
marko


diff -u src/backend/tcop/postgres.c src/backend/tcop/postgres.c
--- src/backend/tcop/postgres.c
+++ src/backend/tcop/postgres.c
@@ -1120,8 +1120,8 @@

     char       *potential_DataDir = NULL;

-    /* all options are allowed if not under postmaster */
-    ctx = IsUnderPostmaster ? PGC_BACKEND : PGC_POSTMASTER;
+    /* all options are allowed if not under postmaster or until -p */
+    ctx = PGC_POSTMASTER;

     /*
      * Catch standard options before doing much else.  This even works on
@@ -1207,8 +1207,7 @@
                 /*
                  * specify the size of buffer pool
                  */
-                if (secure)
-                    SetConfigOption("shared_buffers", optarg, ctx, true);
+                SetConfigOption("shared_buffers", optarg, ctx, true);
                 break;

             case 'C':
@@ -1227,8 +1226,8 @@
             case 'd':            /* debug level */
                 tmp = "true";
                 SetConfigOption("debug_level", optarg, ctx, true);
-                if (DebugLvl >= 1);
-                SetConfigOption("log_connections", tmp, ctx, 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 +1259,7 @@
                 /*
                  * turn off fsync
                  */
-                if (secure)
-                    SetConfigOption("fsync", "false", ctx, true);
+                SetConfigOption("fsync", "false", ctx, true);
                 break;

             case 'f':
@@ -1356,6 +1354,7 @@
                     DBName = strdup(optarg);
                     secure = false;        /* subsequent switches are NOT
                                          * secure */
+                    ctx = PGC_BACKEND;
                 }
                 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},


Re: use GUC for cmdline

From
Tom Lane
Date:
Marko Kreen <marko@l-t.ee> writes:
> secure_ctx changes too.  it will be PGC_BACKEND after '-p'.

Oh, okay, I missed that part.  Could we see the total state of the
patch --- ie, a diff against current CVS, not a bunch of deltas?
I've gotten confused about what's in and what's out.

            regards, tom lane

Re: use GUC for cmdline

From
Marko Kreen
Date:
On Fri, Jun 22, 2001 at 09:18:55AM -0400, Tom Lane wrote:
> Marko Kreen <marko@l-t.ee> writes:
> > secure_ctx changes too.  it will be PGC_BACKEND after '-p'.
>
> Oh, okay, I missed that part.  Could we see the total state of the
> patch --- ie, a diff against current CVS, not a bunch of deltas?
> I've gotten confused about what's in and what's out.

Ok, here it is.  Cleared the ctx comment too - after -p
it will be PGC_BACKEND in any case.

--
marko


Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v
retrieving revision 1.225
diff -u -c -r1.225 postmaster.c
*** src/backend/postmaster/postmaster.c    2001/06/21 16:43:24    1.225
--- src/backend/postmaster/postmaster.c    2001/06/22 13:57:02
***************
*** 429,442 ****
  #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. */
--- 429,442 ----
  #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. */
***************
*** 450,472 ****
                   * 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':
--- 450,472 ----
                   * 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", "false", PGC_POSTMASTER, true);
                  break;
              case 'h':
!                 SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true);
                  break;
              case 'i':
!                 SetConfigOption("tcpip_socket", "true", PGC_POSTMASTER, true);
                  break;
              case 'k':
!                 SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true);
                  break;
  #ifdef USE_SSL
              case 'l':
!                 SetConfigOption("ssl", "true", PGC_POSTMASTER, true);
                  break;
  #endif
              case 'm':
***************
*** 486,496 ****
                   * 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 */
--- 486,492 ----
                   * 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 */
***************
*** 507,513 ****
                  strcpy(original_extraoptions, optarg);
                  break;
              case 'p':
!                 PostPortNumber = atoi(optarg);
                  break;
              case 'S':

--- 503,509 ----
                  strcpy(original_extraoptions, optarg);
                  break;
              case 'p':
!                 SetConfigOption("port", optarg, PGC_POSTMASTER, true);
                  break;
              case 'S':

***************
*** 517,523 ****
                   * it's most badly needed on SysV-derived systems like
                   * SVR4 and HP-UX.
                   */
!                 SilentMode = true;
                  break;
              case 's':

--- 513,519 ----
                   * it's most badly needed on SysV-derived systems like
                   * SVR4 and HP-UX.
                   */
!                 SetConfigOption("silent_mode", "true", 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.223
diff -u -c -r1.223 postgres.c
*** src/backend/tcop/postgres.c    2001/06/20 18:07:55    1.223
--- src/backend/tcop/postgres.c    2001/06/22 13:57:07
***************
*** 1109,1114 ****
--- 1109,1116 ----
      const char *DBName = NULL;
      bool        secure = true;
      int            errs = 0;
+     GucContext    ctx;
+     char        *tmp;

      int            firstchar;
      StringInfo    parser_input;
***************
*** 1118,1123 ****
--- 1120,1128 ----

      char       *potential_DataDir = NULL;

+     /* all options are allowed until '-p' */
+     ctx = PGC_POSTMASTER;
+
      /*
       * Catch standard options before doing much else.  This even works on
       * systems without getopt_long.
***************
*** 1191,1197 ****
          {
              case 'A':
  #ifdef USE_ASSERT_CHECKING
!                 assert_enabled = atoi(optarg);
  #else
                  fprintf(stderr, "Assert checking is not compiled in\n");
  #endif
--- 1196,1202 ----
          {
              case 'A':
  #ifdef USE_ASSERT_CHECKING
!                 SetConfigOption("debug_assertions", optarg, ctx, true);
  #else
                  fprintf(stderr, "Assert checking is not compiled in\n");
  #endif
***************
*** 1202,1209 ****
                  /*
                   * specify the size of buffer pool
                   */
!                 if (secure)
!                     NBuffers = atoi(optarg);
                  break;

              case 'C':
--- 1207,1213 ----
                  /*
                   * specify the size of buffer pool
                   */
!                 SetConfigOption("shared_buffers", optarg, ctx, true);
                  break;

              case 'C':
***************
*** 1220,1236 ****
                  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':
--- 1224,1241 ----
                  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':
***************
*** 1254,1261 ****
                  /*
                   * turn off fsync
                   */
!                 if (secure)
!                     enableFsync = false;
                  break;

              case 'f':
--- 1259,1265 ----
                  /*
                   * turn off fsync
                   */
!                 SetConfigOption("fsync", "false", ctx, true);
                  break;

              case 'f':
***************
*** 1263,1291 ****
                  /*
                   * 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':
--- 1267,1298 ----
                  /*
                   * 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':
***************
*** 1347,1352 ****
--- 1354,1360 ----
                      DBName = strdup(optarg);
                      secure = false;        /* subsequent switches are NOT
                                           * secure */
+                     ctx = PGC_BACKEND;
                  }
                  break;

***************
*** 1355,1367 ****
                  /*
                   * 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':
--- 1363,1369 ----
                  /*
                   * S - amount of sort memory to use in 1k bytes
                   */
!                 SetConfigOption("sort_mem", optarg, ctx, true);
                  break;

              case 's':
***************
*** 1369,1375 ****
                  /*
                   * s - report usage statistics (timings) after each query
                   */
!                 Show_query_stats = 1;
                  break;

              case 't':
--- 1371,1377 ----
                  /*
                   * s - report usage statistics (timings) after each query
                   */
!                 SetConfigOption("show_query_stats", "true", ctx, true);
                  break;

              case 't':
***************
*** 1383,1405 ****
                   *    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':
--- 1385,1410 ----
                   *    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':
***************
*** 1463,1471 ****
                              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);
--- 1468,1474 ----
                              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.41
diff -u -c -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/22 13:57:10
***************
*** 196,202 ****
      {"fsync", PGC_SIGHUP, &enableFsync, true, NULL},
      {"silent_mode", PGC_POSTMASTER, &SilentMode, false, NULL},

!     {"log_connections", PGC_SIGHUP, &Log_connections, false, NULL},
      {"log_timestamp", PGC_SIGHUP, &Log_timestamp, false, NULL},
      {"log_pid", PGC_SIGHUP, &Log_pid, false, NULL},

--- 196,202 ----
      {"fsync", PGC_SIGHUP, &enableFsync, true, NULL},
      {"silent_mode", PGC_POSTMASTER, &SilentMode, 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},

***************
*** 276,282 ****
      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},
--- 276,282 ----
      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},

Re: use GUC for cmdline

From
Bruce Momjian
Date:
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.

> On Fri, Jun 22, 2001 at 09:18:55AM -0400, Tom Lane wrote:
> > Marko Kreen <marko@l-t.ee> writes:
> > > secure_ctx changes too.  it will be PGC_BACKEND after '-p'.
> >
> > Oh, okay, I missed that part.  Could we see the total state of the
> > patch --- ie, a diff against current CVS, not a bunch of deltas?
> > I've gotten confused about what's in and what's out.
>
> Ok, here it is.  Cleared the ctx comment too - after -p
> it will be PGC_BACKEND in any case.
>
> --
> marko
>
>
> Index: src/backend/postmaster/postmaster.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v
> retrieving revision 1.225
> diff -u -c -r1.225 postmaster.c
> *** src/backend/postmaster/postmaster.c    2001/06/21 16:43:24    1.225
> --- src/backend/postmaster/postmaster.c    2001/06/22 13:57:02
> ***************
> *** 429,442 ****
>   #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. */
> --- 429,442 ----
>   #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. */
> ***************
> *** 450,472 ****
>                    * 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':
> --- 450,472 ----
>                    * 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", "false", PGC_POSTMASTER, true);
>                   break;
>               case 'h':
> !                 SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'i':
> !                 SetConfigOption("tcpip_socket", "true", PGC_POSTMASTER, true);
>                   break;
>               case 'k':
> !                 SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true);
>                   break;
>   #ifdef USE_SSL
>               case 'l':
> !                 SetConfigOption("ssl", "true", PGC_POSTMASTER, true);
>                   break;
>   #endif
>               case 'm':
> ***************
> *** 486,496 ****
>                    * 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 */
> --- 486,492 ----
>                    * 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 */
> ***************
> *** 507,513 ****
>                   strcpy(original_extraoptions, optarg);
>                   break;
>               case 'p':
> !                 PostPortNumber = atoi(optarg);
>                   break;
>               case 'S':
>
> --- 503,509 ----
>                   strcpy(original_extraoptions, optarg);
>                   break;
>               case 'p':
> !                 SetConfigOption("port", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'S':
>
> ***************
> *** 517,523 ****
>                    * it's most badly needed on SysV-derived systems like
>                    * SVR4 and HP-UX.
>                    */
> !                 SilentMode = true;
>                   break;
>               case 's':
>
> --- 513,519 ----
>                    * it's most badly needed on SysV-derived systems like
>                    * SVR4 and HP-UX.
>                    */
> !                 SetConfigOption("silent_mode", "true", 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.223
> diff -u -c -r1.223 postgres.c
> *** src/backend/tcop/postgres.c    2001/06/20 18:07:55    1.223
> --- src/backend/tcop/postgres.c    2001/06/22 13:57:07
> ***************
> *** 1109,1114 ****
> --- 1109,1116 ----
>       const char *DBName = NULL;
>       bool        secure = true;
>       int            errs = 0;
> +     GucContext    ctx;
> +     char        *tmp;
>
>       int            firstchar;
>       StringInfo    parser_input;
> ***************
> *** 1118,1123 ****
> --- 1120,1128 ----
>
>       char       *potential_DataDir = NULL;
>
> +     /* all options are allowed until '-p' */
> +     ctx = PGC_POSTMASTER;
> +
>       /*
>        * Catch standard options before doing much else.  This even works on
>        * systems without getopt_long.
> ***************
> *** 1191,1197 ****
>           {
>               case 'A':
>   #ifdef USE_ASSERT_CHECKING
> !                 assert_enabled = atoi(optarg);
>   #else
>                   fprintf(stderr, "Assert checking is not compiled in\n");
>   #endif
> --- 1196,1202 ----
>           {
>               case 'A':
>   #ifdef USE_ASSERT_CHECKING
> !                 SetConfigOption("debug_assertions", optarg, ctx, true);
>   #else
>                   fprintf(stderr, "Assert checking is not compiled in\n");
>   #endif
> ***************
> *** 1202,1209 ****
>                   /*
>                    * specify the size of buffer pool
>                    */
> !                 if (secure)
> !                     NBuffers = atoi(optarg);
>                   break;
>
>               case 'C':
> --- 1207,1213 ----
>                   /*
>                    * specify the size of buffer pool
>                    */
> !                 SetConfigOption("shared_buffers", optarg, ctx, true);
>                   break;
>
>               case 'C':
> ***************
> *** 1220,1236 ****
>                   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':
> --- 1224,1241 ----
>                   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':
> ***************
> *** 1254,1261 ****
>                   /*
>                    * turn off fsync
>                    */
> !                 if (secure)
> !                     enableFsync = false;
>                   break;
>
>               case 'f':
> --- 1259,1265 ----
>                   /*
>                    * turn off fsync
>                    */
> !                 SetConfigOption("fsync", "false", ctx, true);
>                   break;
>
>               case 'f':
> ***************
> *** 1263,1291 ****
>                   /*
>                    * 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':
> --- 1267,1298 ----
>                   /*
>                    * 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':
> ***************
> *** 1347,1352 ****
> --- 1354,1360 ----
>                       DBName = strdup(optarg);
>                       secure = false;        /* subsequent switches are NOT
>                                            * secure */
> +                     ctx = PGC_BACKEND;
>                   }
>                   break;
>
> ***************
> *** 1355,1367 ****
>                   /*
>                    * 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':
> --- 1363,1369 ----
>                   /*
>                    * S - amount of sort memory to use in 1k bytes
>                    */
> !                 SetConfigOption("sort_mem", optarg, ctx, true);
>                   break;
>
>               case 's':
> ***************
> *** 1369,1375 ****
>                   /*
>                    * s - report usage statistics (timings) after each query
>                    */
> !                 Show_query_stats = 1;
>                   break;
>
>               case 't':
> --- 1371,1377 ----
>                   /*
>                    * s - report usage statistics (timings) after each query
>                    */
> !                 SetConfigOption("show_query_stats", "true", ctx, true);
>                   break;
>
>               case 't':
> ***************
> *** 1383,1405 ****
>                    *    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':
> --- 1385,1410 ----
>                    *    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':
> ***************
> *** 1463,1471 ****
>                               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);
> --- 1468,1474 ----
>                               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.41
> diff -u -c -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/22 13:57:10
> ***************
> *** 196,202 ****
>       {"fsync", PGC_SIGHUP, &enableFsync, true, NULL},
>       {"silent_mode", PGC_POSTMASTER, &SilentMode, false, NULL},
>
> !     {"log_connections", PGC_SIGHUP, &Log_connections, false, NULL},
>       {"log_timestamp", PGC_SIGHUP, &Log_timestamp, false, NULL},
>       {"log_pid", PGC_SIGHUP, &Log_pid, false, NULL},
>
> --- 196,202 ----
>       {"fsync", PGC_SIGHUP, &enableFsync, true, NULL},
>       {"silent_mode", PGC_POSTMASTER, &SilentMode, 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},
>
> ***************
> *** 276,282 ****
>       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},
> --- 276,282 ----
>       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 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly
>

--
  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

Re: use GUC for cmdline

From
Bruce Momjian
Date:
Patch applied.  Thanks.


> On Fri, Jun 22, 2001 at 09:18:55AM -0400, Tom Lane wrote:
> > Marko Kreen <marko@l-t.ee> writes:
> > > secure_ctx changes too.  it will be PGC_BACKEND after '-p'.
> >
> > Oh, okay, I missed that part.  Could we see the total state of the
> > patch --- ie, a diff against current CVS, not a bunch of deltas?
> > I've gotten confused about what's in and what's out.
>
> Ok, here it is.  Cleared the ctx comment too - after -p
> it will be PGC_BACKEND in any case.
>
> --
> marko
>
>
> Index: src/backend/postmaster/postmaster.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v
> retrieving revision 1.225
> diff -u -c -r1.225 postmaster.c
> *** src/backend/postmaster/postmaster.c    2001/06/21 16:43:24    1.225
> --- src/backend/postmaster/postmaster.c    2001/06/22 13:57:02
> ***************
> *** 429,442 ****
>   #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. */
> --- 429,442 ----
>   #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. */
> ***************
> *** 450,472 ****
>                    * 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':
> --- 450,472 ----
>                    * 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", "false", PGC_POSTMASTER, true);
>                   break;
>               case 'h':
> !                 SetConfigOption("virtual_host", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'i':
> !                 SetConfigOption("tcpip_socket", "true", PGC_POSTMASTER, true);
>                   break;
>               case 'k':
> !                 SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, true);
>                   break;
>   #ifdef USE_SSL
>               case 'l':
> !                 SetConfigOption("ssl", "true", PGC_POSTMASTER, true);
>                   break;
>   #endif
>               case 'm':
> ***************
> *** 486,496 ****
>                    * 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 */
> --- 486,492 ----
>                    * 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 */
> ***************
> *** 507,513 ****
>                   strcpy(original_extraoptions, optarg);
>                   break;
>               case 'p':
> !                 PostPortNumber = atoi(optarg);
>                   break;
>               case 'S':
>
> --- 503,509 ----
>                   strcpy(original_extraoptions, optarg);
>                   break;
>               case 'p':
> !                 SetConfigOption("port", optarg, PGC_POSTMASTER, true);
>                   break;
>               case 'S':
>
> ***************
> *** 517,523 ****
>                    * it's most badly needed on SysV-derived systems like
>                    * SVR4 and HP-UX.
>                    */
> !                 SilentMode = true;
>                   break;
>               case 's':
>
> --- 513,519 ----
>                    * it's most badly needed on SysV-derived systems like
>                    * SVR4 and HP-UX.
>                    */
> !                 SetConfigOption("silent_mode", "true", 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.223
> diff -u -c -r1.223 postgres.c
> *** src/backend/tcop/postgres.c    2001/06/20 18:07:55    1.223
> --- src/backend/tcop/postgres.c    2001/06/22 13:57:07
> ***************
> *** 1109,1114 ****
> --- 1109,1116 ----
>       const char *DBName = NULL;
>       bool        secure = true;
>       int            errs = 0;
> +     GucContext    ctx;
> +     char        *tmp;
>
>       int            firstchar;
>       StringInfo    parser_input;
> ***************
> *** 1118,1123 ****
> --- 1120,1128 ----
>
>       char       *potential_DataDir = NULL;
>
> +     /* all options are allowed until '-p' */
> +     ctx = PGC_POSTMASTER;
> +
>       /*
>        * Catch standard options before doing much else.  This even works on
>        * systems without getopt_long.
> ***************
> *** 1191,1197 ****
>           {
>               case 'A':
>   #ifdef USE_ASSERT_CHECKING
> !                 assert_enabled = atoi(optarg);
>   #else
>                   fprintf(stderr, "Assert checking is not compiled in\n");
>   #endif
> --- 1196,1202 ----
>           {
>               case 'A':
>   #ifdef USE_ASSERT_CHECKING
> !                 SetConfigOption("debug_assertions", optarg, ctx, true);
>   #else
>                   fprintf(stderr, "Assert checking is not compiled in\n");
>   #endif
> ***************
> *** 1202,1209 ****
>                   /*
>                    * specify the size of buffer pool
>                    */
> !                 if (secure)
> !                     NBuffers = atoi(optarg);
>                   break;
>
>               case 'C':
> --- 1207,1213 ----
>                   /*
>                    * specify the size of buffer pool
>                    */
> !                 SetConfigOption("shared_buffers", optarg, ctx, true);
>                   break;
>
>               case 'C':
> ***************
> *** 1220,1236 ****
>                   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':
> --- 1224,1241 ----
>                   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':
> ***************
> *** 1254,1261 ****
>                   /*
>                    * turn off fsync
>                    */
> !                 if (secure)
> !                     enableFsync = false;
>                   break;
>
>               case 'f':
> --- 1259,1265 ----
>                   /*
>                    * turn off fsync
>                    */
> !                 SetConfigOption("fsync", "false", ctx, true);
>                   break;
>
>               case 'f':
> ***************
> *** 1263,1291 ****
>                   /*
>                    * 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':
> --- 1267,1298 ----
>                   /*
>                    * 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':
> ***************
> *** 1347,1352 ****
> --- 1354,1360 ----
>                       DBName = strdup(optarg);
>                       secure = false;        /* subsequent switches are NOT
>                                            * secure */
> +                     ctx = PGC_BACKEND;
>                   }
>                   break;
>
> ***************
> *** 1355,1367 ****
>                   /*
>                    * 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':
> --- 1363,1369 ----
>                   /*
>                    * S - amount of sort memory to use in 1k bytes
>                    */
> !                 SetConfigOption("sort_mem", optarg, ctx, true);
>                   break;
>
>               case 's':
> ***************
> *** 1369,1375 ****
>                   /*
>                    * s - report usage statistics (timings) after each query
>                    */
> !                 Show_query_stats = 1;
>                   break;
>
>               case 't':
> --- 1371,1377 ----
>                   /*
>                    * s - report usage statistics (timings) after each query
>                    */
> !                 SetConfigOption("show_query_stats", "true", ctx, true);
>                   break;
>
>               case 't':
> ***************
> *** 1383,1405 ****
>                    *    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':
> --- 1385,1410 ----
>                    *    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':
> ***************
> *** 1463,1471 ****
>                               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);
> --- 1468,1474 ----
>                               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.41
> diff -u -c -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/22 13:57:10
> ***************
> *** 196,202 ****
>       {"fsync", PGC_SIGHUP, &enableFsync, true, NULL},
>       {"silent_mode", PGC_POSTMASTER, &SilentMode, false, NULL},
>
> !     {"log_connections", PGC_SIGHUP, &Log_connections, false, NULL},
>       {"log_timestamp", PGC_SIGHUP, &Log_timestamp, false, NULL},
>       {"log_pid", PGC_SIGHUP, &Log_pid, false, NULL},
>
> --- 196,202 ----
>       {"fsync", PGC_SIGHUP, &enableFsync, true, NULL},
>       {"silent_mode", PGC_POSTMASTER, &SilentMode, 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},
>
> ***************
> *** 276,282 ****
>       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},
> --- 276,282 ----
>       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 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly
>

--
  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