Commit db16e773 authored by Tom Lane's avatar Tom Lane

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.
parent d94582f4
<!-- $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"> <chapter id="installation">
<title><![%standalone-include[<productname>PostgreSQL</>]]> <title><![%standalone-include[<productname>PostgreSQL</>]]>
...@@ -2090,7 +2090,7 @@ kill `cat /usr/local/pgsql/data/postmaster.pid` ...@@ -2090,7 +2090,7 @@ kill `cat /usr/local/pgsql/data/postmaster.pid`
<para> <para>
On AIX 4.3.2, you need <filename>libm.a</filename> that is in the 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> <screen>
$ lslpp -l bos.adt.libm $ lslpp -l bos.adt.libm
</screen> </screen>
...@@ -2120,11 +2120,11 @@ $ lslpp -l bos.adt.libm ...@@ -2120,11 +2120,11 @@ $ lslpp -l bos.adt.libm
<para> <para>
AIX 5.3 has a problem 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 be large enough. In version 5.3, IBM increased the size of
<structname>sockaddr_un</structname>, the address structure for <structname>sockaddr_un</structname>, the address structure for
Unix-domain sockets, but did not correspondingly increase the 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 this is that attempts to use Unix-domain sockets with PostgreSQL
lead to libpq overflowing the data structure. TCP/IP connections lead to libpq overflowing the data structure. TCP/IP connections
work OK, but not Unix-domain sockets, which prevents the work OK, but not Unix-domain sockets, which prevents the
...@@ -2142,7 +2142,66 @@ $ lslpp -l bos.adt.libm ...@@ -2142,7 +2142,66 @@ $ lslpp -l bos.adt.libm
</sect3> </sect3>
<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 --> <!-- http://archives.postgresql.org/message-id/603bgqmpl9.fsf@dba2.int.libertyrms.com -->
<para> <para>
...@@ -2292,52 +2351,6 @@ createlang: language installation failed: ERROR: could not load library "/opt/d ...@@ -2292,52 +2351,6 @@ createlang: language installation failed: ERROR: could not load library "/opt/d
</biblioentry> </biblioentry>
</bibliography> </bibliography>
</sect3> </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>
<sect2 id="installation-notes-cygwin"> <sect2 id="installation-notes-cygwin">
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 * This file and the IPV6 implementation were initially provided by
* Nigel Kukard <nkukard@lbsd.net>, Linux Based Systems Design * Nigel Kukard <nkukard@lbsd.net>, Linux Based Systems Design
...@@ -74,45 +74,9 @@ pg_getaddrinfo_all(const char *hostname, const char *servname, ...@@ -74,45 +74,9 @@ pg_getaddrinfo_all(const char *hostname, const char *servname,
return getaddrinfo_unix(servname, hintp, result); return getaddrinfo_unix(servname, hintp, result);
#endif #endif
#ifndef _AIX
/* NULL has special meaning to getaddrinfo(). */ /* NULL has special meaning to getaddrinfo(). */
rc = getaddrinfo((!hostname || hostname[0] == '\0') ? NULL : hostname, rc = getaddrinfo((!hostname || hostname[0] == '\0') ? NULL : hostname,
servname, hintp, result); 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; return rc;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment