I hope all the dust has settled out now ...
</Para>
<Para>
-
-If your site administrator has not set things up in the default way,
-you may have some more work to do. For example, if the database server
-machine is a remote machine, you will need to set the
-<Acronym>PGHOST</Acronym> environment variable to the name of the
-database server machine. The environment variable
-<Acronym>PGPORT</Acronym> or <envar>PGUNIXSOCKET</envar> may also have
-to be set. The bottom line is this: if you try to start an application
-program and it complains that it cannot connect to the
-<Application>postmaster</Application>, you should immediately consult
-your site administrator to make sure that your environment is properly
-set up. </Para>
+If your site administrator has not set things up in the
+default way, you may have some more work to do. For example, if the database
+ server machine is a remote machine, you
+will need to set the <Acronym>PGHOST</Acronym> environment variable to the name
+of the database server machine. The environment variable
+<Acronym>PGPORT</Acronym> may also have to be set. The bottom line is this: if
+you try to start an application program and it complains
+that it cannot connect to the <Application>postmaster</Application>,
+ you should immediately consult your site administrator to make sure that your
+environment is properly set up.
+</Para>
</Chapter>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/Attic/libpq++.sgml,v 1.19 2000/11/22 01:41:12 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/Attic/libpq++.sgml,v 1.20 2000/11/30 23:20:50 tgl Exp $
-->
<chapter id="libpqplusplus">
<listitem>
<para>
<envar>PGHOST</envar> sets the default server name.
- If it begins with a slash, it is used
- as the directory for the unix domain socket.
+ If this begins with a slash, it specifies Unix-domain communication
+ rather than TCP/IP communication; the value is the name of the
+ directory in which the socket file is stored (default "/tmp").
</para>
</listitem>
<listitem>
<para>
- <envar>PGPORT</envar> sets the default port or local Unix domain socket
- file extension for communicating with the <productname>Postgres</productname>
- backend.
- </para>
- </listitem>
- <listitem>
- <para>
- <envar>PGUNIXSOCKET</envar> sets the Unix domain socket
- directory for communicating with the <productname>Postgres</productname>
- backend.
+ <envar>PGPORT</envar> sets the default TCP port number or Unix-domain
+ socket file extension for communicating with the
+ <productname>Postgres</productname> backend.
</para>
</listitem>
<listitem>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.50 2000/11/30 18:34:36 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.51 2000/11/30 23:20:50 tgl Exp $
-->
<chapter id="libpq-chapter">
<listitem>
<para>
Name of host to connect to.
- Using this parameter causes a hostname look-up. See hostaddr.
- If it begins with a slash, it is used
- as the directory for the unix domain socket.
+ If this begins with a slash, it specifies Unix-domain communication
+ rather than TCP/IP communication; the value is the name of the
+ directory in which the socket file is stored.
+ The default is to connect to a Unix-domain socket in
+ <filename>/tmp</filename>.
</para>
</listitem>
</varlistentry>
machine at hostaddr.
</para>
<para>
- Without both a host name and host address, libpq will connect using a
+ Without either a host name or host address, libpq will connect using a
local Unix domain socket.
</para>
</listitem>
<listitem>
<para>
<envar>PGHOST</envar> sets the default server name.
-If it beings with a slash, it is used as the directory for the unix domain
-socket.
+If this begins with a slash, it specifies Unix-domain communication
+rather than TCP/IP communication; the value is the name of the
+directory in which the socket file is stored (default "/tmp").
</para>
</listitem>
<listitem>
<para>
-<envar>PGPORT</envar> sets the default port for communicating with
-the <productname>Postgres</productname> backend.
+<envar>PGPORT</envar> sets the default TCP port number or Unix-domain
+socket file extension for communicating with the
+<productname>Postgres</productname> backend.
</para>
</listitem>
<listitem>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_dump.sgml,v 1.25 2000/11/22 01:41:13 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_dump.sgml,v 1.26 2000/11/30 23:20:50 tgl Exp $
Postgres documentation
-->
<varlistentry>
<term><computeroutput>
Connection to database 'template1' failed.
-connectDB() failed: Is the postmaster running and accepting connections
- at 'UNIX Socket' on port '<replaceable class="parameter">port</replaceable>'?
+connectDBStart() -- connect() failed: No such file or directory
+ Is the postmaster running locally
+ and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?
</computeroutput></term>
<listitem>
<para>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_dumpall.sgml,v 1.15 2000/11/22 01:41:13 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_dumpall.sgml,v 1.16 2000/11/30 23:20:50 tgl Exp $
Postgres documentation
-->
<varlistentry>
<term><computeroutput>
Connection to database 'template1' failed.
-connectDB() failed: Is the postmaster running and accepting connections at 'UNIX Socket' on port '<replaceable class="parameter">port</replaceable>'?
+connectDBStart() -- connect() failed: No such file or directory
+ Is the postmaster running locally
+ and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?
</computeroutput></term>
<listitem>
<para>
<varlistentry>
<term><computeroutput>
Connection to database 'template1' failed.
-connectDB() failed: Is the postmaster running and accepting connections
- at 'UNIX Socket' on port '<replaceable class="parameter">port</replaceable>'?
+connectDBStart() -- connect() failed: No such file or directory
+ Is the postmaster running locally
+ and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?
</computeroutput></term>
<listitem>
<para>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/postmaster.sgml,v 1.17 2000/11/28 23:27:54 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/postmaster.sgml,v 1.18 2000/11/30 23:20:50 tgl Exp $
Postgres documentation
-->
<refentry id="APP-POSTMASTER">
<docinfo>
- <date>2000-11-12</date>
+ <date>2000-11-30</date>
</docinfo>
<refmeta>
<arg>-F</arg>
<arg>-h <replaceable>hostname</replaceable></arg>
<arg>-i</arg>
- <arg>-k <replaceable>filename</replaceable></arg>
+ <arg>-k <replaceable>directory</replaceable></arg>
<arg>-l</arg>
<arg>-N <replaceable>max-connections</replaceable></arg>
<arg>-o <replaceable>extra-options</replaceable></arg>
starts it needs to know the location of the database cluster files
(<quote>data area</quote>). This is done with the
<option>-D</option> invocation option or the <envar>PGDATA</envar>
- environment variable, there is no default. More than one
+ environment variable; there is no default. More than one
postmaster process can run on a system at one time, as long as they
- use different data areas and different port numbers (see below). A
- data area is created with <xref linkend="app-initdb"
+ use different data areas and different communication ports (see below).
+ A data area is created with <xref linkend="app-initdb"
endterm="app-initdb-title">.
</para>
<para>
Specifies the TCP/IP hostname or address on which the
<application>postmaster</application> is to listen for
- connections from client applications. Defaults to the value
- of the <envar>PGHOST</envar> environment variable, or if
- <envar>PGHOST</envar> is not set, it defaults to listening on
- all configured addresses (including localhost).
+ connections from client applications. Defaults to
+ listening on all configured addresses (including localhost).
</para>
</listitem>
</varlistentry>
</varlistentry>
<varlistentry>
- <term>-k <replaceable class="parameter">filename</replaceable></term>
+ <term>-k <replaceable class="parameter">directoryname</replaceable></term>
<listitem>
<para>
- Specifies the directory for Unix domain socket on which the
+ Specifies the directory of the Unix-domain socket on which the
<application>postmaster</application> is to listen for
- connections from client applications. Defaults to the value
- of the <envar>PGUNIXSOCKET</envar> environment variable, or if
- <envar>PGUNIXSOCKET</envar> is not set, then defaults to a
- file in <filename>/tmp</filename>.
+ connections from client applications. The default is normally
+ <filename>/tmp</filename>, but can be changed at build time.
</para>
</listitem>
</varlistentry>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.39 2000/11/25 20:33:47 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.40 2000/11/30 23:20:50 tgl Exp $
-->
<Chapter Id="runtime">
<para>
<screen>
connectDB() -- connect() failed: Connection refused
-Is the postmaster running (with -i) at 'server.joe.com' and accepting connections on TCP/IP port '5432'?
+Is the postmaster running (with -i) at 'server.joe.com' and accepting connections on TCP/IP port 5432?
</screen>
This is the generic <quote>I couldn't find a server to talk
to</quote> failure. It looks like the above when TCP/IP
Unix-socket communication to a local postmaster:
<screen>
connectDB() -- connect() failed: No such file or directory
-Is the postmaster running at 'localhost' and accepting connections on Unix socket '5432'?
+Is the postmaster running locally and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?
</screen>
</para>
</varlistentry>
<varlistentry>
- <term>UNIXSOCKET (<type>string</type>)</term>
+ <term>UNIX_SOCKET_DIRECTORY (<type>string</type>)</term>
<listitem>
<para>
- Specifies the directory of the Unix domain socket on which the
+ Specifies the directory of the Unix-domain socket on which the
<application>postmaster</application> is to listen for
- connections from client applications. Defaults to the value
- of the <envar>PGUNIXSOCKET</envar> environment variable, or if
- <envar>PGUNIXSOCKET</envar> is not set, then defaults to
- <filename>/tmp</filename>.
+ connections from client applications. The default is normally
+ <filename>/tmp</filename>, but can be changed at build time.
</para>
</listitem>
</varlistentry>
<para>
Specifies the TCP/IP hostname or address on which the
<application>postmaster</application> is to listen for
- connections from client applications. Defaults to the value
- of the <envar>PGHOST</envar> environment variable, or if
- <envar>PGHOST</envar> is not set, it defaults to listening on
- all configured addresses (including localhost).
- </para>
- <para>
- If you use a hostname do not try to run multiple instances of
- <application>postmaster</application> on the same IP address
- but different ports. Doing so will result in them attempting
- (incorrectly) to use the same shared memory segments. Also,
- if you use a hostname, all of the host's IP addresses on which
- <application>postmaster</application> instances are listening
- must be distinct in the two last octets.
- </para>
- <para>
- If you do not use this option, then each instance must listen
- on a different port.
+ connections from client applications. Defaults to
+ listening on all configured addresses (including localhost).
</para>
</listitem>
</varlistentry>
<entry>tcpip_socket = on</entry>
<entry></entry>
</row>
+ <row>
+ <entry>-k <replaceable>x</replaceable></entry>
+ <entry>unix_socket_directory = <replaceable>x</replaceable></entry>
+ <entry></entry>
+ </row>
<row>
<entry>-l</entry>
<entry>ssl = on</entry>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/start.sgml,v 1.14 2000/11/13 15:18:07 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/start.sgml,v 1.15 2000/11/30 23:20:50 tgl Exp $
-->
<chapter id="start">
will need to set the <acronym>PGHOST</acronym> environment
variable to the name
of the database server machine. The environment variable
- <acronym>PGPORT</acronym> or <acronym>PGUNIXSOCKET</acronym> may also have to be set.
+ <acronym>PGPORT</acronym> may also have to be set.
The bottom line is this: if
you try to start an application program and it complains
that it cannot connect to the <application>postmaster</application>,
<programlisting>
% psql template1
-Connection to database 'postgres' failed.
-connectDB() failed: Is the postmaster running and accepting connections
- at 'UNIX Socket' on port '5432'?
+psql: connectDBStart() -- connect() failed: No such file or directory
+ Is the postmaster running locally
+ and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?
</programlisting>
or
<programlisting>
% psql -h localhost template1
-Connection to database 'postgres' failed.
-connectDB() failed: Is the postmaster running and accepting TCP/IP
- (with -i) connections at 'localhost' on port '5432'?
+psql: PQconnectPoll() -- connect() failed: Connection refused
+ Is the postmaster running (with -i) at 'localhost'
+ and accepting connections on TCP/IP port 5432?
</programlisting>
it is usually because
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.196 2000/11/29 22:04:04 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.197 2000/11/30 23:20:51 tgl Exp $
*
* NOTES
*
NetServer = true;
break;
case 'k':
- /* Set PGUNIXSOCKET by hand. */
UnixSocketDir = optarg;
break;
#ifdef USE_SSL
printf(" -F turn fsync off\n");
printf(" -h HOSTNAME host name or IP address to listen on\n");
printf(" -i enable TCP/IP connections\n");
- printf(" -k FILENAME Unix domain socket location\n");
+ printf(" -k DIRECTORY Unix-domain socket location\n");
#ifdef USE_SSL
printf(" -l enable SSL connections\n");
#endif
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.151 2000/11/30 18:32:52 petere Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.152 2000/11/30 23:20:51 tgl Exp $
*
*-------------------------------------------------------------------------
*/
}
+/* ----------
+ * connectFailureMessage -
+ * create a friendly error message on connection failure.
+ * ----------
+ */
+static void
+connectFailureMessage(PGconn *conn, const char *caller, int errorno)
+{
+#ifdef HAVE_UNIX_SOCKETS
+ if (conn->raddr.sa.sa_family == AF_UNIX)
+ printfPQExpBuffer(&conn->errorMessage,
+ "%s -- connect() failed: %s\n"
+ "\tIs the postmaster running locally\n"
+ "\tand accepting connections on Unix socket '%s'?\n",
+ caller,
+ strerror(errorno),
+ conn->raddr.un.sun_path);
+ else
+#endif
+ printfPQExpBuffer(&conn->errorMessage,
+ "%s -- connect() failed: %s\n"
+ "\tIs the postmaster running (with -i) at '%s'\n"
+ "\tand accepting connections on TCP/IP port %s?\n",
+ caller,
+ strerror(errorno),
+ conn->pghost ? conn->pghost : "localhost",
+ conn->pgport);
+}
+
+
/* ----------
* connectDBStart -
* Start to make a connection to the backend so it is ready to receive
else
{
/* Something's gone wrong */
- printfPQExpBuffer(&conn->errorMessage,
- "connectDBStart() -- connect() failed: %s\n"
- "\tIs the postmaster running%s at '%s'\n"
- "\tand accepting connections on %s '%s'?\n",
- strerror(errno),
- (family == AF_INET) ? " (with -i)" : "",
- conn->pghost ? conn->pghost : "localhost",
- (family == AF_INET) ?
- "TCP/IP port" : "Unix socket",
- (family == AF_UNIX && conn->pgunixsocket) ?
- conn->pgunixsocket : conn->pgport);
+ connectFailureMessage(conn, "connectDBStart()", errno);
goto connect_errReturn;
}
}
* see connect failures at this point, so provide a
* friendly error message.
*/
- printfPQExpBuffer(&conn->errorMessage,
- "PQconnectPoll() -- connect() failed: %s\n"
- "\tIs the postmaster running%s at '%s'\n"
- "\tand accepting connections on %s '%s'?\n",
- strerror(optval),
- (conn->raddr.sa.sa_family == AF_INET) ? " (with -i)" : "",
- conn->pghost ? conn->pghost : "localhost",
- (conn->raddr.sa.sa_family == AF_INET) ?
- "TCP/IP port" : "Unix socket",
- (conn->raddr.sa.sa_family == AF_UNIX && conn->pgunixsocket) ?
- conn->pgunixsocket : conn->pgport);
+ connectFailureMessage(conn, "PQconnectPoll()", optval);
goto error_return;
}