Index: src/backend/access/common/printtup.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/access/common/printtup.c,v
retrieving revision 1.78
diff -c -r1.78 printtup.c
*** src/backend/access/common/printtup.c	6 Aug 2003 17:46:45 -0000	1.78
--- src/backend/access/common/printtup.c	21 Nov 2003 03:57:34 -0000
***************
*** 237,246 ****
   * Get the lookup info that printtup() needs
   */
  static void
! printtup_prepare_info(DR_printtup *myState, TupleDesc typeinfo, int numAttrs)
  {
  	int16	   *formats = myState->portal->formats;
  	int			i;
  
  	if (myState->myinfo)
  		pfree(myState->myinfo); /* get rid of any old data */
--- 237,247 ----
   * Get the lookup info that printtup() needs
   */
  static void
! printtup_prepare_info(DR_printtup *myState, TupleDesc typeinfo)
  {
  	int16	   *formats = myState->portal->formats;
  	int			i;
+ 	int			numAttrs = typeinfo->natts;
  
  	if (myState->myinfo)
  		pfree(myState->myinfo); /* get rid of any old data */
***************
*** 294,300 ****
  
  	/* Set or update my derived attribute info, if needed */
  	if (myState->attrinfo != typeinfo || myState->nattrs != natts)
! 		printtup_prepare_info(myState, typeinfo, natts);
  
  	/*
  	 * Prepare a DataRow message
--- 295,301 ----
  
  	/* Set or update my derived attribute info, if needed */
  	if (myState->attrinfo != typeinfo || myState->nattrs != natts)
! 		printtup_prepare_info(myState, typeinfo);
  
  	/*
  	 * Prepare a DataRow message
***************
*** 380,386 ****
  
  	/* Set or update my derived attribute info, if needed */
  	if (myState->attrinfo != typeinfo || myState->nattrs != natts)
! 		printtup_prepare_info(myState, typeinfo, natts);
  
  	/*
  	 * tell the frontend to expect new tuple data (in ASCII style)
--- 381,387 ----
  
  	/* Set or update my derived attribute info, if needed */
  	if (myState->attrinfo != typeinfo || myState->nattrs != natts)
! 		printtup_prepare_info(myState, typeinfo);
  
  	/*
  	 * tell the frontend to expect new tuple data (in ASCII style)
***************
*** 584,590 ****
  
  	/* Set or update my derived attribute info, if needed */
  	if (myState->attrinfo != typeinfo || myState->nattrs != natts)
! 		printtup_prepare_info(myState, typeinfo, natts);
  
  	/*
  	 * tell the frontend to expect new tuple data (in binary style)
--- 585,591 ----
  
  	/* Set or update my derived attribute info, if needed */
  	if (myState->attrinfo != typeinfo || myState->nattrs != natts)
! 		printtup_prepare_info(myState, typeinfo);
  
  	/*
  	 * tell the frontend to expect new tuple data (in binary style)
Index: src/backend/access/common/tupdesc.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/access/common/tupdesc.c,v
retrieving revision 1.100
diff -c -r1.100 tupdesc.c
*** src/backend/access/common/tupdesc.c	25 Sep 2003 06:57:56 -0000	1.100
--- src/backend/access/common/tupdesc.c	17 Nov 2003 20:28:23 -0000
***************
*** 266,277 ****
  		 * disregard attrelid, attnum (it was used to place the row in the
  		 * attrs array) and everything derived from the column datatype.
  		 */
- 		if (strcmp(NameStr(attr1->attname), NameStr(attr2->attname)) != 0)
- 			return false;
  		if (attr1->atttypid != attr2->atttypid)
  			return false;
  		if (attr1->attstattarget != attr2->attstattarget)
  			return false;
  		if (attr1->atttypmod != attr2->atttypmod)
  			return false;
  		if (attr1->attstorage != attr2->attstorage)
--- 266,279 ----
  		 * disregard attrelid, attnum (it was used to place the row in the
  		 * attrs array) and everything derived from the column datatype.
  		 */
  		if (attr1->atttypid != attr2->atttypid)
  			return false;
+ 		if (strcmp(NameStr(attr1->attname), NameStr(attr2->attname)) != 0)
+ 			return false;
  		if (attr1->attstattarget != attr2->attstattarget)
  			return false;
+ 		if (attr1->attpos != attr2->attpos)
+ 			return false;
  		if (attr1->atttypmod != attr2->atttypmod)
  			return false;
  		if (attr1->attstorage != attr2->attstorage)
***************
*** 402,407 ****
--- 404,410 ----
  	att->atttypmod = typmod;
  
  	att->attnum = attributeNumber;
+ 	att->attpos = attributeNumber;
  	att->attndims = attdim;
  	att->attisset = attisset;
  
Index: src/backend/bootstrap/bootstrap.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/bootstrap/bootstrap.c,v
retrieving revision 1.167
diff -c -r1.167 bootstrap.c
*** src/backend/bootstrap/bootstrap.c	19 Nov 2003 15:55:07 -0000	1.167
--- src/backend/bootstrap/bootstrap.c	20 Nov 2003 17:54:34 -0000
***************
*** 675,680 ****
--- 675,681 ----
  	namestrcpy(&attrtypes[attnum]->attname, name);
  	elog(DEBUG4, "column %s %s", NameStr(attrtypes[attnum]->attname), type);
  	attrtypes[attnum]->attnum = attnum + 1;		/* fillatt */
+ 	attrtypes[attnum]->attpos = attnum + 1;
  
  	typeoid = gettype(type);
  
Index: src/backend/catalog/heap.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/catalog/heap.c,v
retrieving revision 1.255
diff -c -r1.255 heap.c
*** src/backend/catalog/heap.c	12 Nov 2003 21:15:48 -0000	1.255
--- src/backend/catalog/heap.c	17 Nov 2003 10:56:10 -0000
***************
*** 97,134 ****
  
  static FormData_pg_attribute a1 = {
  	0, {"ctid"}, TIDOID, 0, sizeof(ItemPointerData),
! 	SelfItemPointerAttributeNumber, 0, -1, -1,
! 	false, 'p', false, 'i', true, false, false, true, 0
  };
  
  static FormData_pg_attribute a2 = {
  	0, {"oid"}, OIDOID, 0, sizeof(Oid),
! 	ObjectIdAttributeNumber, 0, -1, -1,
! 	true, 'p', false, 'i', true, false, false, true, 0
  };
  
  static FormData_pg_attribute a3 = {
  	0, {"xmin"}, XIDOID, 0, sizeof(TransactionId),
! 	MinTransactionIdAttributeNumber, 0, -1, -1,
! 	true, 'p', false, 'i', true, false, false, true, 0
  };
  
  static FormData_pg_attribute a4 = {
  	0, {"cmin"}, CIDOID, 0, sizeof(CommandId),
! 	MinCommandIdAttributeNumber, 0, -1, -1,
! 	true, 'p', false, 'i', true, false, false, true, 0
  };
  
  static FormData_pg_attribute a5 = {
  	0, {"xmax"}, XIDOID, 0, sizeof(TransactionId),
! 	MaxTransactionIdAttributeNumber, 0, -1, -1,
! 	true, 'p', false, 'i', true, false, false, true, 0
  };
  
  static FormData_pg_attribute a6 = {
  	0, {"cmax"}, CIDOID, 0, sizeof(CommandId),
! 	MaxCommandIdAttributeNumber, 0, -1, -1,
! 	true, 'p', false, 'i', true, false, false, true, 0
  };
  
  /*
--- 97,134 ----
  
  static FormData_pg_attribute a1 = {
  	0, {"ctid"}, TIDOID, 0, sizeof(ItemPointerData),
! 	SelfItemPointerAttributeNumber, SelfItemPointerAttributeNumber,
! 	0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0
  };
  
  static FormData_pg_attribute a2 = {
  	0, {"oid"}, OIDOID, 0, sizeof(Oid),
! 	ObjectIdAttributeNumber, ObjectIdAttributeNumber,
! 	0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0
  };
  
  static FormData_pg_attribute a3 = {
  	0, {"xmin"}, XIDOID, 0, sizeof(TransactionId),
! 	MinTransactionIdAttributeNumber, MinTransactionIdAttributeNumber,
! 	0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0
  };
  
  static FormData_pg_attribute a4 = {
  	0, {"cmin"}, CIDOID, 0, sizeof(CommandId),
! 	MinCommandIdAttributeNumber, MinCommandIdAttributeNumber,
! 	0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0
  };
  
  static FormData_pg_attribute a5 = {
  	0, {"xmax"}, XIDOID, 0, sizeof(TransactionId),
! 	MaxTransactionIdAttributeNumber, MaxTransactionIdAttributeNumber,
! 	0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0
  };
  
  static FormData_pg_attribute a6 = {
  	0, {"cmax"}, CIDOID, 0, sizeof(CommandId),
! 	MaxCommandIdAttributeNumber, MaxCommandIdAttributeNumber,
! 	0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0
  };
  
  /*
***************
*** 139,146 ****
   */
  static FormData_pg_attribute a7 = {
  	0, {"tableoid"}, OIDOID, 0, sizeof(Oid),
! 	TableOidAttributeNumber, 0, -1, -1,
! 	true, 'p', false, 'i', true, false, false, true, 0
  };
  
  static Form_pg_attribute SysAtt[] = {&a1, &a2, &a3, &a4, &a5, &a6, &a7};
--- 139,146 ----
   */
  static FormData_pg_attribute a7 = {
  	0, {"tableoid"}, OIDOID, 0, sizeof(Oid),
! 	TableOidAttributeNumber, TableOidAttributeNumber,
! 	0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0
  };
  
  static Form_pg_attribute SysAtt[] = {&a1, &a2, &a3, &a4, &a5, &a6, &a7};
Index: src/backend/commands/copy.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/copy.c,v
retrieving revision 1.213
diff -c -r1.213 copy.c
*** src/backend/commands/copy.c	6 Oct 2003 02:38:53 -0000	1.213
--- src/backend/commands/copy.c	20 Nov 2003 01:39:11 -0000
***************
*** 2142,2153 ****
  	}
  }
  
  /*
   * CopyGetAttnums - build an integer list of attnums to be copied
   *
   * The input attnamelist is either the user-specified column list,
   * or NIL if there was none (in which case we want all the non-dropped
!  * columns).
   */
  static List *
  CopyGetAttnums(Relation rel, List *attnamelist)
--- 2142,2162 ----
  	}
  }
  
+ static int
+ CompareByPosition(const void *ptr1, const void *ptr2)
+ {
+ 	Form_pg_attribute attr1 = *(Form_pg_attribute *) ptr1;
+ 	Form_pg_attribute attr2 = *(Form_pg_attribute *) ptr2;
+ 
+ 	return attr1->attpos - attr2->attpos;
+ }
+ 
  /*
   * CopyGetAttnums - build an integer list of attnums to be copied
   *
   * The input attnamelist is either the user-specified column list,
   * or NIL if there was none (in which case we want all the non-dropped
!  * columns, sorted in ascending attpos order).
   */
  static List *
  CopyGetAttnums(Relation rel, List *attnamelist)
***************
*** 2157,2173 ****
  	if (attnamelist == NIL)
  	{
  		/* Generate default column list */
! 		TupleDesc	tupDesc = RelationGetDescr(rel);
! 		Form_pg_attribute *attr = tupDesc->attrs;
! 		int			attr_count = tupDesc->natts;
! 		int			i;
  
! 		for (i = 0; i < attr_count; i++)
  		{
! 			if (attr[i]->attisdropped)
  				continue;
! 			attnums = lappendi(attnums, i + 1);
  		}
  	}
  	else
  	{
--- 2166,2192 ----
  	if (attnamelist == NIL)
  	{
  		/* Generate default column list */
! 		TupleDesc tupDesc;
! 		Form_pg_attribute *attrs;
! 		int i;
  
! 		/*
! 		 * Make a copy of the tupDesc, so that we can modify it while
! 		 * doing the sort
! 		 */
! 		tupDesc = CreateTupleDescCopy(RelationGetDescr(rel));
! 		attrs = tupDesc->attrs;
! 
! 		qsort(attrs, tupDesc->natts, sizeof(*attrs), CompareByPosition);
! 
! 		for (i = 0; i < tupDesc->natts; i++)
  		{
! 			if (attrs[i]->attisdropped)
  				continue;
! 			attnums = lappendi(attnums, attrs[i]->attnum);
  		}
+ 
+ 		FreeTupleDesc(tupDesc);
  	}
  	else
  	{
Index: src/backend/parser/parse_relation.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/parser/parse_relation.c,v
retrieving revision 1.90
diff -c -r1.90 parse_relation.c
*** src/backend/parser/parse_relation.c	25 Sep 2003 06:58:01 -0000	1.90
--- src/backend/parser/parse_relation.c	21 Nov 2003 07:11:41 -0000
***************
*** 1190,1196 ****
  	return rte;
  }
  
! /* expandRTE()
   *
   * Given a rangetable entry, create lists of its column names (aliases if
   * provided, else real names) and Vars for each column.  Only user columns
--- 1190,1206 ----
  	return rte;
  }
  
! static int
! compareByPosition2(const void *ptr1, const void *ptr2)
! {
! 	Form_pg_attribute attr1 = *(Form_pg_attribute *) ptr1;
! 	Form_pg_attribute attr2 = *(Form_pg_attribute *) ptr2;
! 
! 	return attr1->attpos - attr2->attpos;
! }
! 
! /*
!  * expandRTE()
   *
   * Given a rangetable entry, create lists of its column names (aliases if
   * provided, else real names) and Vars for each column.  Only user columns
***************
*** 1220,1237 ****
  	{
  		case RTE_RELATION:
  			{
! 				/* Ordinary relation RTE */
  				Relation	rel;
  				int			maxattrs;
  				int			numaliases;
  
  				rel = heap_open(rte->relid, AccessShareLock);
  				maxattrs = RelationGetNumberOfAttributes(rel);
  				numaliases = length(rte->eref->colnames);
  
  				for (varattno = 0; varattno < maxattrs; varattno++)
  				{
! 					Form_pg_attribute attr = rel->rd_att->attrs[varattno];
  
  					if (attr->attisdropped)
  						continue;
--- 1230,1262 ----
  	{
  		case RTE_RELATION:
  			{
! 				/*
! 				 * Ordinary relation RTE. When producing the column
! 				 * list for a relation, we need to ensure that it is
! 				 * ordered by the "logical positions" (the attpos
! 				 * fields) of the attributes in the relation.
! 				 */
  				Relation	rel;
+ 				TupleDesc	tupDesc;
+ 				Form_pg_attribute *attrs;
  				int			maxattrs;
  				int			numaliases;
  
  				rel = heap_open(rte->relid, AccessShareLock);
+ 				/*
+ 				 * Make a copy of the tupDesc, so that we can modify
+ 				 * it in-place during the sort.
+ 				 */
+ 				tupDesc = CreateTupleDescCopy(RelationGetDescr(rel));
+ 				attrs = tupDesc->attrs;
  				maxattrs = RelationGetNumberOfAttributes(rel);
  				numaliases = length(rte->eref->colnames);
  
+ 				qsort(attrs, tupDesc->natts, sizeof(*attrs), compareByPosition2);
+ 
  				for (varattno = 0; varattno < maxattrs; varattno++)
  				{
! 					Form_pg_attribute attr = attrs[varattno];
  
  					if (attr->attisdropped)
  						continue;
***************
*** 1259,1264 ****
--- 1284,1290 ----
  					}
  				}
  
+ 				FreeTupleDesc(tupDesc);
  				heap_close(rel, AccessShareLock);
  			}
  			break;
Index: src/backend/parser/parse_target.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/parser/parse_target.c,v
retrieving revision 1.113
diff -c -r1.113 parse_target.c
*** src/backend/parser/parse_target.c	25 Sep 2003 06:58:01 -0000	1.113
--- src/backend/parser/parse_target.c	21 Nov 2003 04:43:27 -0000
***************
*** 443,448 ****
--- 443,456 ----
  	resnode->resname = colname;
  }
  
+ static int
+ compareByPosition_xxx(const void *ptr1, const void *ptr2)
+ {
+ 	Form_pg_attribute attr1 = *(Form_pg_attribute *) ptr1;
+ 	Form_pg_attribute attr2 = *(Form_pg_attribute *) ptr2;
+ 
+ 	return attr1->attpos - attr2->attpos;
+ }
  
  /*
   * checkInsertTargets -
***************
*** 458,483 ****
  	if (cols == NIL)
  	{
  		/*
! 		 * Generate default column list for INSERT.
  		 */
! 		Form_pg_attribute *attr = pstate->p_target_relation->rd_att->attrs;
! 		int			numcol = pstate->p_target_relation->rd_rel->relnatts;
  		int			i;
  
! 		for (i = 0; i < numcol; i++)
  		{
  			ResTarget  *col;
  
! 			if (attr[i]->attisdropped)
  				continue;
  
  			col = makeNode(ResTarget);
! 			col->name = pstrdup(NameStr(attr[i]->attname));
  			col->indirection = NIL;
  			col->val = NULL;
  			cols = lappend(cols, col);
! 			*attrnos = lappendi(*attrnos, i + 1);
  		}
  	}
  	else
  	{
--- 466,501 ----
  	if (cols == NIL)
  	{
  		/*
! 		 * Generate default column list for INSERT. If no column list
! 		 * has been supplied, we generate a column list containing all
! 		 * the non-dropped user columns in the table, sorted in
! 		 * ascending 'attpos' order.
  		 */
! 		TupleDesc		tupDesc;
! 		Form_pg_attribute *attrs;
  		int			i;
  
! 		tupDesc = CreateTupleDescCopy(pstate->p_target_relation->rd_att);
! 		attrs = tupDesc->attrs;
! 
! 		qsort(attrs, tupDesc->natts, sizeof(*attrs), compareByPosition_xxx);
! 
! 		for (i = 0; i < tupDesc->natts; i++)
  		{
  			ResTarget  *col;
  
! 			if (attrs[i]->attisdropped)
  				continue;
  
  			col = makeNode(ResTarget);
! 			col->name = pstrdup(NameStr(attrs[i]->attname));
  			col->indirection = NIL;
  			col->val = NULL;
  			cols = lappend(cols, col);
! 			*attrnos = lappendi(*attrnos, attrs[i]->attnum);
  		}
+ 
+ 		FreeTupleDesc(tupDesc);
  	}
  	else
  	{
Index: src/bin/psql/describe.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/bin/psql/describe.c,v
retrieving revision 1.87
diff -c -r1.87 describe.c
*** src/bin/psql/describe.c	26 Oct 2003 02:53:45 -0000	1.87
--- src/bin/psql/describe.c	18 Nov 2003 16:47:42 -0000
***************
*** 734,740 ****
  	appendPQExpBuffer(&buf, "\nWHERE a.attrelid = '%s' AND a.attnum > 0 AND NOT a.attisdropped", oid);
  	if (tableinfo.relkind == 'i')
  		appendPQExpBuffer(&buf, " AND a.attrelid = i.indexrelid");
! 	appendPQExpBuffer(&buf, "\nORDER BY a.attnum");
  
  	res = PSQLexec(buf.data, false);
  	if (!res)
--- 734,740 ----
  	appendPQExpBuffer(&buf, "\nWHERE a.attrelid = '%s' AND a.attnum > 0 AND NOT a.attisdropped", oid);
  	if (tableinfo.relkind == 'i')
  		appendPQExpBuffer(&buf, " AND a.attrelid = i.indexrelid");
! 	appendPQExpBuffer(&buf, "\nORDER BY a.attpos");
  
  	res = PSQLexec(buf.data, false);
  	if (!res)
Index: src/include/catalog/catversion.h
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/include/catalog/catversion.h,v
retrieving revision 1.211
diff -c -r1.211 catversion.h
*** src/include/catalog/catversion.h	12 Nov 2003 21:15:57 -0000	1.211
--- src/include/catalog/catversion.h	17 Nov 2003 18:41:41 -0000
***************
*** 53,58 ****
   */
  
  /*							yyyymmddN */
! #define CATALOG_VERSION_NO	200311101
  
  #endif
--- 53,58 ----
   */
  
  /*							yyyymmddN */
! #define CATALOG_VERSION_NO	200311171
  
  #endif
Index: src/include/catalog/pg_attribute.h
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/include/catalog/pg_attribute.h,v
retrieving revision 1.105
diff -c -r1.105 pg_attribute.h
*** src/include/catalog/pg_attribute.h	16 Oct 2003 22:52:22 -0000	1.105
--- src/include/catalog/pg_attribute.h	19 Nov 2003 22:57:02 -0000
***************
*** 11,24 ****
   * $Id: pg_attribute.h,v 1.105 2003/10/16 22:52:22 tgl Exp $
   *
   * NOTES
!  *	  the genbki.sh script reads this file and generates .bki
   *	  information from the DATA() statements.
   *
!  *	  utils/cache/relcache.c requires hard-coded tuple descriptors
!  *	  for some of the system catalogs.	So if the schema for any of
!  *	  these changes, be sure and change the appropriate Schema_xxx
!  *	  macros!  -cim 2/5/91
!  *
   *-------------------------------------------------------------------------
   */
  #ifndef PG_ATTRIBUTE_H
--- 11,22 ----
   * $Id: pg_attribute.h,v 1.105 2003/10/16 22:52:22 tgl Exp $
   *
   * NOTES
!  *	  The genbki.sh script reads this file and generates .bki
   *	  information from the DATA() statements.
   *
!  *	  utils/cache/relcache.c requires hard-coded tuple descriptors for
!  *	  some of the system catalogs. So if the schema for any of these
!  *	  changes, be sure to change the approach Schema_pg_ constants!
   *-------------------------------------------------------------------------
   */
  #ifndef PG_ATTRIBUTE_H
***************
*** 46,55 ****
  	NameData	attname;		/* name of attribute */
  
  	/*
! 	 * atttypid is the OID of the instance in Catalog Class pg_type that
! 	 * defines the data type of this attribute (e.g. int4).  Information
! 	 * in that instance is redundant with the attlen, attbyval, and
! 	 * attalign attributes of this instance, so they had better match or
  	 * Postgres will fail.
  	 */
  	Oid			atttypid;
--- 44,53 ----
  	NameData	attname;		/* name of attribute */
  
  	/*
! 	 * atttypid is the OID of the row in pg_type that defines the data
! 	 * type of this attribute (e.g. int4).  Information in that
! 	 * instance is redundant with the attlen, attbyval, and attalign
! 	 * attributes of this instance, so they had better match or
  	 * Postgres will fail.
  	 */
  	Oid			atttypid;
***************
*** 85,90 ****
--- 83,98 ----
  	int2		attnum;
  
  	/*
+ 	 * attpos is the "logical position" of this attribute within the
+ 	 * relation that it belongs to. This is used so that we can
+ 	 * separate the on-disk format of a relation from the order in
+ 	 * which the relation's columns are presented to the user (we
+ 	 * store columns in attnum order, but present them in attpos
+ 	 * order).
+ 	 */
+ 	int2		attpos;
+ 
+ 	/*
  	 * attndims is the declared number of dimensions, if an array type,
  	 * otherwise zero.
  	 */
***************
*** 174,216 ****
   * ----------------
   */
  
! #define Natts_pg_attribute				18
  #define Anum_pg_attribute_attrelid		1
  #define Anum_pg_attribute_attname		2
  #define Anum_pg_attribute_atttypid		3
  #define Anum_pg_attribute_attstattarget 4
  #define Anum_pg_attribute_attlen		5
  #define Anum_pg_attribute_attnum		6
! #define Anum_pg_attribute_attndims		7
! #define Anum_pg_attribute_attcacheoff	8
! #define Anum_pg_attribute_atttypmod		9
! #define Anum_pg_attribute_attbyval		10
! #define Anum_pg_attribute_attstorage	11
! #define Anum_pg_attribute_attisset		12
! #define Anum_pg_attribute_attalign		13
! #define Anum_pg_attribute_attnotnull	14
! #define Anum_pg_attribute_atthasdef		15
! #define Anum_pg_attribute_attisdropped	16
! #define Anum_pg_attribute_attislocal	17
! #define Anum_pg_attribute_attinhcount	18
  
  
- 
- /* ----------------
-  *		SCHEMA_ macros for declaring hardcoded tuple descriptors.
-  *		these are used in utils/cache/relcache.c
-  * ----------------
- #define SCHEMA_NAME(x) CppConcat(Name_,x)
- #define SCHEMA_DESC(x) CppConcat(Desc_,x)
- #define SCHEMA_NATTS(x) CppConcat(Natts_,x)
- #define SCHEMA_DEF(x) \
- 	FormData_pg_attribute \
- 	SCHEMA_DESC(x) [ SCHEMA_NATTS(x) ] = \
- 	{ \
- 		CppConcat(Schema_,x) \
- 	}
-  */
- 
  /* ----------------
   *		initial contents of pg_attribute
   *
--- 182,209 ----
   * ----------------
   */
  
! #define Natts_pg_attribute				19
  #define Anum_pg_attribute_attrelid		1
  #define Anum_pg_attribute_attname		2
  #define Anum_pg_attribute_atttypid		3
  #define Anum_pg_attribute_attstattarget 4
  #define Anum_pg_attribute_attlen		5
  #define Anum_pg_attribute_attnum		6
! #define Anum_pg_attribute_attpos        7
! #define Anum_pg_attribute_attndims		8
! #define Anum_pg_attribute_attcacheoff	9
! #define Anum_pg_attribute_atttypmod		10
! #define Anum_pg_attribute_attbyval		11
! #define Anum_pg_attribute_attstorage	12
! #define Anum_pg_attribute_attisset		13
! #define Anum_pg_attribute_attalign		14
! #define Anum_pg_attribute_attnotnull	15
! #define Anum_pg_attribute_atthasdef		16
! #define Anum_pg_attribute_attisdropped	17
! #define Anum_pg_attribute_attislocal	18
! #define Anum_pg_attribute_attinhcount	19
  
  
  /* ----------------
   *		initial contents of pg_attribute
   *
***************
*** 226,499 ****
   * ----------------
   */
  #define Schema_pg_type \
! { 1247, {"typname"},	   19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typnamespace"},  26, -1,	4,	2, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typowner"},	   23, -1,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typlen"},		   21, -1,	2,	4, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1247, {"typbyval"},	   16, -1,	1,	5, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typtype"},	   18, -1,	1,	6, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typisdefined"},  16, -1,	1,	7, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typdelim"},	   18, -1,	1,	8, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typrelid"},	   26, -1,	4,	9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typelem"},	   26, -1,	4, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typinput"},	   24, -1,	4, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typoutput"},	   24, -1,	4, 12, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typreceive"},    24, -1,	4, 13, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typsend"},	   24, -1,	4, 14, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typalign"},	   18, -1,	1, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typstorage"},    18, -1,	1, 16, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typnotnull"},    16, -1,	1, 17, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typbasetype"},   26, -1,	4, 18, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typtypmod"},	   23, -1,	4, 19, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typndims"},	   23, -1,	4, 20, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typdefaultbin"}, 25, -1, -1, 21, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1247, {"typdefault"},    25, -1, -1, 22, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }
! 
! 
! DATA(insert ( 1247 typname			19 -1 NAMEDATALEN	1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1247 typnamespace		26 -1 4   2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typowner			23 -1 4   3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typlen			21 -1 2   4 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1247 typbyval			16 -1 1   5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typtype			18 -1 1   6 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typisdefined		16 -1 1   7 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typdelim			18 -1 1   8 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typrelid			26 -1 4   9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typelem			26 -1 4  10 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typinput			24 -1 4  11 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typoutput		24 -1 4  12 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typreceive		24 -1 4  13 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typsend			24 -1 4  14 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typalign			18 -1 1  15 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typstorage		18 -1 1  16 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typnotnull		16 -1 1  17 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typbasetype		26 -1 4  18 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typtypmod		23 -1 4  19 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typndims			23 -1 4  20 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typdefaultbin	25 -1 -1 21 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1247 typdefault		25 -1 -1 22 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1247 ctid				27 0  6  -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1247 oid				26 0  4  -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 xmin				28 0  4  -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 cmin				29 0  4  -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 xmax				28 0  4  -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 cmax				29 0  4  -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_database
   * ----------------
   */
! DATA(insert ( 1262 datname			19 -1 NAMEDATALEN   1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 datdba			23 -1 4   2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 encoding			23 -1 4   3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datistemplate	16 -1 1   4 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1262 datallowconn		16 -1 1   5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1262 datlastsysoid	26 -1 4   6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datvacuumxid		28 -1 4   7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datfrozenxid		28 -1 4   8 0 -1 -1 t p f i t f f t 0));
  /* do not mark datpath as toastable; GetRawDatabaseInfo won't cope */
! DATA(insert ( 1262 datpath			25 -1 -1  9 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 datconfig	  1009 -1 -1 10 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1262 datacl		  1034 -1 -1 11 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1262 ctid				27 0  6  -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 oid				26 0  4  -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 xmin				28 0  4  -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 cmin				29 0  4  -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 xmax				28 0  4  -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 cmax				29 0  4  -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_proc
   * ----------------
   */
  #define Schema_pg_proc \
! { 1255, {"proname"},			19, -1, NAMEDATALEN,  1, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"pronamespace"},		26, -1, 4,	2, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"proowner"},			23, -1,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"prolang"},			26, -1,	4,	4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"proisagg"},			16, -1, 1,	5, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"prosecdef"},			16, -1,	1,	6, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"proisstrict"},		16, -1,	1,	7, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"proretset"},			16, -1,	1,	8, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"provolatile"},		18, -1,	1,	9, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"pronargs"},			21, -1,	2, 10, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1255, {"prorettype"},			26, -1,	4, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"proargtypes"},		30, -1, INDEX_MAX_KEYS*4, 12, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"prosrc"},				25, -1, -1, 13, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1255, {"probin"},				17, -1, -1, 14, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1255, {"proacl"},			  1034, -1, -1, 15, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }
! 
! DATA(insert ( 1255 proname			19 -1 NAMEDATALEN	1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1255 pronamespace		26 -1 4   2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 proowner			23 -1 4   3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 prolang			26 -1 4   4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 proisagg			16 -1 1   5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 prosecdef		16 -1 1   6 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 proisstrict		16 -1 1   7 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 proretset		16 -1 1   8 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 provolatile		18 -1 1   9 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 pronargs			21 -1 2  10 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1255 prorettype		26 -1 4  11 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 proargtypes		30 -1 INDEX_MAX_KEYS*4 12 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1255 prosrc			25 -1 -1 13 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 probin			17 -1 -1 14 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 proacl		  1034 -1 -1 15 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 ctid				27 0  6  -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1255 oid				26 0  4  -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 xmin				28 0  4  -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 cmin				29 0  4  -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 xmax				28 0  4  -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 cmax				29 0  4  -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_shadow
   * ----------------
   */
! DATA(insert ( 1260 usename			19	-1 NAMEDATALEN	1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1260 usesysid			23	-1	4	2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 usecreatedb		16	-1	1	3 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 usesuper			16	-1	1	4 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 usecatupd		16	-1	1	5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 passwd			25	-1 -1	6 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1260 valuntil		   702	-1	4	7 0 -1 -1 t p f i f f f t 0));
! DATA(insert ( 1260 useconfig	  1009	-1 -1	8 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1260 ctid				27 0  6  -1 0 -1 -1 f p f i t f f t 0));
  /* no OIDs in pg_shadow */
! DATA(insert ( 1260 xmin				28 0  4  -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 cmin				29 0  4  -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 xmax				28 0  4  -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 cmax				29 0  4  -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_group
   * ----------------
   */
! DATA(insert ( 1261 groname			19 -1 NAMEDATALEN  1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1261 grosysid			23 -1  4   2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 grolist		  1007 -1 -1   3 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1261 ctid				27 0  6  -1 0 -1 -1 f p f i t f f t 0));
  /* no OIDs in pg_group */
! DATA(insert ( 1261 xmin				28 0  4  -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 cmin				29 0  4  -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 xmax				28 0  4  -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 cmax				29 0  4  -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_attribute
   * ----------------
   */
  #define Schema_pg_attribute \
! { 1249, {"attrelid"},	  26, -1,	4,	1, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attname"},	  19, -1, NAMEDATALEN,	2, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"atttypid"},	  26, -1,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attstattarget"}, 23, -1,	4,	4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attlen"},		  21, -1,	2,	5, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1249, {"attnum"},		  21, -1,	2,	6, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1249, {"attndims"},	  23, -1,	4,	7, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attcacheoff"},  23, -1,	4,	8, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"atttypmod"},	  23, -1,	4,	9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attbyval"},	  16, -1,	1, 10, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attstorage"},   18, -1,	1, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attisset"},	  16, -1,	1, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attalign"},	  18, -1,	1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attnotnull"},   16, -1,	1, 14, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"atthasdef"},	  16, -1,	1, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attisdropped"}, 16, -1,	1, 16, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attislocal"},   16, -1,	1, 17, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attinhcount"},  23, -1,	4, 18, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }
! 
! DATA(insert ( 1249 attrelid			26 -1  4   1 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attname			19 -1 NAMEDATALEN  2 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1249 atttypid			26 -1  4   3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attstattarget	23 -1  4   4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attlen			21 -1  2   5 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1249 attnum			21 -1  2   6 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1249 attndims			23 -1  4   7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attcacheoff		23 -1  4   8 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 atttypmod		23 -1  4   9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attbyval			16 -1  1  10 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attstorage		18 -1  1  11 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attisset			16 -1  1  12 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attalign			18 -1  1  13 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attnotnull		16 -1  1  14 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 atthasdef		16 -1  1  15 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attisdropped		16 -1  1  16 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attislocal		16 -1  1  17 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attinhcount		23 -1  4  18 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 ctid				27 0  6  -1 0 -1 -1 f p f i t f f t 0));
  /* no OIDs in pg_attribute */
! DATA(insert ( 1249 xmin				28 0  4  -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 cmin				29 0  4  -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 xmax				28 0  4  -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 cmax				29 0  4  -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_class
   * ----------------
   */
  #define Schema_pg_class \
! { 1259, {"relname"},	   19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relnamespace"},  26, -1,	4,	2, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltype"},	   26, -1,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relowner"},	   23, -1,	4,	4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relam"},		   26, -1,	4,	5, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relfilenode"},   26, -1,	4,	6, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relpages"},	   23, -1,	4,	7, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltuples"},	   700, -1,	4,	8, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltoastrelid"}, 26, -1,	4,	9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltoastidxid"}, 26, -1,	4, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relhasindex"},   16, -1,	1, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relisshared"},   16, -1,	1, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relkind"},	   18, -1,	1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relnatts"},	   21, -1,	2, 14, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relchecks"},	   21, -1,	2, 15, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"reltriggers"},   21, -1,	2, 16, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relukeys"},	   21, -1,	2, 17, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relfkeys"},	   21, -1,	2, 18, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relrefs"},	   21, -1,	2, 19, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relhasoids"},    16, -1,	1, 20, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhaspkey"},    16, -1,	1, 21, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhasrules"},   16, -1,	1, 22, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhassubclass"},16, -1,	1, 23, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relacl"},		 1034, -1, -1, 24, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }
! 
! DATA(insert ( 1259 relname			19 -1 NAMEDATALEN	1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1259 relnamespace		26 -1 4   2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltype			26 -1 4   3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relowner			23 -1 4   4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relam			26 -1 4   5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relfilenode		26 -1 4   6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relpages			23 -1 4   7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltuples	   700 -1 4   8 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1259 reltoastrelid	26 -1 4   9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltoastidxid	26 -1 4  10 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relhasindex		16 -1 1  11 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relisshared		16 -1 1  12 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relkind			18 -1 1  13 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relnatts			21 -1 2  14 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relchecks		21 -1 2  15 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 reltriggers		21 -1 2  16 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relukeys			21 -1 2  17 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relfkeys			21 -1 2  18 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relrefs			21 -1 2  19 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relhasoids		16 -1 1  20 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhaspkey		16 -1 1  21 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhasrules		16 -1 1  22 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhassubclass	16 -1 1  23 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relacl		  1034 -1 -1 24 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1259 ctid				27 0  6  -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1259 oid				26 0  4  -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 xmin				28 0  4  -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 cmin				29 0  4  -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 xmax				28 0  4  -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 cmax				29 0  4  -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_xactlock - this is not a real relation, but is a placeholder
--- 219,494 ----
   * ----------------
   */
  #define Schema_pg_type \
! { 1247, {"typname"},	   19, -1, NAMEDATALEN, 1, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typnamespace"},  26, -1,	4,	2, 2, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typowner"},	   23, -1,	4,	3, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typlen"},		   21, -1,	2,	4, 4, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1247, {"typbyval"},	   16, -1,	1,	5, 5, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typtype"},	   18, -1,	1,	6, 6, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typisdefined"},  16, -1,	1,	7, 7, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typdelim"},	   18, -1,	1,	8, 8, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typrelid"},	   26, -1,	4,	9, 9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typelem"},	   26, -1,	4, 10, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typinput"},	   24, -1,	4, 11, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typoutput"},	   24, -1,	4, 12, 12, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typreceive"},    24, -1,	4, 13, 13, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typsend"},	   24, -1,	4, 14, 14, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typalign"},	   18, -1,	1, 15, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typstorage"},    18, -1,	1, 16, 16, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typnotnull"},    16, -1,	1, 17, 17, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typbasetype"},   26, -1,	4, 18, 18, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typtypmod"},	   23, -1,	4, 19, 19, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typndims"},	   23, -1,	4, 20, 20, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typdefaultbin"}, 25, -1, -1, 21, 21, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1247, {"typdefault"},    25, -1, -1, 22, 22, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }
! 
! 
! DATA(insert ( 1247 typname			19 -1 NAMEDATALEN	1 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1247 typnamespace		26 -1 4   2 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typowner			23 -1 4   3 3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typlen			21 -1 2   4 4 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1247 typbyval			16 -1 1   5 5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typtype			18 -1 1   6 6 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typisdefined		16 -1 1   7 7 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typdelim			18 -1 1   8 8 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typrelid			26 -1 4   9 9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typelem			26 -1 4  10 10 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typinput			24 -1 4  11 11 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typoutput		24 -1 4  12 12 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typreceive		24 -1 4  13 13 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typsend			24 -1 4  14 14 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typalign			18 -1 1  15 15 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typstorage		18 -1 1  16 16 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typnotnull		16 -1 1  17 17 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typbasetype		26 -1 4  18 18 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typtypmod		23 -1 4  19 19 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typndims			23 -1 4  20 20 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typdefaultbin	25 -1 -1 21 21 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1247 typdefault		25 -1 -1 22 22 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1247 ctid				27 0  6  -1 -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1247 oid				26 0  4  -2 -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 xmin				28 0  4  -3 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 cmin				29 0  4  -4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 xmax				28 0  4  -5 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 cmax				29 0  4  -6 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 tableoid			26 0  4  -7 -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_database
   * ----------------
   */
! DATA(insert ( 1262 datname			19 -1 NAMEDATALEN   1 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 datdba			23 -1 4   2 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 encoding			23 -1 4   3 3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datistemplate	16 -1 1   4 4 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1262 datallowconn		16 -1 1   5 5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1262 datlastsysoid	26 -1 4   6 6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datvacuumxid		28 -1 4   7 7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datfrozenxid		28 -1 4   8 8 0 -1 -1 t p f i t f f t 0));
  /* do not mark datpath as toastable; GetRawDatabaseInfo won't cope */
! DATA(insert ( 1262 datpath			25 -1 -1  9 9 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 datconfig	  1009 -1 -1 10 10 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1262 datacl		  1034 -1 -1 11 11 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1262 ctid				27 0  6  -1 -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 oid				26 0  4  -2 -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 xmin				28 0  4  -3 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 cmin				29 0  4  -4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 xmax				28 0  4  -5 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 cmax				29 0  4  -6 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 tableoid			26 0  4  -7 -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_proc
   * ----------------
   */
  #define Schema_pg_proc \
! { 1255, {"proname"},			19, -1, NAMEDATALEN,  1, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"pronamespace"},		26, -1, 4,	2, 2, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"proowner"},			23, -1,	4,	3, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"prolang"},			26, -1,	4,	4, 4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"proisagg"},			16, -1, 1,	5, 5, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"prosecdef"},			16, -1,	1,	6, 6, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"proisstrict"},		16, -1,	1,	7, 7, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"proretset"},			16, -1,	1,	8, 8, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"provolatile"},		18, -1,	1,	9, 9, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"pronargs"},			21, -1,	2, 10, 10, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1255, {"prorettype"},			26, -1,	4, 11, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"proargtypes"},		30, -1, INDEX_MAX_KEYS*4, 12, 12, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"prosrc"},				25, -1, -1, 13, 13, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1255, {"probin"},				17, -1, -1, 14, 14, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1255, {"proacl"},			  1034, -1, -1, 15, 15, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }
! 
! DATA(insert ( 1255 proname			19 -1 NAMEDATALEN	1 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1255 pronamespace		26 -1 4   2 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 proowner			23 -1 4   3 3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 prolang			26 -1 4   4 4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 proisagg			16 -1 1   5 5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 prosecdef		16 -1 1   6 6 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 proisstrict		16 -1 1   7 7 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 proretset		16 -1 1   8 8 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 provolatile		18 -1 1   9 9 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 pronargs			21 -1 2  10 10 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1255 prorettype		26 -1 4  11 11 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 proargtypes		30 -1 INDEX_MAX_KEYS*4 12 12 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1255 prosrc			25 -1 -1 13 13 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 probin			17 -1 -1 14 14 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 proacl		  1034 -1 -1 15 15 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 ctid				27 0  6  -1 -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1255 oid				26 0  4  -2 -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 xmin				28 0  4  -3 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 cmin				29 0  4  -4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 xmax				28 0  4  -5 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 cmax				29 0  4  -6 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 tableoid			26 0  4  -7 -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_shadow
   * ----------------
   */
! DATA(insert ( 1260 usename			19	-1 NAMEDATALEN	1 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1260 usesysid			23	-1	4	2 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 usecreatedb		16	-1	1	3 3 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 usesuper			16	-1	1	4 4 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 usecatupd		16	-1	1	5 5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 passwd			25	-1 -1	6 6 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1260 valuntil		   702	-1	4	7 7 0 -1 -1 t p f i f f f t 0));
! DATA(insert ( 1260 useconfig	  1009	-1 -1	8 8 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1260 ctid				27 0  6  -1 -1 0 -1 -1 f p f i t f f t 0));
  /* no OIDs in pg_shadow */
! DATA(insert ( 1260 xmin				28 0  4  -3 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 cmin				29 0  4  -4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 xmax				28 0  4  -5 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 cmax				29 0  4  -6 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 tableoid			26 0  4  -7 -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_group
   * ----------------
   */
! DATA(insert ( 1261 groname			19 -1 NAMEDATALEN  1 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1261 grosysid			23 -1  4   2 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 grolist		  1007 -1 -1   3 3 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1261 ctid				27 0  6  -1 -1 0 -1 -1 f p f i t f f t 0));
  /* no OIDs in pg_group */
! DATA(insert ( 1261 xmin				28 0  4  -3 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 cmin				29 0  4  -4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 xmax				28 0  4  -5 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 cmax				29 0  4  -6 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 tableoid			26 0  4  -7 -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_attribute
   * ----------------
   */
  #define Schema_pg_attribute \
! { 1249, {"attrelid"},	  26, -1,	4,	1, 1, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attname"},	  19, -1, NAMEDATALEN,	2, 2, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"atttypid"},	  26, -1,	4,	3, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attstattarget"}, 23, -1,	4,	4, 4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attlen"},		  21, -1,	2,	5, 5, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1249, {"attnum"},		  21, -1,	2,	6, 6, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1249, {"attpos"},		  21, -1,	2,  7, 7, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0},  \
! { 1249, {"attndims"},	  23, -1,	4,	8, 8, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attcacheoff"},  23, -1,	4,	9, 9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"atttypmod"},	  23, -1,	4, 10, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attbyval"},	  16, -1,	1, 11, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attstorage"},   18, -1,	1, 12, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attisset"},	  16, -1,	1, 13, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attalign"},	  18, -1,	1, 14, 14, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attnotnull"},   16, -1,	1, 15, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"atthasdef"},	  16, -1,	1, 16, 16, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attisdropped"}, 16, -1,	1, 17, 17, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attislocal"},   16, -1,	1, 18, 18, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attinhcount"},  23, -1,	4, 19, 19, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }
! 
! DATA(insert ( 1249 attrelid			26 -1  4   1 1 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attname			19 -1 NAMEDATALEN  2 2 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1249 atttypid			26 -1  4   3 3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attstattarget	23 -1  4   4 4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attlen			21 -1  2   5 5 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1249 attnum			21 -1  2   6 6 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1249 attpos			21 -1  2   7 7 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1249 attndims			23 -1  4   8 8 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attcacheoff		23 -1  4   9 9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 atttypmod		23 -1  4  10 10 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attbyval			16 -1  1  11 11 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attstorage		18 -1  1  12 12 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attisset			16 -1  1  13 13 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attalign			18 -1  1  14 14 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attnotnull		16 -1  1  15 15 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 atthasdef		16 -1  1  16 16 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attisdropped		16 -1  1  17 17 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attislocal		16 -1  1  18 18 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attinhcount		23 -1  4  19 19 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 ctid				27 0  6  -1 -1 0 -1 -1 f p f i t f f t 0));
  /* no OIDs in pg_attribute */
! DATA(insert ( 1249 xmin				28 0  4  -3 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 cmin				29 0  4  -4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 xmax				28 0  4  -5 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 cmax				29 0  4  -6 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 tableoid			26 0  4  -7 -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_class
   * ----------------
   */
  #define Schema_pg_class \
! { 1259, {"relname"},	   19, -1, NAMEDATALEN, 1, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relnamespace"},  26, -1,	4,	2, 2, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltype"},	   26, -1,	4,	3, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relowner"},	   23, -1,	4,	4, 4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relam"},		   26, -1,	4,	5, 5, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relfilenode"},   26, -1,	4,	6, 6, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relpages"},	   23, -1,	4,	7, 7, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltuples"},	   700, -1,	4,	8, 8, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltoastrelid"}, 26, -1,	4,	9, 9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltoastidxid"}, 26, -1,	4, 10, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relhasindex"},   16, -1,	1, 11, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relisshared"},   16, -1,	1, 12, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relkind"},	   18, -1,	1, 13, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relnatts"},	   21, -1,	2, 14, 14, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relchecks"},	   21, -1,	2, 15, 15, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"reltriggers"},   21, -1,	2, 16, 16, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relukeys"},	   21, -1,	2, 17, 17, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relfkeys"},	   21, -1,	2, 18, 18, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relrefs"},	   21, -1,	2, 19, 19, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relhasoids"},    16, -1,	1, 20, 20, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhaspkey"},    16, -1,	1, 21, 21, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhasrules"},   16, -1,	1, 22, 22, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhassubclass"},16, -1,	1, 23, 23, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relacl"},		 1034, -1, -1, 24, 24, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }
! 
! DATA(insert ( 1259 relname			19 -1 NAMEDATALEN	1 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1259 relnamespace		26 -1 4   2 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltype			26 -1 4   3 3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relowner			23 -1 4   4 4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relam			26 -1 4   5 5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relfilenode		26 -1 4   6 6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relpages			23 -1 4   7 7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltuples	   700 -1 4   8 8 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1259 reltoastrelid	26 -1 4   9 9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltoastidxid	26 -1 4  10 10 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relhasindex		16 -1 1  11 11 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relisshared		16 -1 1  12 12 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relkind			18 -1 1  13 13 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relnatts			21 -1 2  14 14 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relchecks		21 -1 2  15 15 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 reltriggers		21 -1 2  16 16 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relukeys			21 -1 2  17 17 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relfkeys			21 -1 2  18 18 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relrefs			21 -1 2  19 19 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relhasoids		16 -1 1  20 20 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhaspkey		16 -1 1  21 21 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhasrules		16 -1 1  22 22 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhassubclass	16 -1 1  23 23 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relacl		  1034 -1 -1 24 24 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1259 ctid				27 0  6  -1 -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1259 oid				26 0  4  -2 -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 xmin				28 0  4  -3 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 cmin				29 0  4  -4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 xmax				28 0  4  -5 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 cmax				29 0  4  -6 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 tableoid			26 0  4  -7 -7 0 -1 -1 t p f i t f f t 0));
  
  /* ----------------
   *		pg_xactlock - this is not a real relation, but is a placeholder
***************
*** 503,508 ****
   *				  table; and this entry is just to link to that one.
   * ----------------
   */
! DATA(insert ( 376 xactlockfoo		26 0  4   1 0 -1 -1 t p f i t f f t 0));
  
  #endif   /* PG_ATTRIBUTE_H */
--- 498,503 ----
   *				  table; and this entry is just to link to that one.
   * ----------------
   */
! DATA(insert ( 376 xactlockfoo		26 0  4   1 1 0 -1 -1 t p f i t f f t 0));
  
  #endif   /* PG_ATTRIBUTE_H */
Index: src/include/catalog/pg_class.h
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/include/catalog/pg_class.h,v
retrieving revision 1.77
diff -c -r1.77 pg_class.h
*** src/include/catalog/pg_class.h	4 Aug 2003 02:40:11 -0000	1.77
--- src/include/catalog/pg_class.h	21 Nov 2003 06:13:22 -0000
***************
*** 42,51 ****
   */
  CATALOG(pg_class) BOOTSTRAP
  {
! 	NameData	relname;		/* class name */
! 	Oid			relnamespace;	/* OID of namespace containing this class */
  	Oid			reltype;		/* OID of associated entry in pg_type */
! 	int4		relowner;		/* class owner */
  	Oid			relam;			/* index access method; 0 if not an index */
  	Oid			relfilenode;	/* identifier of physical storage file */
  	int4		relpages;		/* # of blocks (not always up-to-date) */
--- 42,51 ----
   */
  CATALOG(pg_class) BOOTSTRAP
  {
! 	NameData	relname;		/* relation name */
! 	Oid			relnamespace;	/* OID of namespace containing this relation */
  	Oid			reltype;		/* OID of associated entry in pg_type */
! 	int4		relowner;		/* relation owner */
  	Oid			relam;			/* index access method; 0 if not an index */
  	Oid			relfilenode;	/* identifier of physical storage file */
  	int4		relpages;		/* # of blocks (not always up-to-date) */
***************
*** 55,68 ****
  	bool		relhasindex;	/* T if has (or has had) any indexes */
  	bool		relisshared;	/* T if shared across databases */
  	char		relkind;		/* see RELKIND_xxx constants below */
- 	int2		relnatts;		/* number of user attributes */
- 
  	/*
! 	 * Class pg_attribute must contain exactly "relnatts" user attributes
! 	 * (with attnums ranging from 1 to relnatts) for this class.  It may
! 	 * also contain entries with negative attnums for system attributes.
  	 */
! 	int2		relchecks;		/* # of CHECK constraints for class */
  	int2		reltriggers;	/* # of TRIGGERs */
  	int2		relukeys;		/* # of Unique keys (not used) */
  	int2		relfkeys;		/* # of FOREIGN KEYs (not used) */
--- 55,69 ----
  	bool		relhasindex;	/* T if has (or has had) any indexes */
  	bool		relisshared;	/* T if shared across databases */
  	char		relkind;		/* see RELKIND_xxx constants below */
  	/*
! 	 * pg_attribute must contain exactly "relnatts" user attributes
! 	 * (with attnums ranging from 1 to relnatts) for this relation.
! 	 * It may also contain entries with negative attnums for system
! 	 * attributes.
  	 */
! 	int2		relnatts;		/* number of user attributes */
! 
! 	int2		relchecks;		/* # of CHECK constraints for relation */
  	int2		reltriggers;	/* # of TRIGGERs */
  	int2		relukeys;		/* # of Unique keys (not used) */
  	int2		relfkeys;		/* # of FOREIGN KEYs (not used) */
***************
*** 70,75 ****
--- 71,84 ----
  	bool		relhasoids;		/* T if we generate OIDs for rows of rel */
  	bool		relhaspkey;		/* has PRIMARY KEY index */
  	bool		relhasrules;	/* has associated rules */
+ 
+ 	/*
+ 	 * "relhassubclass" indicates that the relation MAY have one or
+ 	 * more derived relations. This attribute provides no claim to
+ 	 * certaintity: it is not updated when a derived relation is
+ 	 * dropped, due to concurrency concerns. Authoritive information
+ 	 * is available from the pg_inherits system catalog.
+ 	 */
  	bool		relhassubclass; /* has derived classes */
  
  	/*
***************
*** 136,142 ****
  
  DATA(insert OID = 1247 (  pg_type		PGNSP 71 PGUID 0 1247 0 0 0 0 f f r 22 0 0 0 0 0 t f f f _null_ ));
  DESCR("");
! DATA(insert OID = 1249 (  pg_attribute	PGNSP 75 PGUID 0 1249 0 0 0 0 f f r 18 0 0 0 0 0 f f f f _null_ ));
  DESCR("");
  DATA(insert OID = 1255 (  pg_proc		PGNSP 81 PGUID 0 1255 0 0 0 0 f f r 15 0 0 0 0 0 t f f f _null_ ));
  DESCR("");
--- 145,151 ----
  
  DATA(insert OID = 1247 (  pg_type		PGNSP 71 PGUID 0 1247 0 0 0 0 f f r 22 0 0 0 0 0 t f f f _null_ ));
  DESCR("");
! DATA(insert OID = 1249 (  pg_attribute	PGNSP 75 PGUID 0 1249 0 0 0 0 f f r 19 0 0 0 0 0 f f f f _null_ ));
  DESCR("");
  DATA(insert OID = 1255 (  pg_proc		PGNSP 81 PGUID 0 1255 0 0 0 0 f f r 15 0 0 0 0 0 t f f f _null_ ));
  DESCR("");
***************
*** 162,171 ****
  /* Xact lock pseudo-table */
  #define XactLockTableId			376
  
! #define		  RELKIND_INDEX			  'i'		/* secondary index */
  #define		  RELKIND_RELATION		  'r'		/* ordinary cataloged heap */
  #define		  RELKIND_SPECIAL		  's'		/* special (non-heap) */
! #define		  RELKIND_SEQUENCE		  'S'		/* SEQUENCE relation */
  #define		  RELKIND_UNCATALOGED	  'u'		/* temporary heap */
  #define		  RELKIND_TOASTVALUE	  't'		/* moved off huge values */
  #define		  RELKIND_VIEW			  'v'		/* view */
--- 171,180 ----
  /* Xact lock pseudo-table */
  #define XactLockTableId			376
  
! #define		  RELKIND_INDEX			  'i'		/* index relation */
  #define		  RELKIND_RELATION		  'r'		/* ordinary cataloged heap */
  #define		  RELKIND_SPECIAL		  's'		/* special (non-heap) */
! #define		  RELKIND_SEQUENCE		  'S'		/* sequence relation */
  #define		  RELKIND_UNCATALOGED	  'u'		/* temporary heap */
  #define		  RELKIND_TOASTVALUE	  't'		/* moved off huge values */
  #define		  RELKIND_VIEW			  'v'		/* view */
