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