Thread: NAMEDATALEN configuration option patch

NAMEDATALEN configuration option patch

From
Bill McGonigle
Date:
Attached is a patch that will allow the user to specify the value of
NAMEDATALEN on the configure command line with a '--with-namedatalen='
option.   I did this since otherwise I'll need to hack the source for each
release until eternity so my tables will fit and this is easier to script.

Disclaimer: this is my first venture into the world of autoconf, (and
postgres hacking!) but it works OK for me.  The only possible problem I
forsee is if an external program includes "postgres_ext.h" and there is a
name collision with something in config.h.  I couldn't find anyone
grepping the source tree besides genbki.sh, but that would be something to
watch for.  This tree works on my RedHat 7.1 machine from a clean unpack,
patch, autoconf, configure, make, make install, initdb, startup, and
loading lots of tables and data with psql.

This is a patch against the 7.1 release.  Please let me know if you need
something different.

-Bill

------


diff -r -c -x configure postgresql-7.1/INSTALL postgresql-7.1-namedatalen/
INSTALL
*** postgresql-7.1/INSTALL    Fri Apr  6 13:06:04 2001
--- postgresql-7.1-namedatalen/INSTALL    Wed May 16 14:10:42 2001
***************
*** 278,283 ****
--- 278,292 ----
             you specify it here then both server and clients will have the
             same default compiled in, which can be very convenient.

+      --with-namedatalen=NUMBER
+
+           Set NUMBER as the length of the name data type.  The name data
+           type is used internally for the names of tables, columns,
indexes,
+           etc. If you are using long table or column names you might
want to
+           increase this value from the default of 32 to a larger number,
+           like 256. Beware, databases with different NAMEDATALEN values
are
+           NOT binary compatible.
+
        --with-CXX

             Build the C++ interface library.
diff -r -c -x configure postgresql-7.1/configure.in
postgresql-7.1-namedatalen/configure.in
*** postgresql-7.1/configure.in    Fri Apr 13 17:22:46 2001
--- postgresql-7.1-namedatalen/configure.in    Wed May 16 14:00:16 2001
***************
*** 225,230 ****
--- 225,242 ----
   AC_DEFINE_UNQUOTED(DEF_PGPORT_STR, "${default_port}")
   AC_SUBST(default_port)

+
+ #
+ # name type size (--with-namedatalen), default 32
+ #
+ AC_MSG_CHECKING([for name type size])
+ PGAC_ARG_REQ(with, namedatalen, [  --with-namedatalen=NAMESIZE   change
name type size [32]],
+              [namedatalen=$withval],
+              [namedatalen=32])
+ AC_MSG_RESULT([$namedatalen])
+ AC_DEFINE_UNQUOTED(DEF_NAMEDATALEN, ${namedatalen})
+ AC_SUBST(namedatalen)
+
   #
   # Maximum number of allowed connections (--with-maxbackends), default 32
   #
diff -r -c -x configure postgresql-7.1/src/backend/catalog/genbki.sh
postgresql-7.1-namedatalen/src/backend/catalog/genbki.sh
*** postgresql-7.1/src/backend/catalog/genbki.sh    Sun Jan 28 21:53:36 2001
--- postgresql-7.1-namedatalen/src/backend/catalog/genbki.sh    Wed May 16 14:
03:40 2001
***************
*** 118,127 ****
   trap "rm -f $TMPFILE ${OUTPUT_PREFIX}.bki.$$
${OUTPUT_PREFIX}.description.$$" 0 1 2 3 15


! # Get NAMEDATALEN from postgres_ext.h
   for dir in $INCLUDE_DIRS; do
!     if [ -f "$dir/postgres_ext.h" ]; then
!         NAMEDATALEN=`grep '#define[     ]*NAMEDATALEN' $dir/postgres_ext.h
| $AWK '{ print $3 }'`
           break
       fi
   done
--- 118,127 ----
   trap "rm -f $TMPFILE ${OUTPUT_PREFIX}.bki.$$
${OUTPUT_PREFIX}.description.$$" 0 1 2 3 15


! # Get DEF_NAMEDATALEN from config.h (hey, this is consistant!)
   for dir in $INCLUDE_DIRS; do
!     if [ -f "$dir/config.h" ]; then
!         NAMEDATALEN=`grep '#define[     ]*DEF_NAMEDATALEN' $dir/config.h |
$AWK '{ print $3 }'`
           break
       fi
   done
diff -r -c -x configure postgresql-7.1/src/include/config.h.in
postgresql-7.1-namedatalen/src/include/config.h.in
*** postgresql-7.1/src/include/config.h.in    Fri Mar 23 19:54:58 2001
--- postgresql-7.1-namedatalen/src/include/config.h.in    Wed May 16 14:00:16
2001
***************
*** 75,80 ****
--- 75,88 ----
   #undef DEF_PGPORT_STR

   /*
+  * DEF_NAMEDATALEN is the length of the name type, used internally for
table
+  * and column names.  Databases created with different NAMEDATALEN's are
not
+  * binary compatible.  The default value is 32.
+  *
+ */
+ #undef DEF_NAMEDATALEN
+
+ /*
    * Default soft limit on number of backend server processes per
postmaster;
    * this is just the default setting for the postmaster's -N switch.
    * (--with-maxbackends=N)
diff -r -c -x configure postgresql-7.1/src/include/postgres_ext.h
postgresql-7.1-namedatalen/src/include/postgres_ext.h
*** postgresql-7.1/src/include/postgres_ext.h    Fri Mar 23 19:55:01 2001
--- postgresql-7.1-namedatalen/src/include/postgres_ext.h    Wed May 16 14:00:
16 2001
***************
*** 23,28 ****
--- 23,30 ----
   #ifndef POSTGRES_EXT_H
   #define POSTGRES_EXT_H

+ #include "config.h"
+
   /*
    * Object ID is a fundamental type in Postgres.
    */
***************
*** 40,45 ****
    *
    * NOTE that databases with different NAMEDATALEN's cannot interoperate!
    */
! #define NAMEDATALEN 32

   #endif
--- 42,47 ----
    *
    * NOTE that databases with different NAMEDATALEN's cannot interoperate!
    */
! #define NAMEDATALEN DEF_NAMEDATALEN

   #endif

Re: NAMEDATALEN configuration option patch

From
Peter Eisentraut
Date:
Bill McGonigle writes:

> The only possible problem I forsee is if an external program includes
> "postgres_ext.h" and there is a name collision with something in
> config.h.

That is precisely the reason why this cannot be done that way.

--
Peter Eisentraut   peter_e@gmx.net   http://funkturm.homeip.net/~peter


Re: NAMEDATALEN configuration option patch

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> Bill McGonigle writes:
>> The only possible problem I forsee is if an external program includes
>> "postgres_ext.h" and there is a name collision with something in
>> config.h.

> That is precisely the reason why this cannot be done that way.

I'm fairly uncomfortable with the thought of making NAMEDATALEN so
easily twiddle-able.  The problem is precisely that the value does
propagate into client programs, and thus that there are going to be
interoperability risks between clients with one setting and servers
with another.  I don't like the idea of people choosing random values
at configure time without thinking hard about what they're doing.

I would be in favor of raising the standard value to 64 (from the
current 32) in the next major release, 7.2.  That should be enough
to damp down the complaints ... IMHO anyway ...

            regards, tom lane