Re: use GUC for cmdline - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: use GUC for cmdline
Date
Msg-id 200106192341.f5JNfBB21328@candle.pha.pa.us
Whole thread Raw
In response to Re: use GUC for cmdline  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: use GUC for cmdline  (Marko Kreen <marko@l-t.ee>)
List pgsql-patches
> 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},

pgsql-patches by date:

Previous
From: Tom Lane
Date:
Subject: Re: use GUC for cmdline
Next
From: Bruce Momjian
Date:
Subject: Re: possible patch to increase number of hash overflow pages?