Re: BUG #1224: Restarting postgres appends extra -D argument - Mailing list pgsql-bugs

From Bruce Momjian
Subject Re: BUG #1224: Restarting postgres appends extra -D argument
Date
Msg-id 200408282203.i7SM3ba17314@candle.pha.pa.us
Whole thread Raw
In response to Re: BUG #1224: Restarting postgres appends extra -D argument  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-bugs
Bruce Momjian wrote:
>
> I can confirm this bug report now.  I see it happens with:
>
>     pg_ctl -D /u/pg/data restart
>
> You have to use '-D' and 'restart' to cause -D to duplicate in
> postmaster.opts on every restart.  It should be fixed because excessive
> restarts could exceed the maximum command length, causing the server not
> to restart.
>
> The problem was actually introduced here:
>
>     revision 1.31
>     date: 2003/02/14 22:18:25;  author: momjian;  state: Exp;  lines: +7 -4
>     Propogate pg_ctl -D to the postmaster as a -D flag for identification by
>     ps for multiple postmasters, for Kevin Brown.
>
> It added -D to the command line so 'ps' showed it, rather than just
> passing it via PGDATA.  Of course on restart we should not be adding it
> again.
>
> I am attaching a patch which fixes the problem by not adding the -D
> display addition when doing a restart.  It is not needed for restart
> because the -D comes from the postmaster.opts file.
>
> We are packaging 7.4.5 now so I will wait to apply this after the
> release.

Patch applied.  It will appear in 7.4.6.

> Looking at 8.0 CVS, I see we are no longer adding the -D argument to
> postmaster start, meaning 'ps' will not display the -D to distinguish
> multiple postmasters.  Seems I should fix that too.

I have applied the following patch to propogate pg_ctl -D to the
postmaster command line.  This worked in 7.4.X and should continue
working in 8.0.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/bin/pg_ctl/pg_ctl.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/pg_ctl/pg_ctl.c,v
retrieving revision 1.26
diff -c -c -r1.26 pg_ctl.c
*** src/bin/pg_ctl/pg_ctl.c    28 Aug 2004 21:01:38 -0000    1.26
--- src/bin/pg_ctl/pg_ctl.c    28 Aug 2004 21:57:29 -0000
***************
*** 67,72 ****
--- 67,73 ----
  static int    sig = SIGTERM;    /* default */
  static CtlCommand ctl_command = NO_COMMAND;
  static char *pg_data = NULL;
+ static char *pgdata_opt = NULL;
  static char *post_opts = NULL;
  static const char *progname;
  static char *log_file = NULL;
***************
*** 309,327 ****
       */
      if (log_file != NULL)
  #ifndef WIN32
!         snprintf(cmd, MAXPGPATH, "%s\"%s\" %s < \"%s\" >> \"%s\" 2>&1 &%s",
  #else
!         snprintf(cmd, MAXPGPATH, "%sSTART /B \"\" \"%s\" %s < \"%s\" >> \"%s\" 2>&1%s",
  #endif
!                  SYSTEMQUOTE, postgres_path, post_opts, DEVNULL, log_file,
!                  SYSTEMQUOTE);
      else
  #ifndef WIN32
!         snprintf(cmd, MAXPGPATH, "%s\"%s\" %s < \"%s\" 2>&1 &%s",
  #else
!         snprintf(cmd, MAXPGPATH, "%sSTART /B \"\" \"%s\" %s < \"%s\" 2>&1%s",
  #endif
!                  SYSTEMQUOTE, postgres_path, post_opts, DEVNULL, SYSTEMQUOTE);

      return system(cmd);
  }
--- 310,329 ----
       */
      if (log_file != NULL)
  #ifndef WIN32
!         snprintf(cmd, MAXPGPATH, "%s\"%s\" %s%s < \"%s\" >> \"%s\" 2>&1 &%s",
  #else
!         snprintf(cmd, MAXPGPATH, "%sSTART /B \"\" \"%s\" %s%s < \"%s\" >> \"%s\" 2>&1%s",
  #endif
!                 SYSTEMQUOTE, postgres_path, pgdata_opt, post_opts,
!                 DEVNULL, log_file, SYSTEMQUOTE);
      else
  #ifndef WIN32
!         snprintf(cmd, MAXPGPATH, "%s\"%s\" %s%s < \"%s\" 2>&1 &%s",
  #else
!         snprintf(cmd, MAXPGPATH, "%sSTART /B \"\" \"%s\" %s%s < \"%s\" 2>&1%s",
  #endif
!                 SYSTEMQUOTE, postgres_path, pgdata_opt, post_opts,
!                 DEVNULL, SYSTEMQUOTE);

      return system(cmd);
  }
***************
*** 494,499 ****
--- 496,505 ----
          }
      }

+     /* No -D or -D already added during server start */
+     if (ctl_command == RESTART_COMMAND || pgdata_opt == NULL)
+         pgdata_opt = "";
+
      if (postgres_path == NULL)
      {
          char       *postmaster_path;
***************
*** 1210,1215 ****
--- 1216,1224 ----
                      env_var = xmalloc(len + 8);
                      snprintf(env_var, len + 8, "PGDATA=%s", optarg);
                      putenv(env_var);
+                     /* Show -D for easier postmaster 'ps' identification */
+                     pgdata_opt = xmalloc(len + 7);
+                     snprintf(pgdata_opt, len + 7, "-D \"%s\" ", optarg);
                      break;
                  }
                  case 'l':

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #1236: still in use tablespaces can be removed
Next
From: Bruce Momjian
Date:
Subject: Re: [PATCHES] BUG #1219: pgxs does not work fully