OSDN Git Service

FAQ_AIX in 8.1.0 contains outdated information about how to deal with
authorBruce Momjian <bruce@momjian.us>
Thu, 8 Dec 2005 21:36:50 +0000 (21:36 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 8 Dec 2005 21:36:50 +0000 (21:36 +0000)
postgres problems due to readline.  The attached patch replaces that
section of it with better ways of handling the problem.

Seneca Cunningham

doc/FAQ_AIX

index 61ac05a..be2aa11 100644 (file)
@@ -1,5 +1,5 @@
 From: Zeugswetter Andreas <ZeugswetterA@spardat.at>
-$Date: 2005/11/04 18:16:50 $
+$Date: 2005/12/08 21:36:50 $
 
 On AIX 4.3.2 PostgreSQL compiled with the native IBM compiler xlc
 (vac.C 5.0.1) passes all regression tests.  Other versions of OS and
@@ -114,62 +114,68 @@ http://www.faqs.org/faqs/aix-faq/part4/section-22.html
 
 http://www.han.de/~jum/aix/ldd.c
 ---
-From: Christopher Browne <cbbrowne@ca.afilias.info>
-Date: 2005-11-02
-
-On AIX 5.3 ML3 (e.g. maintenance level 5300-03), there is some problem
-with the handling of the pointer to memcpy.  It is speculated that
-this relates to some linker bug that may have been introduced between
-5300-02 and 5300-03, but we have so far been unable to track down the
-cause.
-
-At any rate, the following patch, which "unwraps" the function
-reference, has been observed to allow PG 8.1 pre-releases to pass
-regression tests.
-
-The same behaviour (albeit with varying underlying functions to
-"blame") has been observed when compiling with either GCC 4.0 or IBM
-XLC.
-
------------- per Seneca Cunningham -------------------
-
-The following patch works on the AIX 5.3 ML3 box here and didn't cause
-any problems with postgres on the x86 desktop.  It's just a cleaner
-version of what I tried earlier.
-
-*** dynahash.c.orig Tue Nov  1 19:41:42 2005
---- dynahash.c  Tue Nov  1 20:30:33 2005
-***************
-*** 670,676 ****
-
-
-            /* copy key into record */
-            currBucket->hashvalue = hashvalue;
-!           hashp->keycopy(ELEMENTKEY(currBucket), keyPtr, keysize);
-
-
-            /* caller is expected to fill the data field on return */
-
-
---- 670,687 ----
-
-
-            /* copy key into record */
-            currBucket->hashvalue = hashvalue;
-!           if (hashp->keycopy == memcpy)
-!           {
-!               memcpy(ELEMENTKEY(currBucket), keyPtr, keysize);
-!           }
-!           else if (hashp->keycopy == strncpy)
-!           {
-!               strncpy(ELEMENTKEY(currBucket), keyPtr, keysize);
-!           }
-!           else
-!           {
-!               hashp->keycopy(ELEMENTKEY(currBucket), keyPtr, keysize);
-!           }
-
-
-            /* caller is expected to fill the data field on return */
 
------------- per Seneca Cunningham -------------------
+AIX, readline, and postgres 8.1.x:
+----------------------------------
+
+If make check doesn't work on AIX with initdb going into an infinite
+loop or failing with child processes terminated with signal 11, the 
+problem could be the installed copy of readline.  Previously a patch to 
+dynahash.c was suggested to get around this, don't use it, better ways
+to get postgres working exist.
+
+See <http://archives.postgresql.org/pgsql-patches/2005-11/msg00139.php>
+for details about the problem.
+
+Working around the problem:
+---------------------------
+1) Use the new 8.2devel backend Makefile:
+After the matter of readline's export list and the problems that were
+occurring on AIX because of it being linked to the backend, a filter
+to exclude unneeded libraries from being linked against the backend was
+added.  Get revision 1.112 of src/backend/Makefile from CVS and replace
+the copy that came with postgres with it.  Build normally.
+
+2) Use libedit:
+There are a few libedit ports available online.  Build and install the
+desired port.  If libreadline.a can be found in /lib, /usr/lib, or in
+any location passed to postgres' configure via "--with-libraries=",
+readline will be detected and used by postgres.  IBM's rpm of readline
+creates a symlink to /opt/freeware/lib/libreadline.a in /lib, so merely 
+excluding /opt/freeware/lib from the passed library path does not stop
+readline from being used.  
+
+If the linker cannot avoid finding libreadline.a, use revision 1.433 
+configure.in and 1.19 config/programs.m4 from CVS, change 8.2devel to 
+the appropriate 8.1.x in configure.in and run autoconf.  Add the 
+configure flag "--with-libedit-preferred".
+
+If the version of libedit used calls its "history.h" something other
+than history.h, place a symlink called history.h to it somewhere that
+the C preprocessor will check.
+
+3) Configure with "--without-readline":
+postgres can be configured with the option "--without-readline".  When
+this is enabled, postgres will not link against libreadline or libedit.
+psql will not have history, tab completion, or any of the other niceties
+that readline and libedit bring, but external readline wrappers exist
+that add that functionality.
+
+4) Use readline 5.0:
+Readline 5.0 does not induce the problems, however it does export
+memcpy and strncpy when built using the easy method of "-bexpall".  Like
+4.3, it is possible to do a build that does not export these symbols,
+but it does take considerable manual effort and the creation of export
+files.
+
+References
+----------
+"AIX 5L Porting Guide"
+  IBM Redbook
+  http://www.redbooks.ibm.com/redbooks/pdfs/sg246034.pdf
+  http://www.redbooks.ibm.com/abstracts/sg246034.html?Open
+  
+"Developing and Porting C and C++ Applications on AIX"
+  IBM Redbook
+  http://www.redbooks.ibm.com/redbooks/pdfs/sg245674.pdf
+  http://www.redbooks.ibm.com/abstracts/sg245674.html?Open