diff --git a/doc/src/sgml/ref/pg_ctl-ref.sgml b/doc/src/sgml/ref/pg_ctl-ref.sgml
index 1ce8cfc9f20..74f098b9c5e 100644
--- a/doc/src/sgml/ref/pg_ctl-ref.sgml
+++ b/doc/src/sgml/ref/pg_ctl-ref.sgml
@@ -1,5 +1,5 @@
@@ -73,22 +73,21 @@ PostgreSQL documentation
PostgreSQL backend server, or displaying
the status of a running postmaster. Although the postmaster can be
started manually, pg_ctl encapsulates
- tasks such as redirecting log output, properly detaching from the
- terminal and process group, and it provides convenient options for
+ tasks such as redirecting log output and properly detaching from the
+ terminal and process group. It also provides convenient options for
controlled shutdown.
In mode, a new postmaster is launched. The
- server is started in the background, the standard input attached to
+ server is started in the background, and standard input is attached to
/dev/null. The standard output and standard
- error are either appended to a log file, if the
- option is used, or are redirected to
- pg_ctl's standard output (not standard
- error). If no log file is chosen, the standard output of
- pg_ctl should be redirected to a file or
- piped to another process, for example a log rotating program,
- otherwise the postmaster will write its output the the controlling
+ error are either appended to a log file (if the
+ option is used), or redirected to pg_ctl's
+ standard output (not standard error). If no log file is chosen, the
+ standard output of pg_ctl should be redirected
+ to a file or piped to another process, for example a log rotating program,
+ otherwise the postmaster will write its output to the controlling
terminal (from the background) and will not leave the shell's
process group.
@@ -102,8 +101,8 @@ PostgreSQL documentation
not wait for clients to disconnect. All active transactions are
rolled back and clients are forcibly disconnected, then the
database is shut down. Immediate mode will abort
- all server processes without clean shutdown. This will lead to a recovery
- run on restart.
+ all server processes without a clean shutdown. This will lead to
+ a recovery run on restart.
@@ -121,9 +120,9 @@ PostgreSQL documentation
- mode checks whether a postmaster is running
- and if so displays the PID and the command line
- options that were used to invoke it.
+ mode checks whether a postmaster is running.
+ If it is, the PID and the command line
+ options that were used to invoke it are displayed.
@@ -188,7 +187,7 @@ PostgreSQL documentation
Specifies the location of the postmaster
executable. By default the postmaster is taken from the same
- directory as pg_ctl>, or failing that, the hard-wired
+ 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.
@@ -210,7 +209,16 @@ PostgreSQL documentation
Wait for the start or shutdown to complete. Times out after
- 60 seconds. This is the default for shutdowns.
+ 60 seconds. This is the default for shutdowns. A successful
+ shutdown is indicated by removal of the PID
+ file. For starting up, a successful psql -l
+ indicates success. pg_ctl will attempt to
+ use the proper port for psql. If the environment variable
+ PGPORT exists, that is used. Otherwise, it will see if a port
+ has been set in the postgresql.conf file.
+ If neither of those is used, it will use the default port that
+ PostgreSQL was compiled with
+ (5432 by default).
@@ -238,7 +246,17 @@ PostgreSQL documentation
- Default data direction location
+ Default data directory location.
+
+
+
+
+
+ PGPORT
+
+
+
+ Default port for (used by the -w option).
@@ -253,12 +271,58 @@ PostgreSQL documentation
Files
-
- If the file postmaster.opts.default exists in
- the data directory, the contents of the file will be passed as
- options to the postmaster, unless
- overridden by the option.
-
+
+
+ postmaster.pid
+
+
+ The existence of this file in the data directory is used to help
+ pg_ctl determine if the server is
+ currently running or not.
+
+
+
+
+
+ postmaster.opts.default
+
+
+ If this file exists in the data directory,
+ pg_ctl (in mode)
+ will pass the contents of the file as options to the
+ postmaster, unless overridden
+ by the option.
+
+
+
+
+
+ postmaster.opts
+
+
+ If this file exists in the data directory,
+ pg_ctl (in mode)
+ will pass the contents of the file as options to the
+ postmaster, unless overridden
+ by the option. The contents of this file
+ are also displayed in mode.
+
+
+
+
+
+ postgresql.conf
+
+
+ This file, located in the data directory, is parsed to
+ find the proper port to send to the
+ psql when the
+ is given in mode.
+
+
+
+
+
@@ -268,7 +332,7 @@ PostgreSQL documentation
Waiting for complete start is not a well-defined operation and may
fail if access control is set up so that a local client cannot
- connect without manual interaction. It should be avoided.
+ connect without manual interaction (e.g. password authentication).
diff --git a/src/bin/pg_ctl/Makefile b/src/bin/pg_ctl/Makefile
index fb4234dcc84..27343f6db6c 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.10 2000/11/25 17:17:30 petere Exp $
+# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Makefile,v 1.11 2003/03/20 05:00:14 momjian Exp $
#
#-------------------------------------------------------------------------
@@ -17,6 +17,7 @@ all: pg_ctl
pg_ctl: pg_ctl.sh
sed -e 's/@VERSION@/$(VERSION)/g' \
-e 's,@bindir@,$(bindir),g' \
+ -e 's,@DEF_PGPORT@,$(DEF_PGPORT),g' \
$< >$@
chmod a+x $@
diff --git a/src/bin/pg_ctl/pg_ctl.sh b/src/bin/pg_ctl/pg_ctl.sh
index 7e7828b1fae..aa5d3ebb5ff 100755
--- a/src/bin/pg_ctl/pg_ctl.sh
+++ b/src/bin/pg_ctl/pg_ctl.sh
@@ -8,7 +8,7 @@
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.31 2003/02/14 22:18:25 momjian Exp $
+# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.32 2003/03/20 05:00:14 momjian Exp $
#
#-------------------------------------------------------------------------
@@ -60,6 +60,7 @@ Try '$CMDNAME --help' for more information."
# Placed here during build
bindir='@bindir@'
VERSION='@VERSION@'
+DEF_PGPORT='@DEF_PGPORT@'
# protect the log file
umask 077
@@ -240,6 +241,7 @@ fi
DEFPOSTOPTS=$PGDATA/postmaster.opts.default
POSTOPTSFILE=$PGDATA/postmaster.opts
PIDFILE=$PGDATA/postmaster.pid
+CONFFILE=$PGDATA/postgresql.conf
if [ "$op" = "status" ];then
if [ -f "$PIDFILE" ];then
@@ -356,12 +358,6 @@ if [ "$op" = "start" -o "$op" = "restart" ];then
fi
fi
- # wait for postmaster to start
- if [ "$wait" = yes ];then
- cnt=0
- $silence_echo $ECHO_N "waiting for postmaster to start..."$ECHO_C
- while :
- do
# FIXME: This is horribly misconceived.
# 1) If password authentication is set up, the connection will fail.
# 2) If a virtual host is set up, the connection may fail.
@@ -369,12 +365,26 @@ if [ "$op" = "start" -o "$op" = "restart" ];then
# may fail.
# 4) When no Unix domain sockets are available, the connection will
# fail. (Using TCP/IP by default ain't better.)
-# 5) When a different port is configured, the connection will fail
-# or go to the wrong server.
-# 6) If the dynamic loader is not set up correctly (for this user/at
+# 5) If the dynamic loader is not set up correctly (for this user/at
# this time), psql will fail (to find libpq).
-# 7) If psql is misconfigured, this may fail.
- if "$PGPATH/psql" -l >/dev/null 2>&1
+# 6) If psql is misconfigured, this may fail.
+
+ # Attempt to use the right port
+ # Use PGPORT if set, otherwise look in the configuration file
+ if [ -z $PGPORT ];then
+ PGPORT=`sed -ne 's/^[ ]*port[^=]*=[ ]\+\([0-9]\+\).*/\1/p' $CONFFILE 2>/dev/null`
+ if [ -z $PGPORT ];then
+ PGPORT=$DEF_PGPORT
+ fi
+ fi
+
+ # wait for postmaster to start
+ if [ "$wait" = yes ];then
+ cnt=0
+ $silence_echo $ECHO_N "waiting for postmaster to start..."$ECHO_C
+ while :
+ do
+ if "$PGPATH/psql" -p $PGPORT -l >/dev/null 2>&1
then
break;
else