Hi,

what's your opinion on this?
I saw response only from Alvaro on the -patches list.

Thanks in advance,
Zoltán Böszörményi

-------- Eredeti üzenet --------
Tárgy:  Re: [PATCHES] 64-bit CommandIds
Dátum:  Tue, 04 Mar 2008 21:52:25 +0100
Feladó:         Zoltan Boszormenyi <[EMAIL PROTECTED]>
Címzett:        pgsql-patches <[EMAIL PROTECTED]>
CC: Alvaro Herrera <[EMAIL PROTECTED]>, Hans-Juergen Schoenig <[EMAIL PROTECTED]> Hivatkozások: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>



Alvaro Herrera írta:
Zoltan Boszormenyi wrote:

attached is our patch against HEAD which enables extending CommandIds
to 64-bit. This is for enabling long transactions that really do that much
non-read-only work in one transaction.

I think you should add a pg_control field and corresponding check, to
avoid a 64bit-Cid postmaster to start on a 32bit-Cid data area and vice
versa.

I added the check but I needed to add it BEFORE checking for
toast_max_chunk_size otherwise it complained about this more
cryptic problem. I think it's cleaner to report this failure to know
why toast_max_chunk_size != TOAST_MAX_CHUNK_SIZE.

Best regards,
Zoltán Böszörményi

--
----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
http://www.postgresql.at/




--
----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
http://www.postgresql.at/

diff -dcrpN pgsql.orig/configure pgsql-cid64/configure
*** pgsql.orig/configure	2008-03-02 13:44:42.000000000 +0100
--- pgsql-cid64/configure	2008-03-04 16:53:46.000000000 +0100
*************** if test -n "$ac_init_help"; then
*** 1349,1354 ****
--- 1349,1355 ----
  Optional Features:
    --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
    --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+   --enable-huge-commandid    enable 64-bit CommandId support
    --enable-integer-datetimes  enable 64-bit integer date/time support
    --enable-nls[=LANGUAGES]  enable Native Language Support
    --disable-shared        do not build shared libraries
*************** fi
*** 2175,2180 ****
--- 2176,2219 ----
  
  
  #
+ # 64-bit CommandId
+ #
+ echo "$as_me:$LINENO: checking whether to build with 64-bit CommandId support" >&5
+ echo $ECHO_N "checking whether to build with 64-bit CommandId support... $ECHO_C" >&6
+ 
+ pgac_args="$pgac_args enable_huge_commandid"
+ 
+ # Check whether --enable-huge-commandid or --disable-huge-commandid was given.
+ if test "${enable_huge_commandid+set}" = set; then
+   enableval="$enable_huge_commandid"
+ 
+   case $enableval in
+     yes)
+ 
+ cat >>confdefs.h <<\_ACEOF
+ #define USE_64BIT_COMMANDID 1
+ _ACEOF
+ 
+       ;;
+     no)
+       :
+       ;;
+     *)
+       { { echo "$as_me:$LINENO: error: no argument expected for --enable-huge-commandid option" >&5
+ echo "$as_me: error: no argument expected for --enable-huge-commandid option" >&2;}
+    { (exit 1); exit 1; }; }
+       ;;
+   esac
+ 
+ else
+   enable_huge_commandid=no
+ 
+ fi;
+ 
+ echo "$as_me:$LINENO: result: $enable_huge_commandid" >&5
+ echo "${ECHO_T}$enable_huge_commandid" >&6
+ 
+ #
  # 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
diff -dcrpN pgsql.orig/configure.in pgsql-cid64/configure.in
*** pgsql.orig/configure.in	2008-03-02 13:44:43.000000000 +0100
--- pgsql-cid64/configure.in	2008-03-04 16:53:46.000000000 +0100
*************** PGAC_ARG_REQ(with, libs,      [  --with-
*** 128,133 ****
--- 128,142 ----
  
  
  #
+ # 64-bit CommandId
+ #
+ AC_MSG_CHECKING([whether to build with 64-bit CommandId support])
+ PGAC_ARG_BOOL(enable, huge-commandid, no, [  --enable-huge-commandid    enable 64-bit CommandId support],
+ 		[AC_DEFINE([USE_64BIT_COMMANDID], 1,
+ 			[Define to 1 if you want 64-bit CommandId support. (--enable-huge-commandid)])])
+ AC_MSG_RESULT([$enable_huge_commandid])
+ 
+ #
  # 64-bit integer date/time storage (--enable-integer-datetimes)
  #
  AC_MSG_CHECKING([whether to build with 64-bit integer date/time support])
diff -dcrpN pgsql.orig/doc/src/sgml/installation.sgml pgsql-cid64/doc/src/sgml/installation.sgml
*** pgsql.orig/doc/src/sgml/installation.sgml	2008-02-18 13:49:58.000000000 +0100
--- pgsql-cid64/doc/src/sgml/installation.sgml	2008-03-04 17:16:14.000000000 +0100
*************** su - postgres
*** 1011,1016 ****
--- 1011,1027 ----
        </varlistentry>
  
        <varlistentry>
+        <term><option>--enable-huge-commandid</option></term>
+        <listitem>
+         <para>
+          Use 64-bit CommandIds if you are planning to run transactions
+          consisting of more than 4 billion commands.  This is off by default
+          to save disk space.
+         </para>
+        </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
         <term><option>--enable-integer-datetimes</option></term>
         <listitem>
          <para>
diff -dcrpN pgsql.orig/src/backend/access/transam/xact.c pgsql-cid64/src/backend/access/transam/xact.c
*** pgsql.orig/src/backend/access/transam/xact.c	2008-01-15 19:56:59.000000000 +0100
--- pgsql-cid64/src/backend/access/transam/xact.c	2008-03-04 16:57:54.000000000 +0100
*************** CommandCounterIncrement(void)
*** 592,598 ****
--- 592,602 ----
  			currentCommandId -= 1;
  			ereport(ERROR,
  					(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
+ #ifdef USE_64BIT_COMMANDID
+ 		  errmsg("cannot have more than 2^64-1 commands in a transaction")));
+ #else
  		  errmsg("cannot have more than 2^32-1 commands in a transaction")));
+ #endif
  		}
  		currentCommandIdUsed = false;
  
diff -dcrpN pgsql.orig/src/backend/access/transam/xlog.c pgsql-cid64/src/backend/access/transam/xlog.c
*** pgsql.orig/src/backend/access/transam/xlog.c	2008-02-18 13:50:00.000000000 +0100
--- pgsql-cid64/src/backend/access/transam/xlog.c	2008-03-04 21:39:30.000000000 +0100
*************** WriteControlFile(void)
*** 3794,3799 ****
--- 3794,3805 ----
  	ControlFile->enableIntTimes = FALSE;
  #endif
  
+ #ifdef USE_64BIT_COMMANDID
+ 	ControlFile->enable64bitCommandId = TRUE;
+ #else
+ 	ControlFile->enable64bitCommandId = FALSE;
+ #endif
+ 
  	ControlFile->localeBuflen = LOCALE_NAME_BUFLEN;
  	localeptr = setlocale(LC_COLLATE, NULL);
  	if (!localeptr)
*************** ReadControlFile(void)
*** 3989,3994 ****
--- 3995,4017 ----
  					  " but the server was compiled with INDEX_MAX_KEYS %d.",
  						   ControlFile->indexMaxKeys, INDEX_MAX_KEYS),
  				 errhint("It looks like you need to recompile or initdb.")));
+ 
+ #ifdef USE_64BIT_COMMANDID
+ 	if (ControlFile->enable64bitCommandId != TRUE)
+ 		ereport(FATAL,
+ 				(errmsg("database files are incompatible with server"),
+ 				 errdetail("The database cluster was initialized without USE_64BIT_COMMANDID"
+ 				  " but the server was compiled with USE_64BIT_COMMANDID."),
+ 				 errhint("It looks like you need to recompile or initdb.")));
+ #else
+ 	if (ControlFile->enable64bitCommandId != FALSE)
+ 		ereport(FATAL,
+ 				(errmsg("database files are incompatible with server"),
+ 				 errdetail("The database cluster was initialized with USE_64BIT_COMMANDID"
+ 			   " but the server was compiled without USE_64BIT_COMMANDID."),
+ 				 errhint("It looks like you need to recompile or initdb.")));
+ #endif
+ 
  	if (ControlFile->toast_max_chunk_size != TOAST_MAX_CHUNK_SIZE)
  		ereport(FATAL,
  				(errmsg("database files are incompatible with server"),
diff -dcrpN pgsql.orig/src/backend/bootstrap/bootstrap.c pgsql-cid64/src/backend/bootstrap/bootstrap.c
*** pgsql.orig/src/backend/bootstrap/bootstrap.c	2008-02-18 13:50:00.000000000 +0100
--- pgsql-cid64/src/backend/bootstrap/bootstrap.c	2008-03-04 16:53:46.000000000 +0100
*************** static const struct typinfo TypInfo[] = 
*** 139,145 ****
--- 139,149 ----
  	F_TIDIN, F_TIDOUT},
  	{"xid", XIDOID, 0, 4, true, 'i', 'p',
  	F_XIDIN, F_XIDOUT},
+ #ifdef USE_64BIT_COMMANDID
+ 	{"cid", CIDOID, 0, 8, false, 'd', 'p',
+ #else
  	{"cid", CIDOID, 0, 4, true, 'i', 'p',
+ #endif
  	F_CIDIN, F_CIDOUT},
  	{"int2vector", INT2VECTOROID, INT2OID, -1, false, 'i', 'p',
  	F_INT2VECTORIN, F_INT2VECTOROUT},
diff -dcrpN pgsql.orig/src/backend/catalog/genbki.sh pgsql-cid64/src/backend/catalog/genbki.sh
*** pgsql.orig/src/backend/catalog/genbki.sh	2008-01-01 20:45:48.000000000 +0100
--- pgsql-cid64/src/backend/catalog/genbki.sh	2008-03-04 16:53:46.000000000 +0100
*************** for dir in $INCLUDE_DIRS; do
*** 114,119 ****
--- 114,136 ----
      fi
  done
  
+ # Deduce CIDSTORAGELEN from pg_config.h / USE_64BIT_COMMANDID
+ for dir in $INCLUDE_DIRS; do
+     if [ -f "$dir/pg_config.h" ]; then
+ 	HUGECID=`grep '^#define[    ]*USE_64BIT_COMMANDID' $dir/pg_config.h | $AWK '{ print $3 }'`
+ 	break
+     fi
+ done
+ if [ "$HUGECID" == "1" ]; then
+     CIDSTORAGELEN="8"
+     CIDSTORAGEALIGN="d"
+     CIDPASSBYVAL="f"
+ else
+     CIDSTORAGELEN="4"
+     CIDSTORAGEALIGN="i"
+     CIDPASSBYVAL="t"
+ fi
+ 
  # Get BOOTSTRAP_SUPERUSERID from catalog/pg_authid.h
  for dir in $INCLUDE_DIRS; do
      if [ -f "$dir/catalog/pg_authid.h" ]; then
*************** sed -e "s/;[ 	]*$//g" \
*** 164,169 ****
--- 181,189 ----
      -e "s/(TransactionId/(xid/g" \
      -e "s/PGUID/$BOOTSTRAP_SUPERUSERID/g" \
      -e "s/NAMEDATALEN/$NAMEDATALEN/g" \
+     -e "s/CIDSTORAGELEN/$CIDSTORAGELEN/g" \
+     -e "s/CIDSTORAGEALIGN/$CIDSTORAGEALIGN/g" \
+     -e "s/CIDPASSBYVAL/$CIDPASSBYVAL/g" \
      -e "s/PGNSP/$PG_CATALOG_NAMESPACE/g" \
  | $AWK '
  # ----------------
diff -dcrpN pgsql.orig/src/backend/catalog/heap.c pgsql-cid64/src/backend/catalog/heap.c
*** pgsql.orig/src/backend/catalog/heap.c	2008-01-01 20:45:48.000000000 +0100
--- pgsql-cid64/src/backend/catalog/heap.c	2008-03-04 16:53:46.000000000 +0100
*************** static FormData_pg_attribute a3 = {
*** 117,123 ****
--- 117,127 ----
  static FormData_pg_attribute a4 = {
  	0, {"cmin"}, CIDOID, 0, sizeof(CommandId),
  	MinCommandIdAttributeNumber, 0, -1, -1,
+ #ifdef USE_64BIT_COMMANDID
+ 	false, 'p', 'd', true, false, false, true, 0
+ #else
  	true, 'p', 'i', true, false, false, true, 0
+ #endif
  };
  
  static FormData_pg_attribute a5 = {
*************** static FormData_pg_attribute a5 = {
*** 129,135 ****
--- 133,143 ----
  static FormData_pg_attribute a6 = {
  	0, {"cmax"}, CIDOID, 0, sizeof(CommandId),
  	MaxCommandIdAttributeNumber, 0, -1, -1,
+ #ifdef USE_64BIT_COMMANDID
+ 	false, 'p', 'd', true, false, false, true, 0
+ #else
  	true, 'p', 'i', true, false, false, true, 0
+ #endif
  };
  
  /*
diff -dcrpN pgsql.orig/src/backend/catalog/Makefile pgsql-cid64/src/backend/catalog/Makefile
*** pgsql.orig/src/backend/catalog/Makefile	2008-03-02 13:44:44.000000000 +0100
--- pgsql-cid64/src/backend/catalog/Makefile	2008-03-04 16:55:51.000000000 +0100
*************** postgres.description: postgres.bki ;
*** 46,52 ****
  
  postgres.shdescription: postgres.bki ;
  
! postgres.bki: genbki.sh $(POSTGRES_BKI_SRCS) $(top_builddir)/src/include/pg_config_manual.h
  	AWK='$(AWK)' $(SHELL) $< $(pg_includes) --set-version=$(VERSION) -o postgres $(POSTGRES_BKI_SRCS)
  
  .PHONY: install-data
--- 46,52 ----
  
  postgres.shdescription: postgres.bki ;
  
! postgres.bki: genbki.sh $(POSTGRES_BKI_SRCS) $(top_builddir)/src/include/pg_config_manual.h $(top_builddir)/src/include/pg_config.h
  	AWK='$(AWK)' $(SHELL) $< $(pg_includes) --set-version=$(VERSION) -o postgres $(POSTGRES_BKI_SRCS)
  
  .PHONY: install-data
diff -dcrpN pgsql.orig/src/include/catalog/pg_attribute.h pgsql-cid64/src/include/catalog/pg_attribute.h
*** pgsql.orig/src/include/catalog/pg_attribute.h	2008-01-01 20:45:56.000000000 +0100
--- pgsql-cid64/src/include/catalog/pg_attribute.h	2008-03-04 16:53:46.000000000 +0100
*************** DATA(insert ( 1247 typdefault		25 -1 -1 
*** 278,286 ****
  DATA(insert ( 1247 ctid				27 0  6  -1 0 -1 -1 f p s t f f t 0));
  DATA(insert ( 1247 oid				26 0  4  -2 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1247 xmin				28 0  4  -3 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1247 cmin				29 0  4  -4 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1247 xmax				28 0  4  -5 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1247 cmax				29 0  4  -6 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1247 tableoid			26 0  4  -7 0 -1 -1 t p i t f f t 0));
  
  /* ----------------
--- 278,286 ----
  DATA(insert ( 1247 ctid				27 0  6  -1 0 -1 -1 f p s t f f t 0));
  DATA(insert ( 1247 oid				26 0  4  -2 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1247 xmin				28 0  4  -3 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1247 cmin				29 0  CIDSTORAGELEN  -4 0 -1 -1 CIDPASSBYVAL p CIDSTORAGEALIGN t f f t 0));
  DATA(insert ( 1247 xmax				28 0  4  -5 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1247 cmax				29 0  CIDSTORAGELEN  -6 0 -1 -1 CIDPASSBYVAL p CIDSTORAGEALIGN t f f t 0));
  DATA(insert ( 1247 tableoid			26 0  4  -7 0 -1 -1 t p i t f f t 0));
  
  /* ----------------
*************** DATA(insert ( 1255 proacl		  1034 -1 -1 
*** 334,342 ****
  DATA(insert ( 1255 ctid				27 0  6  -1 0 -1 -1 f p s t f f t 0));
  DATA(insert ( 1255 oid				26 0  4  -2 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1255 xmin				28 0  4  -3 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1255 cmin				29 0  4  -4 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1255 xmax				28 0  4  -5 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1255 cmax				29 0  4  -6 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1255 tableoid			26 0  4  -7 0 -1 -1 t p i t f f t 0));
  
  /* ----------------
--- 334,342 ----
  DATA(insert ( 1255 ctid				27 0  6  -1 0 -1 -1 f p s t f f t 0));
  DATA(insert ( 1255 oid				26 0  4  -2 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1255 xmin				28 0  4  -3 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1255 cmin				29 0  CIDSTORAGELEN  -4 0 -1 -1 CIDPASSBYVAL p CIDSTORAGEALIGN t f f t 0));
  DATA(insert ( 1255 xmax				28 0  4  -5 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1255 cmax				29 0  CIDSTORAGELEN  -6 0 -1 -1 CIDPASSBYVAL p CIDSTORAGEALIGN t f f t 0));
  DATA(insert ( 1255 tableoid			26 0  4  -7 0 -1 -1 t p i t f f t 0));
  
  /* ----------------
*************** DATA(insert ( 1249 attinhcount		23 -1  4
*** 382,390 ****
  DATA(insert ( 1249 ctid				27 0  6  -1 0 -1 -1 f p s t f f t 0));
  /* no OIDs in pg_attribute */
  DATA(insert ( 1249 xmin				28 0  4  -3 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1249 cmin				29 0  4  -4 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1249 xmax				28 0  4  -5 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1249 cmax				29 0  4  -6 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1249 tableoid			26 0  4  -7 0 -1 -1 t p i t f f t 0));
  
  /* ----------------
--- 382,390 ----
  DATA(insert ( 1249 ctid				27 0  6  -1 0 -1 -1 f p s t f f t 0));
  /* no OIDs in pg_attribute */
  DATA(insert ( 1249 xmin				28 0  4  -3 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1249 cmin				29 0  CIDSTORAGELEN  -4 0 -1 -1 CIDPASSBYVAL p CIDSTORAGEALIGN t f f t 0));
  DATA(insert ( 1249 xmax				28 0  4  -5 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1249 cmax				29 0  CIDSTORAGELEN  -6 0 -1 -1 CIDPASSBYVAL p CIDSTORAGEALIGN t f f t 0));
  DATA(insert ( 1249 tableoid			26 0  4  -7 0 -1 -1 t p i t f f t 0));
  
  /* ----------------
*************** DATA(insert ( 1259 reloptions	  1009 -1 
*** 450,458 ****
  DATA(insert ( 1259 ctid				27 0  6  -1 0 -1 -1 f p s t f f t 0));
  DATA(insert ( 1259 oid				26 0  4  -2 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1259 xmin				28 0  4  -3 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1259 cmin				29 0  4  -4 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1259 xmax				28 0  4  -5 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1259 cmax				29 0  4  -6 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1259 tableoid			26 0  4  -7 0 -1 -1 t p i t f f t 0));
  
  /* ----------------
--- 450,458 ----
  DATA(insert ( 1259 ctid				27 0  6  -1 0 -1 -1 f p s t f f t 0));
  DATA(insert ( 1259 oid				26 0  4  -2 0 -1 -1 t p i t f f t 0));
  DATA(insert ( 1259 xmin				28 0  4  -3 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1259 cmin				29 0  CIDSTORAGELEN  -4 0 -1 -1 CIDPASSBYVAL p CIDSTORAGEALIGN t f f t 0));
  DATA(insert ( 1259 xmax				28 0  4  -5 0 -1 -1 t p i t f f t 0));
! DATA(insert ( 1259 cmax				29 0  CIDSTORAGELEN  -6 0 -1 -1 CIDPASSBYVAL p CIDSTORAGEALIGN t f f t 0));
  DATA(insert ( 1259 tableoid			26 0  4  -7 0 -1 -1 t p i t f f t 0));
  
  /* ----------------
diff -dcrpN pgsql.orig/src/include/catalog/pg_control.h pgsql-cid64/src/include/catalog/pg_control.h
*** pgsql.orig/src/include/catalog/pg_control.h	2008-02-18 13:50:12.000000000 +0100
--- pgsql-cid64/src/include/catalog/pg_control.h	2008-03-04 21:14:04.000000000 +0100
*************** typedef struct ControlFileData
*** 145,150 ****
--- 145,152 ----
  	char		lc_collate[LOCALE_NAME_BUFLEN];
  	char		lc_ctype[LOCALE_NAME_BUFLEN];
  
+ 	uint32		enable64bitCommandId;
+ 
  	/* CRC of all above ... MUST BE LAST! */
  	pg_crc32	crc;
  } ControlFileData;
diff -dcrpN pgsql.orig/src/include/catalog/pg_type.h pgsql-cid64/src/include/catalog/pg_type.h
*** pgsql.orig/src/include/catalog/pg_type.h	2008-01-01 20:45:57.000000000 +0100
--- pgsql-cid64/src/include/catalog/pg_type.h	2008-03-04 16:59:27.000000000 +0100
*************** DATA(insert OID = 28 (	xid		   PGNSP PGU
*** 314,320 ****
  DESCR("transaction id");
  #define XIDOID 28
  
! DATA(insert OID = 29 (	cid		   PGNSP PGUID	4 t b t \054 0	 0 1012 cidin cidout cidrecv cidsend - - - i p f 0 -1 0 _null_ _null_ ));
  DESCR("command identifier type, sequence in transaction id");
  #define CIDOID 29
  
--- 314,320 ----
  DESCR("transaction id");
  #define XIDOID 28
  
! DATA(insert OID = 29 (	cid		   PGNSP PGUID	CIDSTORAGELEN CIDPASSBYVAL b t \054 0	 0 1012 cidin cidout cidrecv cidsend - - - CIDSTORAGEALIGN p f 0 -1 0 _null_ _null_ ));
  DESCR("command identifier type, sequence in transaction id");
  #define CIDOID 29
  
diff -dcrpN pgsql.orig/src/include/c.h pgsql-cid64/src/include/c.h
*** pgsql.orig/src/include/c.h	2008-03-02 13:44:45.000000000 +0100
--- pgsql-cid64/src/include/c.h	2008-03-04 21:05:23.000000000 +0100
*************** typedef TransactionId MultiXactId;
*** 382,388 ****
--- 382,392 ----
  
  typedef uint32 MultiXactOffset;
  
+ #ifdef USE_64BIT_COMMANDID
+ typedef uint64 CommandId;
+ #else
  typedef uint32 CommandId;
+ #endif
  
  #define FirstCommandId	((CommandId) 0)
  
diff -dcrpN pgsql.orig/src/include/pg_config.h.in pgsql-cid64/src/include/pg_config.h.in
*** pgsql.orig/src/include/pg_config.h.in	2008-02-18 13:50:12.000000000 +0100
--- pgsql-cid64/src/include/pg_config.h.in	2008-03-04 16:53:46.000000000 +0100
***************
*** 656,661 ****
--- 656,665 ----
     */
  #undef UINT64_FORMAT
  
+ /* Define to 1 if you want 64-bit CommandId support. (--enable-huge-commandid)
+    */
+ #undef USE_64BIT_COMMANDID
+ 
  /* Define to 1 to build with assertion checks. (--enable-cassert) */
  #undef USE_ASSERT_CHECKING
  
diff -dcrpN pgsql.orig/src/include/postgres.h pgsql-cid64/src/include/postgres.h
*** pgsql.orig/src/include/postgres.h	2008-01-01 20:45:56.000000000 +0100
--- pgsql-cid64/src/include/postgres.h	2008-03-04 16:53:46.000000000 +0100
*************** typedef Datum *DatumPtr;
*** 462,475 ****
--- 462,483 ----
   *		Returns command identifier value of a datum.
   */
  
+ #ifdef USE_64BIT_COMMANDID
+ #define DatumGetCommandId(X) ((CommandId) DatumGetInt64(X))
+ #else
  #define DatumGetCommandId(X) ((CommandId) GET_4_BYTES(X))
+ #endif
  
  /*
   * CommandIdGetDatum
   *		Returns datum representation for a command identifier.
   */
  
+ #ifdef USE_64BIT_COMMANDID
+ #define CommandIdGetDatum(X) ((Datum) Int64GetDatum(X))
+ #else
  #define CommandIdGetDatum(X) ((Datum) SET_4_BYTES(X))
+ #endif
  
  /*
   * DatumGetPointer

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to