Re: pg_ctl -w port detection with docs

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Greg Sabino Mullane <greg(at)turnstep(dot)com>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: pg_ctl -w port detection with docs
Date: 2003-03-17 17:32:48
Message-ID: 200303171732.h2HHWms28810@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches


Your patch has been added to the PostgreSQL unapplied patches list at:

http://momjian.postgresql.org/cgi-bin/pgpatches

I will try to apply it within the next 48 hours.

---------------------------------------------------------------------------

Greg Sabino Mullane wrote:
[ There is text before PGP section. ]
>
[ PGP not available, raw data follows ]
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> NotDashEscaped: You need GnuPG to verify this message
>
>
> (Now featuring documentation: fixed some typos, expanded the
> Envrironment and Files section, explained exactly what -w
> does)
>
> This is a patch which allows pg_ctl to make an intelligent
> guess as to the proper port when running 'psql -l' to
> determine if the database has started up (the -w flag).
>
> The environment variable PGPORT is used. If that is not found,
> it checks if a specific port has been set inside the postgresql.conf
> file. If it is has not, it uses the port that Postgres was
> compiled with.
>
> --
> Greg Sabino Mullane greg(at)turnstep(dot)com
> PGP Key: 0x14964AC8 200302230759
>
> Index: pg_ctl.sh
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_ctl/pg_ctl.sh,v
> retrieving revision 1.31
> diff -c -r1.31 pg_ctl.sh
> *** pg_ctl.sh 2003/02/14 22:18:25 1.31
> --- pg_ctl.sh 2003/02/22 14:47:09
> ***************
> *** 60,65 ****
> --- 60,66 ----
> # Placed here during build
> bindir='@bindir@'
> VERSION='@VERSION@'
> + DEF_PGPORT='@DEF_PGPORT@'
>
> # protect the log file
> umask 077
> ***************
> *** 240,245 ****
> --- 241,247 ----
> 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,367 ****
> 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.
> --- 358,363 ----
> ***************
> *** 369,380 ****
> # 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
> # this time), psql will fail (to find libpq).
> ! # 7) If psql is misconfigured, this may fail.
> ! if "$PGPATH/psql" -l >/dev/null 2>&1
> then
> break;
> else
> --- 365,390 ----
> # may fail.
> # 4) When no Unix domain sockets are available, the connection will
> # fail. (Using TCP/IP by default ain't better.)
> ! # 5) If the dynamic loader is not set up correctly (for this user/at
> # this time), psql will fail (to find libpq).
> ! # 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
> Index: Makefile
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_ctl/Makefile,v
> retrieving revision 1.10
> diff -c -r1.10 Makefile
> *** Makefile 2000/11/25 17:17:30 1.10
> --- Makefile 2003/02/22 14:47:40
> ***************
> *** 17,22 ****
> --- 17,23 ----
> 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 $@
>
>
>
>
> Index: pg_ctl-ref.sgml
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/doc/src/sgml/ref/pg_ctl-ref.sgml,v
> retrieving revision 1.18
> diff -c -r1.18 pg_ctl-ref.sgml
> *** pg_ctl-ref.sgml 2003/01/19 00:13:30 1.18
> --- pg_ctl-ref.sgml 2003/02/23 12:56:04
> ***************
> *** 73,94 ****
> <productname>PostgreSQL</productname> backend server, or displaying
> the status of a running postmaster. Although the postmaster can be
> started manually, <application>pg_ctl</application> encapsulates
> ! tasks such as redirecting log output, properly detaching from the
> ! terminal and process group, and it provides convenient options for
> controlled shutdown.
> </para>
>
> <para>
> In <option>start</option> mode, a new postmaster is launched. The
> ! server is started in the background, the standard input attached to
> <filename>/dev/null</filename>. The standard output and standard
> ! error are either appended to a log file, if the <option>-l</option>
> ! option is used, or are redirected to
> ! <application>pg_ctl</application>'s standard output (not standard
> ! error). If no log file is chosen, the standard output of
> ! <application>pg_ctl</application> 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
> terminal (from the background) and will not leave the shell's
> process group.
> </para>
> --- 73,93 ----
> <productname>PostgreSQL</productname> backend server, or displaying
> the status of a running postmaster. Although the postmaster can be
> started manually, <application>pg_ctl</application> encapsulates
> ! tasks such as redirecting log output and properly detaching from the
> ! terminal and process group. It also provides convenient options for
> controlled shutdown.
> </para>
>
> <para>
> In <option>start</option> mode, a new postmaster is launched. The
> ! server is started in the background, and standard input is attached to
> <filename>/dev/null</filename>. The standard output and standard
> ! error are either appended to a log file (if the <option>-l</option>
> ! option is used), or redirected to <application>pg_ctl</application>'s
> ! standard output (not standard error). If no log file is chosen, the
> ! standard output of <application>pg_ctl</application> 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.
> </para>
> ***************
> *** 102,109 ****
> not wait for clients to disconnect. All active transactions are
> rolled back and clients are forcibly disconnected, then the
> database is shut down. <quote>Immediate</quote> mode will abort
> ! all server processes without clean shutdown. This will lead to a recovery
> ! run on restart.
> </para>
>
> <para>
> --- 101,108 ----
> not wait for clients to disconnect. All active transactions are
> rolled back and clients are forcibly disconnected, then the
> database is shut down. <quote>Immediate</quote> mode will abort
> ! all server processes without a clean shutdown. This will lead to
> ! a recovery run on restart.
> </para>
>
> <para>
> ***************
> *** 121,129 ****
> </para>
>
> <para>
> ! <option>status</option> mode checks whether a postmaster is running
> ! and if so displays the <acronym>PID</acronym> and the command line
> ! options that were used to invoke it.
> </para>
> </refsect1>
>
> --- 120,128 ----
> </para>
>
> <para>
> ! <option>status</option> mode checks whether a postmaster is running.
> ! If it is, the <acronym>PID</acronym> and the command line
> ! options that were used to invoke it are displayed.
> </para>
> </refsect1>
>
> ***************
> *** 188,194 ****
> <para>
> Specifies the location of the <filename>postmaster</filename>
> executable. By default the postmaster is taken from the same
> ! directory as <command>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.
> --- 187,193 ----
> <para>
> Specifies the location of the <filename>postmaster</filename>
> executable. By default the postmaster is taken from the same
> ! directory as <command>pg_ctl</command>, 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,216 ****
> <listitem>
> <para>
> Wait for the start or shutdown to complete. Times out after
> ! 60 seconds. This is the default for shutdowns.
> </para>
> </listitem>
> </varlistentry>
> --- 209,224 ----
> <listitem>
> <para>
> Wait for the start or shutdown to complete. Times out after
> ! 60 seconds. This is the default for shutdowns. A successful
> ! shutdown is indicated by removal of the <acronym>PID</scronym>
> ! file. For starting up, a successful <command>psql -l</command>
> ! indicates success. <command>pg_ctl</command> 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 <filename>postgresql.conf</filename> file.
> ! If neither of those is used, it will use the default port that
> ! <productname>PostgreSQL</productname> was compiled with
> ! (5432 by default).
> </para>
> </listitem>
> </varlistentry>
> ***************
> *** 238,247 ****
>
> <listitem>
> <para>
> ! Default data direction location
> </para>
> </listitem>
> </varlistentry>
> </variablelist>
>
> <para>
> --- 246,265 ----
>
> <listitem>
> <para>
> ! Default data directory location.
> </para>
> </listitem>
> </varlistentry>
> +
> + <varlistentry>
> + <term><envar>PGPORT</envar></term>
> +
> + <listitem>
> + <para>
> + Default port for <xref linkend="app-psql"> (used by the -w option).
> + </para>
> + </listitem>
> + </varlistentry>
> </variablelist>
>
> <para>
> ***************
> *** 253,264 ****
> <refsect1>
> <title>Files</title>
>
> ! <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>
> </refsect1>
>
>
> --- 271,328 ----
> <refsect1>
> <title>Files</title>
>
> ! <variablelist>
> ! <varlistentry>
> ! <term><filename>postmaster.pid</filename></term>
> !
> ! <listitem>
> ! <para>The existence of this file in the data directory is used to help
> ! <application>pg_ctl</application> determine if the server is
> ! currently running or not.
> ! </para>
> ! </listitem>
> ! </varlistentry>
> !
> ! <varlistentry>
> ! <term><filename>postmaster.opts.default</filename></term>
> !
> ! <listitem>
> ! <para>If this file exists in the data directory,
> ! <application>pg_ctl</application> (in <option>start</option> mode)
> ! will pass the contents of the file as options to the
> ! <application>postmaster</application>, unless overridden
> ! by the <option>-o</option> option.
> ! </para>
> ! </listitem>
> ! </varlistentry>
> !
> ! <varlistentry>
> ! <term><filename>postmaster.opts</filename></term>
> !
> ! <listitem>
> ! <para>If this file exists in the data directory,
> ! <application>pg_ctl</application> (in <option>restart</option> mode)
> ! will pass the contents of the file as options to the
> ! <application>postmaster</application>, unless overridden
> ! by the <option>-o</option> option. The contents of this file
> ! are also displayed in <option>status</option> mode.
> ! </para>
> ! </listitem>
> ! </varlistentry>
> !
> ! <varlistentry>
> ! <term><filename>postgresql.conf</filename></term>
> !
> ! <listitem>
> ! <para>This file, located in the data directory, is parsed to
> ! find the proper port to send to the
> ! <application>psql</application> when the <option>-w</option>
> ! is given in <option>start</option> mode.
> ! </para>
> ! </listitem>
> ! </varlistentry>
> !
> ! </variablelist>
> </refsect1>
>
>
> ***************
> *** 268,274 ****
> <para>
> 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.
> </para>
> </refsect1>
>
> --- 332,338 ----
> <para>
> 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 (e.g. password authentication).
> </para>
> </refsect1>
>
>
>
>
>
> -----BEGIN PGP SIGNATURE-----
> Comment: http://www.turnstep.com/pgp.html
>
> iD8DBQE+V0ZkvJuQZxSWSsgRAjA+AJ9eFCNSb3Kr4v8UxzRa+/nKSTg87wCeOtzz
> oZlhuzlz19ctvswFMmoXPAo=
> =HQEB
> -----END PGP SIGNATURE-----
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
>
[ Decrypting message... End of raw data. ]

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

In response to

Browse pgsql-patches by date

  From Date Subject
Next Message Bruce Momjian 2003-03-17 17:43:45 Re: Information schema updates
Previous Message Bruce Momjian 2003-03-17 17:30:12 Re: minor cleanup of regress.c