mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
Remove our inadequate kluge that tried to get AIX's various broken versions
of getaddrinfo() to work. Instead, recommend updating the OS to get a working version of getaddrinfo. Per recent discussions.
This commit is contained in:
parent
d94582f4f8
commit
db16e77349
@ -1,4 +1,4 @@
|
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.321 2009/04/27 16:27:35 momjian Exp $ -->
|
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.322 2009/06/11 19:00:14 tgl Exp $ -->
|
||||
|
||||
<chapter id="installation">
|
||||
<title><![%standalone-include[<productname>PostgreSQL</>]]>
|
||||
@ -2090,7 +2090,7 @@ kill `cat /usr/local/pgsql/data/postmaster.pid`
|
||||
|
||||
<para>
|
||||
On AIX 4.3.2, you need <filename>libm.a</filename> that is in the
|
||||
fileset bos.adt.libm. Try the following command:
|
||||
fileset <literal>bos.adt.libm</>. Try the following command:
|
||||
<screen>
|
||||
$ lslpp -l bos.adt.libm
|
||||
</screen>
|
||||
@ -2120,11 +2120,11 @@ $ lslpp -l bos.adt.libm
|
||||
|
||||
<para>
|
||||
AIX 5.3 has a problem
|
||||
where <structname>sockadr_storage</structname> is not defined to
|
||||
where <structname>sockaddr_storage</structname> is not defined to
|
||||
be large enough. In version 5.3, IBM increased the size of
|
||||
<structname>sockaddr_un</structname>, the address structure for
|
||||
Unix-domain sockets, but did not correspondingly increase the
|
||||
size of <structname>sockadr_storage</structname>. The result of
|
||||
size of <structname>sockaddr_storage</structname>. The result of
|
||||
this is that attempts to use Unix-domain sockets with PostgreSQL
|
||||
lead to libpq overflowing the data structure. TCP/IP connections
|
||||
work OK, but not Unix-domain sockets, which prevents the
|
||||
@ -2142,7 +2142,66 @@ $ lslpp -l bos.adt.libm
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
<title>Memory Management</title>
|
||||
<title>Internet address issues</title>
|
||||
|
||||
<para>
|
||||
PostgreSQL relies on the system's <function>getaddrinfo</> function
|
||||
to parse IP addresses in <varname>listen_addresses</>,
|
||||
<filename>pg_hba.conf</>, etc. Older versions of AIX have assorted
|
||||
bugs in this function. If you have problems related to these settings,
|
||||
updating to the latest fix pack for your AIX release should fix it.
|
||||
</para>
|
||||
|
||||
<!-- http://archives.postgresql.org/message-id/6064jt6cfm.fsf_-_@dba2.int.libertyrms.com -->
|
||||
|
||||
<para>
|
||||
One user reports:
|
||||
</para>
|
||||
|
||||
<para>
|
||||
When implementing PostgreSQL version 8.1 on AIX 5.3, we
|
||||
periodically ran into problems where the statistics collector
|
||||
would <quote>mysteriously</quote> not come up successfully. This
|
||||
appears to be the result of unexpected behaviour in the IPv6
|
||||
implementation. It looks like PostgreSQL and IPv6 do not play
|
||||
very well together at this time on AIX.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Any of the following actions <quote>fix</quote> the problem.
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Delete the IPv6 address for localhost:
|
||||
<screen>
|
||||
(as root)
|
||||
# ifconfig lo0 inet6 ::1/0 delete
|
||||
</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Remove IPv6 from net services. The
|
||||
file <filename>/etc/netsvc.conf</filename> on AIX is roughly
|
||||
equivalent to <filename>/etc/nsswitch.conf</filename> on
|
||||
Solaris/Linux. The default, on AIX, is thus:
|
||||
<programlisting>
|
||||
hosts=local,bind
|
||||
</programlisting>
|
||||
Replace this with:
|
||||
<programlisting>
|
||||
hosts=local4,bind4
|
||||
</programlisting>
|
||||
to deactivate searching for IPv6 addresses.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
<title>Memory management</title>
|
||||
<!-- http://archives.postgresql.org/message-id/603bgqmpl9.fsf@dba2.int.libertyrms.com -->
|
||||
|
||||
<para>
|
||||
@ -2292,52 +2351,6 @@ createlang: language installation failed: ERROR: could not load library "/opt/d
|
||||
</biblioentry>
|
||||
</bibliography>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
<title>Statistics Collector Issues</title>
|
||||
<!-- http://archives.postgresql.org/message-id/6064jt6cfm.fsf_-_@dba2.int.libertyrms.com -->
|
||||
|
||||
<para>
|
||||
When implementing PostgreSQL version 8.1 on AIX 5.3, we
|
||||
periodically ran into problems where the statistics collector
|
||||
would <quote>mysteriously</quote> not come up successfully. This
|
||||
appears to be the result of unexpected behaviour in the IPv6
|
||||
implementation. It looks like PostgreSQL and IPv6 do not play
|
||||
very well together at this time on AIX.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Any of the following actions <quote>fix</quote> the problem.
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Delete the IPv6 address for localhost:
|
||||
<screen>
|
||||
(as root)
|
||||
# ifconfig lo0 inet6 ::1/0 delete
|
||||
</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Remove IPv6 from net services. The
|
||||
file <filename>/etc/netsvc.conf</filename> on AIX is roughly
|
||||
equivalent to <filename>/etc/nsswitch.conf</filename> on
|
||||
Solaris/Linux. The default, on AIX, is thus:
|
||||
<programlisting>
|
||||
hosts=local,bind
|
||||
</programlisting>
|
||||
Replace this with:
|
||||
<programlisting>
|
||||
hosts=local4,bind4
|
||||
</programlisting>
|
||||
to deactivate searching for IPv6 addresses.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="installation-notes-cygwin">
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/libpq/ip.c,v 1.46 2009/06/11 14:48:58 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/libpq/ip.c,v 1.47 2009/06/11 19:00:15 tgl Exp $
|
||||
*
|
||||
* This file and the IPV6 implementation were initially provided by
|
||||
* Nigel Kukard <nkukard@lbsd.net>, Linux Based Systems Design
|
||||
@ -74,45 +74,9 @@ pg_getaddrinfo_all(const char *hostname, const char *servname,
|
||||
return getaddrinfo_unix(servname, hintp, result);
|
||||
#endif
|
||||
|
||||
#ifndef _AIX
|
||||
/* NULL has special meaning to getaddrinfo(). */
|
||||
rc = getaddrinfo((!hostname || hostname[0] == '\0') ? NULL : hostname,
|
||||
servname, hintp, result);
|
||||
#else /* _AIX */
|
||||
|
||||
/*
|
||||
* Various versions of AIX have various bugs in getaddrinfo()'s handling
|
||||
* of the servname parameter, including failing entirely if it's not NULL
|
||||
* and failing to zero sin_port when it is NULL :-(. Avoid these by
|
||||
* always passing NULL and handling the port number for ourselves.
|
||||
*/
|
||||
rc = getaddrinfo((!hostname || hostname[0] == '\0') ? NULL : hostname,
|
||||
NULL, hintp, result);
|
||||
|
||||
if (rc == 0)
|
||||
{
|
||||
struct addrinfo *addr;
|
||||
unsigned short port = 0;
|
||||
|
||||
if (servname && *servname)
|
||||
port = atoi(servname);
|
||||
|
||||
for (addr = *result; addr; addr = addr->ai_next)
|
||||
{
|
||||
switch (addr->ai_family)
|
||||
{
|
||||
case AF_INET:
|
||||
((struct sockaddr_in *) addr->ai_addr)->sin_port = htons(port);
|
||||
break;
|
||||
#ifdef HAVE_IPV6
|
||||
case AF_INET6:
|
||||
((struct sockaddr_in6 *) addr->ai_addr)->sin6_port = htons(port);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* _AIX */
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user