]> granicus.if.org Git - postgresql/commitdiff
Update pg_ctl ref page, help output, messages. Some repair to work better
authorPeter Eisentraut <peter_e@gmx.net>
Sat, 25 Nov 2000 17:17:30 +0000 (17:17 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Sat, 25 Nov 2000 17:17:30 +0000 (17:17 +0000)
with current postmaster.

doc/src/sgml/ref/pg_ctl-ref.sgml
src/bin/pg_ctl/Makefile
src/bin/pg_ctl/pg_ctl.sh

index 4fc37312eaf5f4ebfdcccf11a085fd21501480da..8d7e3eac139fe8161936cd2deeddb5198fda22d0 100644 (file)
@@ -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>
index 716d93cea2b170856b5ae603dd40c28e142701d2..fb4234dcc84b695dd1ca8b26fddfc05a46adb2d0 100644 (file)
@@ -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
index 2c98f41ecdb81fc811bdfb29ebb628d1729cd206..aea4a98690977fe925c0e584038e5cdb28863cbb 100755 (executable)
@@ -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