From c25b4dbf03a9b9e5bf79f2f7e2bcdcd9dc6263b9 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sat, 25 Nov 2000 17:17:30 +0000
Subject: [PATCH] Update pg_ctl ref page, help output, messages.  Some repair
 to work better with current postmaster.

---
 doc/src/sgml/ref/pg_ctl-ref.sgml | 345 ++++++++++++-------------------
 src/bin/pg_ctl/Makefile          |   6 +-
 src/bin/pg_ctl/pg_ctl.sh         | 159 ++++++++------
 3 files changed, 237 insertions(+), 273 deletions(-)

diff --git a/doc/src/sgml/ref/pg_ctl-ref.sgml b/doc/src/sgml/ref/pg_ctl-ref.sgml
index 4fc37312eaf..8d7e3eac139 100644
--- a/doc/src/sgml/ref/pg_ctl-ref.sgml
+++ b/doc/src/sgml/ref/pg_ctl-ref.sgml
@@ -1,42 +1,76 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_ctl-ref.sgml,v 1.3 2000/10/12 22:13:21 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_ctl-ref.sgml,v 1.4 2000/11/25 17:17:30 petere Exp $
 Postgres documentation
 -->
 
 <refentry id="app-pg-ctl">
+ <docinfo>
+  <date>2000-11-25</date>
+ </docinfo>
+
  <refmeta>
-  <refentrytitle id="app-pg-ctl-title">
-   <application>pg_ctl</application>
-  </refentrytitle>
+  <refentrytitle id="app-pg-ctl-title"><application>pg_ctl</application></refentrytitle>
+  <manvolnum>1</manvolnum>
   <refmiscinfo>Application</refmiscinfo>
  </refmeta>
 
  <refnamediv>
-  <refname>
-   <application>pg_ctl</application>
-  </refname>
-  <refpurpose>
-   Starts, stops, and restarts postmaster
-  </refpurpose>
+  <refname>pg_ctl</refname>
+  <refpurpose>Starts, stops, or restarts postmaster</refpurpose>
  </refnamediv>
 
  <refsynopsisdiv>
-  <refsynopsisdivinfo>
-   <date>2000-04-05</date>
-  </refsynopsisdivinfo>
-
-  <synopsis>
-pg_ctl [-w] [-D <replaceable class="parameter">datadir</replaceable>][-p <replaceable class="parameter">path</replaceable>] [-o "<replaceable class="parameter">options</replaceable>"] start
-pg_ctl [-w] [-D <replaceable class="parameter">datadir</replaceable>] [-m [s[mart]|f[ast]|i[mmediate]]] stop
-pg_ctl [-w] [-D <replaceable class="parameter">datadir</replaceable>] [-m [s[mart]|f[ast]|i[mmediate]]
-    [-o "<replaceable class="parameter">options</replaceable>"] restart
-pg_ctl [-D <replaceable class="parameter">datadir</replaceable>] status
-  </synopsis>
-
-  <refsect2 id="R2-APP-PGCTL-1">
-   <title>
-    Inputs
-   </title>
+  <cmdsynopsis>
+   <command>pg_ctl</command>
+   <arg choice="plain">start</arg>
+   <arg>-w</arg>
+   <arg>-D <replaceable>datadir</replaceable></arg>
+   <arg>-p <replaceable>path</replaceable></arg>
+   <arg>-o <replaceable>options</replaceable></arg>
+   <sbr>
+   <command>pg_ctl</command>
+   <arg choice="plain">stop</arg>
+   <arg>-w</arg>
+   <arg>-D <replaceable>datadir</replaceable></arg>
+   <arg>-m
+     <group choice="plain">
+       <arg>s[mart]</arg>
+       <arg>f[ast]</arg>
+       <arg>i[mmediate]</arg>
+     </group>
+   </arg>
+   <sbr>
+   <command>pg_ctl</command>
+   <arg choice="plain">restart</arg>
+   <arg>-w</arg>
+   <arg>-D <replaceable>datadir</replaceable></arg>
+   <arg>-m
+     <group choice="plain">
+       <arg>s[mart]</arg>
+       <arg>f[ast]</arg>
+       <arg>i[mmediate]</arg>
+     </group>
+   </arg>
+   <arg>-o <replaceable>options</replaceable></arg>
+   <sbr>
+   <command>pg_ctl</command>
+   <arg choice="plain">status</arg>
+   <arg>-D <replaceable>datadir</replaceable></arg>
+  </cmdsynopsis>
+ </refsynopsisdiv>
+
+
+ <refsect1 id="app-pg-ctl-description">
+  <title>Description</title>
+  <para>
+   <application>pg_ctl</application> is a utility for starting,
+   stopping, or restarting the <xref linkend="app-postmaster"
+   endterm="app-postmaster-title">, or displaying the status of a
+   running postmaster.
+  </para>
+
+  <refsect2 id="app-pg-ctl-options">
+   <title>Options</title>
    <para>
 
     <variablelist>
@@ -44,8 +78,9 @@ pg_ctl [-D <replaceable class="parameter">datadir</replaceable>] status
       <term>-w</term>
       <listitem>
        <para>
-	Wait for the database server to come up, by
-	watching for creation of the pid file (PGDATA/postmaster.pid).
+	Wait for the database server to come up, by watching for
+	creation of the pid file
+	(<filename><replaceable>PGDATA</replaceable>/postmaster.pid</filename>).
 	Times out after 60 seconds.
        </para>
       </listitem>
@@ -55,7 +90,9 @@ pg_ctl [-D <replaceable class="parameter">datadir</replaceable>] status
       <term>-D <replaceable class="parameter">datadir</replaceable></term>
       <listitem>
        <para>
-	Specifies the database location for this database installation.
+	Specifies the file system location of the database files.  If
+	this is omitted, the environment variable
+	<envar>PGDATA</envar> is used.
        </para>
       </listitem>
      </varlistentry>
@@ -64,13 +101,18 @@ pg_ctl [-D <replaceable class="parameter">datadir</replaceable>] status
       <term>-p <replaceable class="parameter">path</replaceable></term>
       <listitem>
        <para>
-	Specifies the path to the postmaster image.
+	Specifies the location of the <filename>postmaster</filename>
+	executable.  By default the postmaster is taken from the same
+	directory as pg_ctl, or failing that, the hard-wired
+	installation directory.  It is not necessary to use this
+	option unless you are doing something unusual and get errors
+	that the postmaster was not found.
        </para>
       </listitem>
      </varlistentry>
 
      <varlistentry>
-      <term>-o "<replaceable class="parameter">options</replaceable>"</term>
+      <term>-o <replaceable class="parameter">options</replaceable></term>
       <listitem>
        <para>
         Specifies options to be passed directly to
@@ -95,8 +137,8 @@ pg_ctl [-D <replaceable class="parameter">datadir</replaceable>] status
 	  <term>s</term>
 	  <listitem>
 	   <para>
-	    smart mode waits for all
-	    the clients to logout. This is the default.
+	    Smart mode waits for all the clients to disconnect. This
+	    is the default.
 	   </para>
 	  </listitem>
 	 </varlistentry>
@@ -106,8 +148,8 @@ pg_ctl [-D <replaceable class="parameter">datadir</replaceable>] status
 	  <term>f</term>
 	  <listitem>
 	   <para>
-	    Fast mode sends SIGTERM to the backends; that means
-	    active transactions get rolled back.
+	    Fast mode does not wait for clients to disconnect.  All
+	    active transactions will be rolled back.
 	   </para>
 	  </listitem>
 	 </varlistentry>
@@ -117,9 +159,8 @@ pg_ctl [-D <replaceable class="parameter">datadir</replaceable>] status
 	  <term>i</term>
 	  <listitem>
 	   <para>
-	    Immediate mode sends SIGUSR1
-	    to the backends and lets them abort. In this case, database recovery
-	    will be necessary on the next start-up.
+	    Immediate mode will abort without complete shutdown.  This
+	    will lead to a recovery run on restart.
 	   </para>
 	  </listitem>
 	 </varlistentry>
@@ -150,8 +191,8 @@ pg_ctl [-D <replaceable class="parameter">datadir</replaceable>] status
       <term>restart</term>
       <listitem>
        <para>
-	Restart the <application>postmaster</application>, performing
-	a stop/start sequence.
+	Stop the <application>postmaster</application>, if one is running,
+	and then start it again.
        </para>
       </listitem>
      </varlistentry>
@@ -168,229 +209,107 @@ pg_ctl [-D <replaceable class="parameter">datadir</replaceable>] status
    </para>
   </refsect2>
 
-  <refsect2 id="R2-APP-PGCTL-2">
-   <refsect2info>
-    <date>1999-11-07</date>
-   </refsect2info>
-   <title>
-    Outputs
-   </title>
-   <para>
-    <variablelist>
-     <varlistentry>
-      <term><computeroutput>pg_ctl: postmaster is <replaceable>state</replaceable> (pid: <replaceable>#</replaceable>)</computeroutput></term>
-      <listitem>
-       <para>
-	Postmaster status.
-       </para>
-      </listitem>
-     </varlistentry>
-    </variablelist>
+  <refsect2>
+   <title>Files</title>
 
-    If there is an error condition, the backend error message will be displayed.
+   <para>
+    If the file <filename>postmaster.opts.default</filename> exists in
+    the data directory, the contents of the file will be passed as
+    options to the <application>postmaster</application>, unless
+    overridden by the <option>-o</option> option.
    </para>
   </refsect2>
- </refsynopsisdiv>
 
- <refsect1 id="R1-APP-PGCTL-1">
-  <title>
-   Description
-  </title>
-  <para>
-   <application>pg_ctl</application> is a utility for starting,
-   stopping or restarting <application>postmaster</application>.
-  </para>
  </refsect1>
 
+
  <refsect1 id="R1-APP-PGCTL-2">
-  <title>
-   Usage
-  </title>
+  <title>Usage</title>
 
   <refsect2 id="R2-APP-PGCTL-3">
-   <title>
-    Starting postmaster
-   </title>
+   <title>Starting the postmaster</title>
 
    <para>
     To start up <application>postmaster</application>:
-
-    <programlisting>
-$ pg_ctl start
-    </programlisting>
+<screen>
+<prompt>$</prompt> <userinput>pg_ctl start</userinput>
+</screen>
    </para>
 
    <para>
-    If -w is supplied, pg_ctl waits for the database server to come up, by
-    watching for creation of the pid file (PGDATA/postmaster.pid), for up
-    to 60 seconds.
-   </para>
-
-   <para>
-    Parameters to invoke <application>postmaster</application> are
-    taken from the following sources:
-
-    <itemizedlist>
-     <listitem>
-      <para>
-       Path to postmaster: found in the command search path.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Database directory: <envar>PGDATA</envar> environment variable.
-      </para>
-     </listitem>
-
-     <listitem>
-      <para>
-       Other parameters:
-       <filename><envar>PGDATA</envar>/postmaster.opts.default</filename>.
-      </para>
-     </listitem>
-    </itemizedlist>
-   </para>
-
-   <para>
-    <filename>postmaster.opts.default</filename> contains parameters
-    for <application>postmaster</application>.
-   </para>
-
-   <para>
-    Note that <filename>postmaster.opts.default</filename> is
-    installed by <application>initdb</application> from
-    <filename>lib/postmaster.opts.default.sample</filename>
-    under the <productname>Postgres</productname> installation
-    directory (<filename>lib/postmaster.opts.default.sample</filename>
-    is copied from
-    <filename>src/bin/pg_ctl/postmaster.opts.default.sample</filename>
-    while installing <productname>Postgres</productname>).
-   </para>
-
-   <para>
-    To override the default parameters you can use <option>-D</option>,
-    <option>-p</option> and <option>-o</option> options.
-   </para>
-
-   <para>
-    An example of starting the
-    <application>postmaster</application>, blocking until
-    postmaster comes up is:
-    <programlisting>
-$ pg_ctl -w start
-    </programlisting>
-   </para>
-
-   <para>
-    To specify the <application>postmaster</application> binary path,
-    try:
-
-    <programlisting>
-$ pg_ctl -p /usr/local/pgsql/bin/postmaster start
-    </programlisting>
+    An example of starting the <application>postmaster</application>,
+    blocking until postmaster comes up is:
+<screen>
+<prompt>$</prompt> <userinput>pg_ctl -w start</userinput>
+</screen>
    </para>
 
    <para>
     For a <application>postmaster</application> using port 5433, and
     running without <function>fsync</function>, use:
-
-    <programlisting>
-$ pg_ctl -o "-o -F -p 5433" start
-    </programlisting>
+<screen>
+<prompt>$</prompt> <userinput>pg_ctl -o "-F -p 5433" start</userinput>
+</screen>
    </para>
   </refsect2>
 
   <refsect2 id="R2-APP-PGCTL-4">
-   <title>
-    Stopping postmaster
-   </title>
+   <title>Stopping the postmaster</title>
    <para>
-
-    <programlisting>
-$ pg_ctl stop
-    </programlisting>
-
+<screen>
+<prompt>$</prompt> <userinput>pg_ctl stop</userinput>
+</screen>
     stops postmaster. Using the <option>-m</option> switch allows one
     to control <emphasis>how</emphasis> the backend shuts down.
-    <option>-w</option>
-    waits for postmaster to shut down.
-    <option>-m</option> specifies the shut down mode.
+    <option>-w</option> waits for postmaster to shut down.
    </para>
   </refsect2>
 
   <refsect2 id="R2-APP-PGCTL-5">
-   <title>
-    Restarting postmaster
-   </title>
+   <title>Restarting the postmaster</title>
 
    <para>
     This is almost equivalent to stopping the
-    <application>postmaster</application> then starting it
-    again except that the parameters used before stopping
-    it would be used too. This is done by saving them in
-    $<envar>PGDATA</envar>/postmaster.opts file.
-    <option>-w</option>, <option>-D</option>, <option>-m</option>,
-    <option>-fast</option>, <option>-immediate</option> and
-    <option>-o</option> 
-    can also be used in the restarting mode and they have the same meanings as
-    described above.
-   </para>
-
-   <para>
-    To restart <application>postmaster</application> in the simplest
-    form:
-
-    <programlisting>
-$ pg_ctl restart
-    </programlisting>
+    <application>postmaster</application> then starting it again
+    except that pg_ctl saves and reuses the command line options that
+    were passed to the previously running instance.  To restart
+    <application>postmaster</application> in the simplest form:
+<screen>
+<prompt>$</prompt> <userinput>pg_ctl restart</userinput>
+</screen>
    </para>
 
    <para>
     To restart <application>postmaster</application>,
     waiting for it to shut down and to come up:
-
-    <programlisting>
-$ pg_ctl -w restart
-    </programlisting>
+<screen>
+<prompt>$</prompt> <userinput>pg_ctl -w restart</userinput>
+</screen>
    </para>
 
    <para>
     To restart using port 5433 and disabling fsync after restarting:
-
-    <programlisting>
-$ pg_ctl -o "-o -F -p 5433" restart
-    </programlisting>
+<screen>
+<prompt>$</prompt> <userinput>pg_ctl -o "-F -p 5433" restart</userinput>
+</screen>
    </para>
   </refsect2>
 
   <refsect2 id="R2-APP-PGCTL-6">
-   <title>
-    postmaster status
-   </title>
+   <title>Showing postmaster status</title>
 
    <para>
-    To get status information from postmaster:
-
-    <programlisting>
-$ pg_ctl status
-    </programlisting>
-   </para>
-
-   <para>
-    Here is a sample output from <application>pg_ctl</application>:
-
-    <programlisting>
+    Here is a sample status output from
+    <application>pg_ctl</application>:
+<screen>
+<prompt>$</prompt> <userinput>pg_ctl status</userinput>
+<computeroutput>
 pg_ctl: postmaster is running (pid: 13718)
-options are:
-/usr/local/src/pgsql/current/bin/postmaster
--p 5433
--D /usr/local/src/pgsql/current/data
--B 64
--b /usr/local/src/pgsql/current/bin/postgres
--N 32
--o '-F'
-    </programlisting>
+Command line was:
+/usr/local/pgsql/bin/postmaster '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'
+</computeroutput>
+</screen>
+    This is the command line that would be invoked in restart mode.
    </para>
   </refsect2>
  </refsect1>
diff --git a/src/bin/pg_ctl/Makefile b/src/bin/pg_ctl/Makefile
index 716d93cea2b..fb4234dcc84 100644
--- a/src/bin/pg_ctl/Makefile
+++ b/src/bin/pg_ctl/Makefile
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 1999, PostgreSQL Global Development Group
 #
-# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Makefile,v 1.9 2000/09/17 13:02:35 petere Exp $
+# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Makefile,v 1.10 2000/11/25 17:17:30 petere Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -15,7 +15,9 @@ include $(top_builddir)/src/Makefile.global
 all: pg_ctl
 
 pg_ctl: pg_ctl.sh
-	cp $< $@
+	sed -e 's/@VERSION@/$(VERSION)/g' \
+	    -e 's,@bindir@,$(bindir),g' \
+	  $< >$@
 	chmod a+x $@
 
 install: all installdirs
diff --git a/src/bin/pg_ctl/pg_ctl.sh b/src/bin/pg_ctl/pg_ctl.sh
index 2c98f41ecdb..aea4a986909 100755
--- a/src/bin/pg_ctl/pg_ctl.sh
+++ b/src/bin/pg_ctl/pg_ctl.sh
@@ -8,14 +8,50 @@
 #
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.13 2000/10/24 19:11:15 petere Exp $
+#    $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.14 2000/11/25 17:17:30 petere Exp $
 #
 #-------------------------------------------------------------------------
+
 CMDNAME=`basename $0`
 
+help="\
+$CMDNAME is a utility to start, stop, restart, and report the status
+of a PostgreSQL server.
+
+Usage:
+  $CMDNAME start   [-w] [-D DATADIR] [-p PATH-TO-POSTMASTER] [-o \"OPTIONS\"]
+  $CMDNAME stop    [-w] [-D DATADIR] [-m SHUTDOWN-MODE]
+  $CMDNAME restart [-w] [-D DATADIR] [-m SHUTDOWN-MODE] [-o \"OPTIONS\"]
+  $CMDNAME status  [-D DATADIR]
+
+Options:
+  -D DATADIR            Location of the database storage area
+  -m SHUTDOWN-MODE      May be 'smart', 'fast', or 'immediate'
+  -o OPTIONS            Command line options to pass to the postmaster
+                        (PostgreSQL server executable)
+  -p PATH-TO-POSTMASTER Normally not necessary
+  -w                    Wait until operation completes
+
+If the -D option is omitted, the environment variable PGDATA is used.
+
+Shutdown modes are:
+  smart                 Quit after all clients have disconnected
+  fast                  Quit directly, with proper shutdown
+  immediate             Quit without complete shutdown; will lead
+                        to recovery run on restart
+
+Report bugs to <pgsql-bugs@postgresql.org>."
+
+advice="\
+Try '$CMDNAME --help' for more information."
+
+
+# Placed here during build
+bindir='@bindir@'
+VERSION='@VERSION@'
+
 # Check for echo -n vs echo \c
 
-ECHO=echo
 if echo '\c' | grep -s c >/dev/null 2>&1
 then
     ECHO_N="echo -n"
@@ -28,38 +64,35 @@ fi
 #
 # Find out where we're located
 #
-if $ECHO "$0" | grep '/' > /dev/null 2>&1 
+if echo "$0" | grep '/' > /dev/null 2>&1 
 then
         # explicit dir name given
-        PGPATH=`$ECHO $0 | sed 's,/[^/]*$,,'`       # (dirname command is not portable)
+        self_path=`echo $0 | sed 's,/[^/]*$,,'`       # (dirname command is not portable)
 else
         # look for it in PATH ('which' command is not portable)
-        for dir in `$ECHO "$PATH" | sed 's/:/ /g'`
+        for dir in `echo "$PATH" | sed 's/:/ /g'`
 	do
                 # empty entry in path means current dir
                 [ -z "$dir" ] && dir='.'
                 if [ -f "$dir/$CMDNAME" ]
 		then
-                        PGPATH="$dir"
+                        self_path="$dir"
                         break
                 fi
         done
 fi
 
 # Check if needed programs actually exist in path
-for prog in postmaster psql
-do
-        if [ ! -x "$PGPATH/$prog" ]
-	then
-                $ECHO "The program $prog needed by $CMDNAME could not be found. It was"
-                $ECHO "expected at:"
-                $ECHO "    $PGPATH/$prog"
-                $ECHO "If this is not the correct directory, please start $CMDNAME"
-                $ECHO "with a full search path. Otherwise make sure that the program"
-                $ECHO "was installed successfully."
-                exit 1
-        fi
-done
+if [ -x "$self_path/postmaster" ] && [ -x "$self_path/psql" ]; then
+    PGPATH=$self_path
+elif [ -x "$bindir/postmaster" ] && [ -x "$bindir/psql" ]; then
+    PGPATH=$bindir
+else
+    echo "The programs 'postmaster' and 'psql' are needed by $CMDNAME but" 1>&2
+    echo "were not found in the directory '$bindir'." 1>&2
+    echo "Check your installation." 1>&2
+    exit 1
+fi
 
 po_path=$PGPATH/postmaster
 
@@ -69,14 +102,17 @@ sig="-TERM"
 while [ "$#" -gt 0 ]
 do
     case $1 in
-	-h|--help)
-	usage=1
-	break
-	;;
+	-h|--help|-\?)
+	    echo "$help"
+	    exit 0
+	    ;;
+        -V|--version)
+	    echo "pg_ctl (PostgreSQL) $VERSION"
+	    exit 0
+	    ;;
 	-D)
 	    shift
 	    PGDATA="$1"
-	    export PGDATA
 	    ;;
 	-p)
 	    shift
@@ -94,8 +130,9 @@ do
 		    sig="-QUIT"
 		    ;;
 	    *)
-		$ECHO "$CMDNAME: Wrong shutdown mode $sigopt"
-		usage=1
+		echo "$CMDNAME: wrong shutdown mode: $1" 1>&2
+		echo "$advice" 1>&2
+		exit 1
 		;;
 	    esac
 	    ;;
@@ -106,6 +143,11 @@ do
 	    shift
 	    POSTOPTS="$1"
 	    ;;
+	-*)
+	    echo "$CMDNAME: invalid option: $1" 1>&2
+	    echo "$advice" 1>&2
+	    exit 1
+	    ;;
 	start)
 	    op="start"
 	    ;;
@@ -119,23 +161,23 @@ do
 	    op="status"
 	    ;;
 	*)
-	    usage=1
-	    break
+	    echo "$CMDNAME: invalid operation mode: $1" 1>&2
+	    echo "$advice" 1>&2
+	    exit 1
 	    ;;
     esac
     shift
 done
 
-if [ "$usage" = 1 -o "$op" = "" ];then
-    $ECHO "Usage: $CMDNAME [-w][-D database_dir][-p path_to_postmaster][-o \"postmaster_opts\"] start"
-    $ECHO "       $CMDNAME [-w][-D database_dir][-m s[mart]|f[ast]|i[mmediate]] stop"
-    $ECHO "       $CMDNAME [-w][-D database_dir][-m s[mart]|f[ast]|i[mmediate]][-o \"postmaster_opts\"] restart"
-    $ECHO "       $CMDNAME [-D database_dir] status"
+if [ x"$op" = x"" ];then
+    echo "$CMDNAME: no operation mode specified" 1>&2
+    echo "$advice" 1>&2
     exit 1
 fi
 
 if [ -z "$PGDATA" ];then
-    $ECHO "$CMDNAME: No database directory or environment variable \$PGDATA is specified"
+    echo "$CMDNAME: no database directory or environment variable \$PGDATA is specified" 1>&2
+    echo "$advice" 1>&2
     exit 1
 fi
 
@@ -148,15 +190,15 @@ if [ $op = "status" ];then
 	PID=`cat $PIDFILE`
 	if [ $PID -lt 0 ];then
 	    PID=`expr 0 - $PID`
-	    $ECHO "$CMDNAME: postgres is running (pid: $PID)"
+	    echo "$CMDNAME: postgres is running (pid: $PID)"
 	else
-	    $ECHO "$CMDNAME: postmaster is running (pid: $PID)"
-	    $ECHO "options are:"
-	    $ECHO "`cat $POSTOPTSFILE`"
+	    echo "$CMDNAME: postmaster is running (pid: $PID)"
+	    echo "Command line was:"
+	    echo "`cat $POSTOPTSFILE`"
 	fi
 	exit 0
     else
-	$ECHO "$CMDNAME: postmaster or postgres is not running"
+	echo "$CMDNAME: postmaster or postgres is not running"
 	exit 1
     fi
 fi
@@ -166,8 +208,8 @@ if [ $op = "stop" -o $op = "restart" ];then
 	PID=`cat $PIDFILE`
 	if [ $PID -lt 0 ];then
 	    PID=`expr 0 - $PID`
-	    $ECHO "$CMDNAME: Cannot restart postmaster. postgres is running (pid: $PID)"
-	    $ECHO "Please terminate postgres and try again"
+	    echo "$CMDNAME: Cannot restart postmaster. postgres is running (pid: $PID)"
+	    echo "Please terminate postgres and try again"
 	    exit 1
 	fi
 
@@ -176,7 +218,7 @@ if [ $op = "stop" -o $op = "restart" ];then
 	# wait for postmaster shutting down
 	if [ "$wait" = 1 -o $op = "restart" ];then
 	    cnt=0
-	    $ECHO_N "Waiting for postmaster shutting down.."$ECHO_C
+	    $ECHO_N "Waiting for postmaster to shut down.."$ECHO_C
 
 	    while :
 	    do
@@ -184,7 +226,7 @@ if [ $op = "stop" -o $op = "restart" ];then
 		    $ECHO_N "."$ECHO_C
 		    cnt=`expr $cnt + 1`
 		    if [ $cnt -gt 60 ];then
-			$ECHO "$CMDNAME: postmaster does not shut down"
+			echo "$CMDNAME: postmaster does not shut down"
 			exit 1
 		    fi
 		else
@@ -192,16 +234,16 @@ if [ $op = "stop" -o $op = "restart" ];then
 		fi
 		sleep 1
 	    done
-	    $ECHO "done."
+	    echo "done"
 	fi
 
-	$ECHO "postmaster successfully shut down."
+	echo "postmaster successfully shut down"
 
     else
-	$ECHO "$CMDNAME: Can't find $PIDFILE."
-	$ECHO "Is postmaster running?"
+	echo "$CMDNAME: cannot find $PIDFILE"
+	echo "Is postmaster running?"
 	if [ $op = "restart" ];then
-	    $ECHO "Anyway, I'm going to start up postmaster..."
+	    echo "starting postmaster anyway..."
 	else
 	    exit 1
 	fi
@@ -210,7 +252,7 @@ fi
 
 if [ $op = "start" -o $op = "restart" ];then
     if [ -f $PIDFILE ];then
-	$ECHO "$CMDNAME: It seems another postmaster is running. Try to start postmaster anyway."
+	echo "$CMDNAME: It seems another postmaster is running. Trying to start postmaster anyway."
 	pid=`cat $PIDFILE`
     fi
 
@@ -219,21 +261,22 @@ if [ $op = "start" -o $op = "restart" ];then
 	if [ $op = "start" ];then
 	    # if we are in start mode, then look for postmaster.opts.default
 	    if [ -f $DEFPOSTOPTS ];then
-		eval "$po_path `cat $DEFPOSTOPTS`" &
+		$po_path -D $PGDATA `cat $DEFPOSTOPTS` &
 	    else
-		$po_path &
+		$po_path -D $PGDATA &
 	    fi
 	else
 	    # if we are in restart mode, then look postmaster.opts
-	    eval `cat $POSTOPTSFILE` &
+	    `cat $POSTOPTSFILE` &
 	fi
     else
-	eval "$po_path $POSTOPTS " &
+    # -o given
+	$po_path -D $PGDATA $POSTOPTS &
     fi
 
     if [ -f $PIDFILE ];then
 	if [ "`cat $PIDFILE`" = "$pid" ];then
-	    $ECHO "$CMDNAME: Cannot start postmaster. Is another postmaster is running?"
+	    echo "$CMDNAME: Cannot start postmaster. Is another postmaster is running?"
 	    exit 1
         fi
     fi
@@ -241,7 +284,7 @@ if [ $op = "start" -o $op = "restart" ];then
     # wait for postmaster starting up
     if [ "$wait" = 1 ];then
 	cnt=0
-	$ECHO_N "Waiting for postmaster starting up.."$ECHO_C
+	$ECHO_N "Waiting for postmaster to start up.."$ECHO_C
 	while :
 	do
 	    if psql -l >/dev/null 2>&1
@@ -251,16 +294,16 @@ if [ $op = "start" -o $op = "restart" ];then
 		$ECHO_N "."$ECHO_C
 		cnt=`expr $cnt + 1`
 		if [ $cnt -gt 60 ];then
-		    $ECHO "$CMDNAME: postmaster does not start up"
+		    echo "$CMDNAME: postmaster does not start up"
 		    exit 1
 		fi
 		sleep 1
 	    fi
 	done
-	$ECHO "done."
+	echo "done"
     fi
 
-    $ECHO "postmaster successfully started up."
+    echo "postmaster successfully started up"
 fi
 
 exit 0
-- 
GitLab