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 start 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 -l
- 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 -l
+ 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.
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.
- status mode checks whether a postmaster is running
-
and if so displays the
PID and the command line
- options that were used to invoke it.
+ status 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 .
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_ctlcommand >, 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.
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).
- Default data direction location
+ Default data directory location.
+
+
+
+
+
+ PGPORT
+
+
+ Default port for (used by the -w option).
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 -o 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,
+ will pass the contents of the file as options to the
+
postmaster , unless overridden
+ by the -o option.
+
+
+
+
+
+ postmaster.opts
+
+
+
If this file exists in the data directory,
+
pg_ctl (in
restart mode)
+ will pass the contents of the file as options to the
+
postmaster , unless overridden
+ by the -o option. The contents of this file
+ are also displayed in status mode.
+
+
+
+
+
+ postgresql.conf
+
+
+
This file, located in the data directory, is parsed to
+ find the proper port to send to the
+ is given in start mode.
+
+
+
+
+
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) .
#
#
# 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 $
#
#-------------------------------------------------------------------------
# Placed here during build
bindir='@bindir@'
VERSION='@VERSION@'
+DEF_PGPORT='@DEF_PGPORT@'
# protect the log file
umask 077
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
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.
# 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