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
[EMAIL PROTECTED] | (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':
---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
joining column's datatypes do not match