Thread: pg_ctl restart just appends to command line instead of regenerating original cmd

pg_ctl restart just appends to command line instead of regenerating original cmd

From
pgsql-bugs@postgresql.org
Date:
Patricia Holben (pholben@greatbridge.com) reports a bug with a severity of 3
The lower the number the more severe it is.

Short Description
pg_ctl restart just appends to command line instead of regenerating original cmd

Long Description
I see in the mailing lists that there was activity around the pg_ctl restart function in April. I wondered if there had
beenor was going to be some action taken, and if so, if those involved were aware that subsequent restarts keep adding
tothe command line (rather than re-executing it exactly). For example, if the command at start is: 
/usr/bin/postmaster '-D' '/var/lib/pgsql/data'

Then when "pg_ctl restart" is executed, the "pg_ctl status" will display:
    pg_ctl: postmaster is running (pid: 14635)
    Command line was:
    /usr/bin/postmaster '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data'

A subsequent "pg_ctl restart" causes the next "pg_ctl status" to display:
    pg_ctl: postmaster is running (pid: 14635)
    Command line was:
    /usr/bin/postmaster '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data'

And so it continues with each subsequent restart.

Sample Code


No file was uploaded with this report
I can confirm that problem exists in the current CVS sources.

> Patricia Holben (pholben@greatbridge.com) reports a bug with a severity of 3
> The lower the number the more severe it is.
>
> Short Description
> pg_ctl restart just appends to command line instead of regenerating original cmd
>
> Long Description
> I see in the mailing lists that there was activity around the pg_ctl restart function in April. I wondered if there
hadbeen or was going to be some action taken, and if so, if those involved were aware that subsequent restarts keep
addingto the command line (rather than re-executing it exactly). For example, if the command at start is: 
> /usr/bin/postmaster '-D' '/var/lib/pgsql/data'
>
> Then when "pg_ctl restart" is executed, the "pg_ctl status" will display:
>     pg_ctl: postmaster is running (pid: 14635)
>     Command line was:
>     /usr/bin/postmaster '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data'
>
> A subsequent "pg_ctl restart" causes the next "pg_ctl status" to display:
>     pg_ctl: postmaster is running (pid: 14635)
>     Command line was:
>     /usr/bin/postmaster '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data'
>
> And so it continues with each subsequent restart.
>
> Sample Code
>
>
> No file was uploaded with this report
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>

--
  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
> Patricia Holben (pholben@greatbridge.com) reports a bug with a severity of 3

> Then when "pg_ctl restart" is executed, the "pg_ctl status" will display:
>     pg_ctl: postmaster is running (pid: 14635)
>     Command line was:
>     /usr/bin/postmaster '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data'
>
> A subsequent "pg_ctl restart" causes the next "pg_ctl status" to display:
>     pg_ctl: postmaster is running (pid: 14635)
>     Command line was:
>     /usr/bin/postmaster '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data'

Actually, only the -D option is repeated.  The patch below might fix it,
but please check all the other start and restart modes, too (with/without
-o, especially).

--- pg_ctl.sh   Sat Apr 21 13:23:58 2001
+++ pg_ctl.sh.new       Wed Jun 20 17:03:07 2001
@@ -316,7 +316,7 @@
         eval set X "$POSTOPTS"; shift
     fi

-    set X -D "$PGDATA" ${1+"$@"}; shift
+    export PGDATA

     if [ -n "$logfile" ]; then
         "$po_path" "$@" </dev/null >>$logfile 2>&1 &

--
Peter Eisentraut   peter_e@gmx.net   http://funkturm.homeip.net/~peter
I have applied the following patch based on Peter's fix.  The forced -D
in the old code clearly was error-prone.  This should fix the reported
problem.


> > Patricia Holben (pholben@greatbridge.com) reports a bug with a severity of 3
>
> > Then when "pg_ctl restart" is executed, the "pg_ctl status" will display:
> >     pg_ctl: postmaster is running (pid: 14635)
> >     Command line was:
> >     /usr/bin/postmaster '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data'
> >
> > A subsequent "pg_ctl restart" causes the next "pg_ctl status" to display:
> >     pg_ctl: postmaster is running (pid: 14635)
> >     Command line was:
> >     /usr/bin/postmaster '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data' '-D' '/var/lib/pgsql/data'
>
> Actually, only the -D option is repeated.  The patch below might fix it,
> but please check all the other start and restart modes, too (with/without
> -o, especially).
>
> --- pg_ctl.sh   Sat Apr 21 13:23:58 2001
> +++ pg_ctl.sh.new       Wed Jun 20 17:03:07 2001
> @@ -316,7 +316,7 @@
>          eval set X "$POSTOPTS"; shift
>      fi
>
> -    set X -D "$PGDATA" ${1+"$@"}; shift
> +    export PGDATA
>
>      if [ -n "$logfile" ]; then
>          "$po_path" "$@" </dev/null >>$logfile 2>&1 &
>
> --
> Peter Eisentraut   peter_e@gmx.net   http://funkturm.homeip.net/~peter
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>

--
  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
Index: src/bin/pg_ctl/pg_ctl.sh
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/bin/pg_ctl/pg_ctl.sh,v
retrieving revision 1.20
diff -c -r1.20 pg_ctl.sh
*** src/bin/pg_ctl/pg_ctl.sh    2001/04/21 11:23:58    1.20
--- src/bin/pg_ctl/pg_ctl.sh    2001/07/11 04:54:31
***************
*** 316,322 ****
          eval set X "$POSTOPTS"; shift
      fi

!     set X -D "$PGDATA" ${1+"$@"}; shift

      if [ -n "$logfile" ]; then
          "$po_path" "$@" </dev/null >>$logfile 2>&1 &
--- 316,323 ----
          eval set X "$POSTOPTS"; shift
      fi

!     # pass environment into new postmaster
!     export PGDATA

      if [ -n "$logfile" ]; then
          "$po_path" "$@" </dev/null >>$logfile 2>&1 &