Attached is a refreshed patch that makes integer datetimes the default. Platforms that don't have a working 64-bit integer type will fail to configure by default; they can specify "--disable-integer-datetimes" to switch back to using floating-point based datetimes.
Barring any objections, I'll apply this to HEAD tomorrow. -Neil
Index: configure =================================================================== RCS file: /home/neilc/postgres/cvs_root/pgsql/configure,v retrieving revision 1.587 diff -p -c -r1.587 configure *** configure 10 Mar 2008 21:50:16 -0000 1.587 --- configure 25 Mar 2008 19:47:18 -0000 *************** if test -n "$ac_init_help"; then *** 1349,1355 **** Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] ! --enable-integer-datetimes enable 64-bit integer date/time support --enable-nls[=LANGUAGES] enable Native Language Support --disable-shared do not build shared libraries --disable-rpath do not embed shared library search path in executables --- 1349,1355 ---- Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] ! --disable-integer-datetimes disable 64-bit integer date/time support --enable-nls[=LANGUAGES] enable Native Language Support --disable-shared do not build shared libraries --disable-rpath do not embed shared library search path in executables *************** fi *** 2176,2182 **** # ! # 64-bit integer date/time storage (--enable-integer-datetimes) # { echo "$as_me:$LINENO: checking whether to build with 64-bit integer date/time support" >&5 echo $ECHO_N "checking whether to build with 64-bit integer date/time support... $ECHO_C" >&6; } --- 2176,2182 ---- # ! # 64-bit integer date/time storage: enabled by default. # { echo "$as_me:$LINENO: checking whether to build with 64-bit integer date/time support" >&5 echo $ECHO_N "checking whether to build with 64-bit integer date/time support... $ECHO_C" >&6; } *************** echo "$as_me: error: no argument expecte *** 2205,2211 **** esac else ! enable_integer_datetimes=no fi --- 2205,2215 ---- esac else ! enable_integer_datetimes=yes ! ! cat >>confdefs.h <<\_ACEOF ! #define USE_INTEGER_DATETIMES 1 ! _ACEOF fi *************** fi *** 23293,23298 **** --- 23297,23322 ---- + # If the user did not disable integer datetimes, check that + # there is a working 64-bit integral type to use. + if test x"$USE_INTEGER_DATETIMES" = x"yes" && + test x"$HAVE_LONG_INT_64" = x"no" && + test x"$HAVE_LONG_LONG_INT_64" = x"no" && + test x"$HAVE_INT64" = x"no" ; then + { { echo "$as_me:$LINENO: error: + Integer-based datetime support requires a 64-bit integer type, + but no such type could be found. The --disable-integer-datetimes + configure option can be used to disable integer-based storage + of datetime values." >&5 + echo "$as_me: error: + Integer-based datetime support requires a 64-bit integer type, + but no such type could be found. The --disable-integer-datetimes + configure option can be used to disable integer-based storage + of datetime values." >&2;} + { (exit 1); exit 1; }; } + fi + + if test "$PORTNAME" != "win32" then { echo "$as_me:$LINENO: checking for POSIX signal interface" >&5 Index: configure.in =================================================================== RCS file: /home/neilc/postgres/cvs_root/pgsql/configure.in,v retrieving revision 1.554 diff -p -c -r1.554 configure.in *** configure.in 10 Mar 2008 21:50:16 -0000 1.554 --- configure.in 25 Mar 2008 19:44:55 -0000 *************** PGAC_ARG_REQ(with, libs, [ --with- *** 128,137 **** # ! # 64-bit integer date/time storage (--enable-integer-datetimes) # AC_MSG_CHECKING([whether to build with 64-bit integer date/time support]) ! PGAC_ARG_BOOL(enable, integer-datetimes, no, [ --enable-integer-datetimes enable 64-bit integer date/time support], [AC_DEFINE([USE_INTEGER_DATETIMES], 1, [Define to 1 if you want 64-bit integer timestamp and interval support. (--enable-integer-datetimes)])]) AC_MSG_RESULT([$enable_integer_datetimes]) --- 128,137 ---- # ! # 64-bit integer date/time storage: enabled by default. # AC_MSG_CHECKING([whether to build with 64-bit integer date/time support]) ! PGAC_ARG_BOOL(enable, integer-datetimes, yes, [ --disable-integer-datetimes disable 64-bit integer date/time support], [AC_DEFINE([USE_INTEGER_DATETIMES], 1, [Define to 1 if you want 64-bit integer timestamp and interval support. (--enable-integer-datetimes)])]) AC_MSG_RESULT([$enable_integer_datetimes]) *************** AC_CHECK_TYPES([int8, uint8, int64, uint *** 1405,1410 **** --- 1405,1424 ---- AC_CHECK_TYPES(sig_atomic_t, [], [], [#include <signal.h>]) + # If the user did not disable integer datetimes, check that + # there is a working 64-bit integral type to use. + if test x"$USE_INTEGER_DATETIMES" = x"yes" && + test x"$HAVE_LONG_INT_64" = x"no" && + test x"$HAVE_LONG_LONG_INT_64" = x"no" && + test x"$HAVE_INT64" = x"no" ; then + AC_MSG_ERROR([ + Integer-based datetime support requires a 64-bit integer type, + but no such type could be found. The --disable-integer-datetimes + configure option can be used to disable integer-based storage + of datetime values.]) + fi + + if test "$PORTNAME" != "win32" then PGAC_FUNC_POSIX_SIGNALS Index: doc/src/sgml/config.sgml =================================================================== RCS file: /home/neilc/postgres/cvs_root/pgsql/doc/src/sgml/config.sgml,v retrieving revision 1.173 diff -p -c -r1.173 config.sgml *** doc/src/sgml/config.sgml 11 Mar 2008 16:59:00 -0000 1.173 --- doc/src/sgml/config.sgml 25 Mar 2008 19:44:55 -0000 *************** dynamic_library_path = 'C:\tools\postgre *** 4740,4750 **** </indexterm> <listitem> <para> ! Reports whether <productname>PostgreSQL</productname> was built ! with support for 64-bit-integer dates and times. It is set by ! configuring with <literal>--enable-integer-datetimes</literal> ! when building <productname>PostgreSQL</productname>. The ! default value is <literal>off</literal>. </para> </listitem> </varlistentry> --- 4740,4750 ---- </indexterm> <listitem> <para> ! Reports whether <productname>PostgreSQL</> was built with ! support for 64-bit-integer dates and times. This can be ! disabled by configuring with <literal>--disable-integer-datetimes</> ! when building <productname>PostgreSQL</>. The default value is ! <literal>on</literal>. </para> </listitem> </varlistentry> Index: doc/src/sgml/datatype.sgml =================================================================== RCS file: /home/neilc/postgres/cvs_root/pgsql/doc/src/sgml/datatype.sgml,v retrieving revision 1.225 diff -p -c -r1.225 datatype.sgml *** doc/src/sgml/datatype.sgml 16 Feb 2008 21:51:04 -0000 1.225 --- doc/src/sgml/datatype.sgml 25 Mar 2008 19:44:55 -0000 *************** SELECT b, char_length(b) FROM test2; *** 1408,1414 **** <entry>8 bytes</entry> <entry>both date and time</entry> <entry>4713 BC</entry> ! <entry>5874897 AD</entry> <entry>1 microsecond / 14 digits</entry> </row> <row> --- 1408,1414 ---- <entry>8 bytes</entry> <entry>both date and time</entry> <entry>4713 BC</entry> ! <entry>294276 AD</entry> <entry>1 microsecond / 14 digits</entry> </row> <row> *************** SELECT b, char_length(b) FROM test2; *** 1416,1422 **** <entry>8 bytes</entry> <entry>both date and time, with time zone</entry> <entry>4713 BC</entry> ! <entry>5874897 AD</entry> <entry>1 microsecond / 14 digits</entry> </row> <row> --- 1416,1422 ---- <entry>8 bytes</entry> <entry>both date and time, with time zone</entry> <entry>4713 BC</entry> ! <entry>294276 AD</entry> <entry>1 microsecond / 14 digits</entry> </row> <row> *************** SELECT b, char_length(b) FROM test2; *** 1475,1494 **** <note> <para> ! When <type>timestamp</> values are stored as double precision floating-point ! numbers (currently the default), the effective limit of precision ! might be less than 6. <type>timestamp</type> values are stored as seconds ! before or after midnight 2000-01-01. Microsecond precision is achieved for ! dates within a few years of 2000-01-01, but the precision degrades for ! dates further away. When <type>timestamp</type> values are stored as ! eight-byte integers (a compile-time ! option), microsecond precision is available over the full range of ! values. However eight-byte integer timestamps have a more limited range of ! dates than shown above: from 4713 BC up to 294276 AD. The same ! compile-time option also determines whether <type>time</type> and ! <type>interval</type> values are stored as floating-point or eight-byte ! integers. In the floating-point case, large <type>interval</type> values ! degrade in precision as the size of the interval increases. </para> </note> --- 1475,1501 ---- <note> <para> ! When <type>timestamp</> values are stored as eight-byte integers ! (currently the default), microsecond precision is available over ! the full range of values. When <type>timestamp</> values are ! stored as double precision floating-point numbers instead (a ! deprecated compile-time option), the effective limit of precision ! might be less than 6. <type>timestamp</type> values are stored as ! seconds before or after midnight 2000-01-01. When ! <type>timestamp</type> values are implemented using floating-point ! numbers, microsecond precision is achieved for dates within a few ! years of 2000-01-01, but the precision degrades for dates further ! away. Note that using floating-point datetimes allows a larger ! range of <type>timestamp</type> values to be represented than ! shown above: from 4713 BC up to 5874897 AD. ! </para> ! ! <para> ! The same compile-time option also determines whether ! <type>time</type> and <type>interval</type> values are stored as ! floating-point numbers or eight-byte integers. In the ! floating-point case, large <type>interval</type> values degrade in ! precision as the size of the interval increases. </para> </note> Index: doc/src/sgml/installation.sgml =================================================================== RCS file: /home/neilc/postgres/cvs_root/pgsql/doc/src/sgml/installation.sgml,v retrieving revision 1.304 diff -p -c -r1.304 installation.sgml *** doc/src/sgml/installation.sgml 10 Mar 2008 20:06:27 -0000 1.304 --- doc/src/sgml/installation.sgml 25 Mar 2008 19:46:58 -0000 *************** su - postgres *** 1011,1026 **** </varlistentry> <varlistentry> ! <term><option>--enable-integer-datetimes</option></term> <listitem> <para> ! Use 64-bit integer storage for datetimes and intervals, rather ! than the default floating-point storage. This reduces the range ! of representable values but guarantees microsecond precision across ! the full range (see <![%standalone-include[the documentation about datetime datatypes]]> <![%standalone-ignore[<xref linkend="datatype-datetime">]]> ! for more information). </para> </listitem> </varlistentry> --- 1011,1033 ---- </varlistentry> <varlistentry> ! <term><option>--disable-integer-datetimes</option></term> <listitem> <para> ! Disable support for 64-bit integer storage for timestamps and ! intervals, and store datetime values as floating-point ! numbers instead. Floating-point datetime storage was the ! default in <productname>PostgreSQL</productname> releases ! prior to 8.4, but it is now deprecated, because it does not ! support microsecond precision for the full range of ! <type>timestamp</type> values. However, integer-based ! datetime storage requires a 64-bit integer type. Therefore, ! this option can be used when no such type is available, or ! for compatibility with applications written for prior ! versions of <productname>PostgreSQL</productname>. See <![%standalone-include[the documentation about datetime datatypes]]> <![%standalone-ignore[<xref linkend="datatype-datetime">]]> ! for more information. </para> </listitem> </varlistentry>
-- Sent via pgsql-patches mailing list (pgsql-patches@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-patches