NAMEDATALEN configuration option patch

Started by Bill McGonigleabout 25 years ago3 messagespatches
Jump to latest
#1Bill McGonigle
mcgonigle@medicalmedia.com

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

#2Peter Eisentraut
peter_e@gmx.net
In reply to: Bill McGonigle (#1)
Re: NAMEDATALEN configuration option patch

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

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#2)
Re: NAMEDATALEN configuration option patch

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