pg_ctl restart bug
"pg_ctl restart" fails if anything is quoted in postmaster.opts.
$ pg_ctl restart
Smart Shutdown request at Fri Apr 20 10:11:38 2001
postmaster successfully shut down
postmaster successfully started
/usr/bin/postmaster: invalid argument -- '-D'
Try '/usr/bin/postmaster --help' for more information.
$ cat postmaster.opts
/usr/bin/postmaster '-D' '/var/lib/pgsql/data'
It appears that the script doesn't cause the parameters in
postmaster.opts to get dequoted.
I think this is the source of the problem.
Joe
--
Joe Mitchell
Knowledge Engineer
Great Bridge, LLC
www.greatbridge.com
jmitchell@greatbridge.com writes:
"pg_ctl restart" fails if anything is quoted in postmaster.opts.
$ pg_ctl restart
Smart Shutdown request at Fri Apr 20 10:11:38 2001
postmaster successfully shut down
postmaster successfully started
/usr/bin/postmaster: invalid argument -- '-D'
Try '/usr/bin/postmaster --help' for more information.$ cat postmaster.opts
/usr/bin/postmaster '-D' '/var/lib/pgsql/data'
Unless someone can show me a way to extract the command line options out
of the opts file while preserving whitespace in them, I'm going to
eliminate the quotes being put out.
--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
Peter Eisentraut <peter_e@gmx.net> writes:
Unless someone can show me a way to extract the command line options out
of the opts file while preserving whitespace in them, I'm going to
eliminate the quotes being put out.
Won't work if any of the options contain whitespace, which is quite
probable. For example, my postmaster.opts currently contains
/home/postgres/testversion/bin/postmaster '-i' '-o' '-F -S 5120'
Removing the quotes will certainly break this. We need to find a
smarter way for the script to parse the file contents.
regards, tom lane
pg_ctl restart works fine with this patch, but I'm not sure whether it
breaks useful cases for the other paths:
***************
*** 323,335 ****
shift
po_path=$1
shift
! POSTOPTS=$@
fi
else # -o given
POSTOPTS="-D $PGDATA $POSTOPTS"
fi
! eval '$po_path' '$POSTOPTS' $logopt '&'
# if had an old lockfile, check to see if we were able to start
if [ -n "$oldpid" ];then
--- 323,335 ----
shift
po_path=$1
shift
! POSTOPTS="$@"
fi
else # -o given
POSTOPTS="-D $PGDATA $POSTOPTS"
fi
! eval '$po_path' $POSTOPTS $logopt '&'
# if had an old lockfile, check to see if we were able to start
if [ -n "$oldpid" ];then
regards, tom lane
$ cat postmaster.opts
/usr/bin/postmaster '-D' '/var/lib/pgsql/data'Unless someone can show me a way to extract the command line options out
of the opts file while preserving whitespace in them, I'm going to
eliminate the quotes being put out.
You know, I looked at that pg_ctl script and couldn't figure out how it
properly passed all the options to the postmaster. Guess it doesn't. :-)
--
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
I can assure you that $@ is never the way to go, always use "$@". Not
sure about the second change.
pg_ctl restart works fine with this patch, but I'm not sure whether it
breaks useful cases for the other paths:***************
*** 323,335 ****
shift
po_path=$1
shift
! POSTOPTS=$@
fi
else # -o given
POSTOPTS="-D $PGDATA $POSTOPTS"
fi! eval '$po_path' '$POSTOPTS' $logopt '&'
# if had an old lockfile, check to see if we were able to start if [ -n "$oldpid" ];then --- 323,335 ---- shift po_path=$1 shift ! POSTOPTS="$@" fi else # -o given POSTOPTS="-D $PGDATA $POSTOPTS" fi! eval '$po_path' $POSTOPTS $logopt '&'
# if had an old lockfile, check to see if we were able to start
if [ -n "$oldpid" ];thenregards, tom lane
---------------------------(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
Tom Lane writes:
pg_ctl restart works fine with this patch, but I'm not sure whether it
breaks useful cases for the other paths:
Looks good.
--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
Tom Lane writes:
! eval '$po_path' '$POSTOPTS' $logopt '&'
--- 323,335 ----
! eval '$po_path' $POSTOPTS $logopt '&'
Actually, I think it needs to be "$POSTOPTS" (double quoted), to preserve
whitespace.
peter ~$ opts="-N -o '-F -S'"
peter ~$ eval ./argprint $opts
-N
-o
-F -S
peter ~$ eval ./argprint "$opts"
-N
-o
-F -S
peter ~$ cat argprint
#!/bin/sh
for arg do
echo "$arg"
done
--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter