Index: src/backend/access/common/tupdesc.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/access/common/tupdesc.c,v
retrieving revision 1.89
diff -c -r1.89 tupdesc.c
*** src/backend/access/common/tupdesc.c	2002/09/04 20:31:09	1.89
--- src/backend/access/common/tupdesc.c	2002/09/22 01:57:33
***************
*** 271,278 ****
  			return false;
  		if (attr1->attisdropped != attr2->attisdropped)
  			return false;
! 		if (attr1->attisinherited != attr2->attisinherited)
  			return false;
  	}
  	if (tupdesc1->constr != NULL)
  	{
--- 271,280 ----
  			return false;
  		if (attr1->attisdropped != attr2->attisdropped)
  			return false;
! 		if (attr1->attislocal != attr2->attislocal)
  			return false;
+ 		if (attr1->attinhcount != attr2->attinhcount)
+ 			return false;
  	}
  	if (tupdesc1->constr != NULL)
  	{
***************
*** 396,402 ****
  	att->attnotnull = false;
  	att->atthasdef = false;
  	att->attisdropped = false;
! 	att->attisinherited = false;
  
  	tuple = SearchSysCache(TYPEOID,
  						   ObjectIdGetDatum(oidtypeid),
--- 398,405 ----
  	att->attnotnull = false;
  	att->atthasdef = false;
  	att->attisdropped = false;
! 	att->attislocal = true;
! 	att->attinhcount = 0;
  
  	tuple = SearchSysCache(TYPEOID,
  						   ObjectIdGetDatum(oidtypeid),
***************
*** 543,549 ****
  			desc->attrs[attnum - 1]->atthasdef = true;
  		}
  
! 		desc->attrs[attnum - 1]->attisinherited = entry->is_inherited;
  	}
  
  	if (constr->has_not_null || ndef > 0)
--- 546,553 ----
  			desc->attrs[attnum - 1]->atthasdef = true;
  		}
  
! 		desc->attrs[attnum - 1]->attinhcount = entry->inhcount;
! 		desc->attrs[attnum - 1]->attislocal = entry->is_local;
  	}
  
  	if (constr->has_not_null || ndef > 0)
Index: src/backend/catalog/index.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/catalog/index.c,v
retrieving revision 1.197
diff -c -r1.197 index.c
*** src/backend/catalog/index.c	2002/09/22 00:37:09	1.197
--- src/backend/catalog/index.c	2002/09/22 01:57:37
***************
*** 259,265 ****
  		to->attcacheoff = -1;
  		to->attnotnull = false;
  		to->atthasdef = false;
! 		to->attisinherited = false;
  
  		/*
  		 * We do not yet have the correct relation OID for the index, so
--- 259,266 ----
  		to->attcacheoff = -1;
  		to->attnotnull = false;
  		to->atthasdef = false;
! 		to->attislocal = true;
! 		to->attinhcount = 0;
  
  		/*
  		 * We do not yet have the correct relation OID for the index, so
Index: src/backend/commands/sequence.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/commands/sequence.c,v
retrieving revision 1.87
diff -c -r1.87 sequence.c
*** src/backend/commands/sequence.c	2002/09/04 20:31:15	1.87
--- src/backend/commands/sequence.c	2002/09/22 01:57:40
***************
*** 127,133 ****
  
  		coldef = makeNode(ColumnDef);
  		coldef->typename = typnam;
! 		coldef->is_inherited = false;
  		coldef->is_not_null = true;
  		coldef->raw_default = NULL;
  		coldef->cooked_default = NULL;
--- 127,134 ----
  
  		coldef = makeNode(ColumnDef);
  		coldef->typename = typnam;
! 		coldef->is_local = true;
! 		coldef->inhcount = 0;
  		coldef->is_not_null = true;
  		coldef->raw_default = NULL;
  		coldef->cooked_default = NULL;
Index: src/backend/commands/tablecmds.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/commands/tablecmds.c,v
retrieving revision 1.42
diff -c -r1.42 tablecmds.c
*** src/backend/commands/tablecmds.c	2002/09/22 00:37:09	1.42
--- src/backend/commands/tablecmds.c	2002/09/22 01:57:48
***************
*** 613,618 ****
--- 613,619 ----
  				def->is_not_null |= attribute->attnotnull;
  				/* Default and other constraints are handled below */
  				newattno[parent_attno - 1] = exist_attno;
+ 				def->inhcount++;
  			}
  			else
  			{
***************
*** 625,631 ****
  				typename->typeid = attribute->atttypid;
  				typename->typmod = attribute->atttypmod;
  				def->typename = typename;
! 				def->is_inherited = true;
  				def->is_not_null = attribute->attnotnull;
  				def->raw_default = NULL;
  				def->cooked_default = NULL;
--- 626,633 ----
  				typename->typeid = attribute->atttypid;
  				typename->typmod = attribute->atttypmod;
  				def->typename = typename;
! 				def->inhcount = 1;
! 				def->is_local = false;
  				def->is_not_null = attribute->attnotnull;
  				def->raw_default = NULL;
  				def->cooked_default = NULL;
***************
*** 758,763 ****
--- 760,767 ----
  						 attributeName,
  						 TypeNameToString(def->typename),
  						 TypeNameToString(newdef->typename));
+ 				/* Mark the column as locally defined */
+ 				def->is_local = true;
  				/* Merge of NOT NULL constraints = OR 'em together */
  				def->is_not_null |= newdef->is_not_null;
  				/* If new def has a default, override previous default */
***************
*** 1155,1161 ****
  	 * if the attribute is inherited, forbid the renaming, unless we are
  	 * already inside a recursive rename.
  	 */
! 	if (attform->attisinherited && !recursing)
  		elog(ERROR, "renameatt: inherited attribute \"%s\" may not be renamed",
  			 oldattname);
  
--- 1159,1165 ----
  	 * if the attribute is inherited, forbid the renaming, unless we are
  	 * already inside a recursive rename.
  	 */
! 	if (attform->attinhcount > 0 && !recursing)
  		elog(ERROR, "renameatt: inherited attribute \"%s\" may not be renamed",
  			 oldattname);
  
***************
*** 1628,1634 ****
  				   *children;
  		ColumnDef  *colDefChild = copyObject(colDef);
  
! 		colDefChild->is_inherited = true;
  
  		/* this routine is actually in the planner */
  		children = find_all_inheritors(myrelid);
--- 1632,1639 ----
  				   *children;
  		ColumnDef  *colDefChild = copyObject(colDef);
  
! 		colDefChild->inhcount++;
! 		colDefChild->is_local = false;
  
  		/* this routine is actually in the planner */
  		children = find_all_inheritors(myrelid);
***************
*** 1742,1748 ****
  	attribute->atthasdef = (colDef->raw_default != NULL ||
  							colDef->cooked_default != NULL);
  	attribute->attisdropped = false;
! 	attribute->attisinherited = colDef->is_inherited;
  
  	ReleaseSysCache(typeTuple);
  
--- 1747,1754 ----
  	attribute->atthasdef = (colDef->raw_default != NULL ||
  							colDef->cooked_default != NULL);
  	attribute->attisdropped = false;
! 	attribute->attislocal = colDef->is_local;
! 	attribute->attinhcount = colDef->inhcount;
  
  	ReleaseSysCache(typeTuple);
  
***************
*** 2373,2385 ****
  			 RelationGetRelationName(rel));
  
  	/* Don't drop inherited columns */
! 	if (tupleDesc->attrs[attnum - 1]->attisinherited && !recursing)
  		elog(ERROR, "ALTER TABLE: Cannot drop inherited column \"%s\"",
  			 colName);
  
  	/*
  	 * If we are asked to drop ONLY in this table (no recursion), we need
! 	 * to mark the inheritors' attribute as non-inherited.
  	 */
  	if (!recurse && !recursing)
  	{
--- 2379,2392 ----
  			 RelationGetRelationName(rel));
  
  	/* Don't drop inherited columns */
! 	if (tupleDesc->attrs[attnum - 1]->attinhcount > 0 && !recursing)
  		elog(ERROR, "ALTER TABLE: Cannot drop inherited column \"%s\"",
  			 colName);
  
  	/*
  	 * If we are asked to drop ONLY in this table (no recursion), we need
! 	 * to substract one from inheritors' attinhcount.  When it gets to zero,
! 	 * we need to set attislocal to true.
  	 */
  	if (!recurse && !recursing)
  	{
***************
*** 2396,2401 ****
--- 2403,2409 ----
  			Oid			childrelid = lfirsti(child);
  			Relation	childrel;
  			HeapTuple	tuple;
+ 			Form_pg_attribute attform;
  
  			childrel = heap_open(childrelid, AccessExclusiveLock);
  
***************
*** 2404,2410 ****
  				elog(ERROR, "ALTER TABLE: relation %u has no column \"%s\"",
  					 childrelid, colName);
  
! 			((Form_pg_attribute) GETSTRUCT(tuple))->attisinherited = false;
  
  			simple_heap_update(attr_rel, &tuple->t_self, tuple);
  
--- 2412,2421 ----
  				elog(ERROR, "ALTER TABLE: relation %u has no column \"%s\"",
  					 childrelid, colName);
  
! 			attform = (Form_pg_attribute) GETSTRUCT(tuple);
! 			attform->attinhcount--;
! 			if (attform->attinhcount == 0)
! 				attform->attislocal = true;
  
  			simple_heap_update(attr_rel, &tuple->t_self, tuple);
  
***************
*** 2412,2417 ****
--- 2423,2429 ----
  			CatalogUpdateIndexes(attr_rel, tuple);
  
  			heap_close(childrel, NoLock);
+ 			heap_freetuple(tuple);
  		}
  		heap_close(attr_rel, RowExclusiveLock);
  	}
***************
*** 2425,2444 ****
  				   *children;
  
  		/* this routine is actually in the planner */
! 		children = find_all_inheritors(myrelid);
  
  		/*
! 		 * find_all_inheritors does the recursive search of the
! 		 * inheritance hierarchy, so all we have to do is process all of
! 		 * the relids in the list that it returns.
  		 */
  		foreach(child, children)
  		{
  			Oid			childrelid = lfirsti(child);
  
  			if (childrelid == myrelid)
  				continue;
! 			AlterTableDropColumn(childrelid, false, true, colName, behavior);
  		}
  	}
  
--- 2437,2490 ----
  				   *children;
  
  		/* this routine is actually in the planner */
! 		children = find_inheritance_children(myrelid);
  
  		/*
! 		 * find_inheritance_children only gets direct inheritors;
! 		 * we'll have to check whether further recursion is needed
! 		 * on a case by case basis.
  		 */
  		foreach(child, children)
  		{
  			Oid			childrelid = lfirsti(child);
+ 			HeapTuple	tuple;
+ 			Form_pg_attribute attform;
  
  			if (childrelid == myrelid)
  				continue;
! 
! 			tuple = SearchSysCacheCopyAttName(childrelid, colName);
! 			if (!HeapTupleIsValid(tuple)) /* this shouldn't happen */
! 				elog(ERROR, "ALTER TABLE: relation %u does not have column %s",
! 						childrelid, colName);
! 			attform = (Form_pg_attribute) GETSTRUCT(tuple);
! 
! 			/*
! 			 * If attinhcount is 1 and attislocal is false, the column
! 			 * should be recursively dropped.
! 			 */
! 			if (attform->attinhcount == 1 && !attform->attislocal)
! 				AlterTableDropColumn(childrelid, true, true, colName, behavior);
! 			else
! 			{
! 			/*
! 			 * Decrease attinhcount.  If it reaches zero, attislocal
! 			 * should be marked true.
! 			 */
! 				Relation	attr_rel;
! 				attr_rel = heap_openr(AttributeRelationName, RowExclusiveLock);
! 
! 				attform->attinhcount--;
! 				if (attform->attinhcount == 0)
! 					attform->attislocal = true;
! 				simple_heap_update(attr_rel, &tuple->t_self, tuple);
! 				
! 				/* keep the system catalog indexes current */
! 				CatalogUpdateIndexes(attr_rel, tuple);
! 				heap_close(attr_rel, RowExclusiveLock);
! 			}
! 
! 			heap_freetuple(tuple);
  		}
  	}
  
Index: src/backend/commands/view.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/commands/view.c,v
retrieving revision 1.71
diff -c -r1.71 view.c
*** src/backend/commands/view.c	2002/09/04 20:31:17	1.71
--- src/backend/commands/view.c	2002/09/22 01:57:50
***************
*** 71,77 ****
  			typename->typmod = res->restypmod;
  			def->typename = typename;
  
! 			def->is_inherited = false;
  			def->is_not_null = false;
  			def->raw_default = NULL;
  			def->cooked_default = NULL;
--- 71,78 ----
  			typename->typmod = res->restypmod;
  			def->typename = typename;
  
! 			def->is_local = true;
! 			def->inhcount = 0;
  			def->is_not_null = false;
  			def->raw_default = NULL;
  			def->cooked_default = NULL;
Index: src/backend/nodes/copyfuncs.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/nodes/copyfuncs.c,v
retrieving revision 1.212
diff -c -r1.212 copyfuncs.c
*** src/backend/nodes/copyfuncs.c	2002/09/18 21:35:20	1.212
--- src/backend/nodes/copyfuncs.c	2002/09/22 01:57:56
***************
*** 1732,1738 ****
  	if (from->colname)
  		newnode->colname = pstrdup(from->colname);
  	Node_Copy(from, newnode, typename);
! 	newnode->is_inherited = from->is_inherited;
  	newnode->is_not_null = from->is_not_null;
  	Node_Copy(from, newnode, raw_default);
  	if (from->cooked_default)
--- 1732,1739 ----
  	if (from->colname)
  		newnode->colname = pstrdup(from->colname);
  	Node_Copy(from, newnode, typename);
! 	newnode->inhcount = from->inhcount;
! 	newnode->is_local = from->is_local;
  	newnode->is_not_null = from->is_not_null;
  	Node_Copy(from, newnode, raw_default);
  	if (from->cooked_default)
Index: src/backend/nodes/equalfuncs.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/nodes/equalfuncs.c,v
retrieving revision 1.159
diff -c -r1.159 equalfuncs.c
*** src/backend/nodes/equalfuncs.c	2002/09/18 21:35:20	1.159
--- src/backend/nodes/equalfuncs.c	2002/09/22 01:58:00
***************
*** 1769,1775 ****
  		return false;
  	if (!equal(a->typename, b->typename))
  		return false;
! 	if (a->is_inherited != b->is_inherited)
  		return false;
  	if (a->is_not_null != b->is_not_null)
  		return false;
--- 1769,1777 ----
  		return false;
  	if (!equal(a->typename, b->typename))
  		return false;
! 	if (a->is_local != b->is_local)
! 		return false;
! 	if (a->inhcount != b->inhcount)
  		return false;
  	if (a->is_not_null != b->is_not_null)
  		return false;
Index: src/backend/nodes/outfuncs.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/nodes/outfuncs.c,v
retrieving revision 1.174
diff -c -r1.174 outfuncs.c
*** src/backend/nodes/outfuncs.c	2002/09/18 21:35:21	1.174
--- src/backend/nodes/outfuncs.c	2002/09/22 01:58:04
***************
*** 176,184 ****
  	_outToken(str, node->colname);
  	appendStringInfo(str, " :typename ");
  	_outNode(str, node->typename);
! 	appendStringInfo(str, " :is_inherited %s :is_not_null %s :raw_default ",
! 					 booltostr(node->is_inherited),
! 					 booltostr(node->is_not_null));
  	_outNode(str, node->raw_default);
  	appendStringInfo(str, " :cooked_default ");
  	_outToken(str, node->cooked_default);
--- 176,185 ----
  	_outToken(str, node->colname);
  	appendStringInfo(str, " :typename ");
  	_outNode(str, node->typename);
! 	appendStringInfo(str, " :is_local %s :is_not_null %s :inhcount %d :raw_default ",
! 					 booltostr(node->is_local),
! 					 booltostr(node->is_not_null),
! 					 node->inhcount);
  	_outNode(str, node->raw_default);
  	appendStringInfo(str, " :cooked_default ");
  	_outToken(str, node->cooked_default);
Index: src/backend/nodes/readfuncs.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/nodes/readfuncs.c,v
retrieving revision 1.133
diff -c -r1.133 readfuncs.c
*** src/backend/nodes/readfuncs.c	2002/09/18 21:35:21	1.133
--- src/backend/nodes/readfuncs.c	2002/09/22 01:58:08
***************
*** 1526,1538 ****
  	token = pg_strtok(&length); /* eat :typename */
  	local_node->typename = nodeRead(true);		/* now read it */
  
! 	token = pg_strtok(&length); /* eat :is_inherited */
! 	token = pg_strtok(&length); /* get :is_inherited */
! 	local_node->is_inherited = strtobool(token);
  
  	token = pg_strtok(&length); /* eat :is_not_null */
  	token = pg_strtok(&length); /* get :is_not_null */
  	local_node->is_not_null = strtobool(token);
  
  	token = pg_strtok(&length); /* eat :raw_default */
  	local_node->raw_default = nodeRead(true);	/* now read it */
--- 1526,1542 ----
  	token = pg_strtok(&length); /* eat :typename */
  	local_node->typename = nodeRead(true);		/* now read it */
  
! 	token = pg_strtok(&length); /* eat :is_local */
! 	token = pg_strtok(&length); /* get is_local */
! 	local_node->is_local = strtobool(token);
  
  	token = pg_strtok(&length); /* eat :is_not_null */
  	token = pg_strtok(&length); /* get :is_not_null */
  	local_node->is_not_null = strtobool(token);
+ 
+ 	token = pg_strtok(&length); /* eat :inhcount */
+ 	token = pg_strtok(&length); /* get inhcount */
+ 	local_node->inhcount = atoi(token);
  
  	token = pg_strtok(&length); /* eat :raw_default */
  	local_node->raw_default = nodeRead(true);	/* now read it */
Index: src/backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/parser/gram.y,v
retrieving revision 2.367
diff -c -r2.367 gram.y
*** src/backend/parser/gram.y	2002/09/18 21:35:21	2.367
--- src/backend/parser/gram.y	2002/09/22 01:58:22
***************
*** 1453,1458 ****
--- 1453,1459 ----
  					n->colname = $1;
  					n->typename = $2;
  					n->constraints = $3;
+ 					n->is_local = true;
  
  					if ($4 != NULL)
  						elog(NOTICE,
Index: src/include/catalog/pg_attribute.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/include/catalog/pg_attribute.h,v
retrieving revision 1.99
diff -c -r1.99 pg_attribute.h
*** src/include/catalog/pg_attribute.h	2002/09/04 20:31:37	1.99
--- src/include/catalog/pg_attribute.h	2002/09/22 01:58:25
***************
*** 147,154 ****
  	/* Is dropped (ie, logically invisible) or not */
  	bool		attisdropped;
  
! 	/* Is inherited from a parent relation */
! 	bool		attisinherited;
  } FormData_pg_attribute;
  
  /*
--- 147,157 ----
  	/* Is dropped (ie, logically invisible) or not */
  	bool		attisdropped;
  
! 	/* Is locally defined (i.e. not inherited) */
! 	bool		attislocal;
! 
! 	/* Number of parents this attribute has */
! 	int2		attinhcount;
  } FormData_pg_attribute;
  
  /*
***************
*** 157,163 ****
   * because of alignment padding at the end of the struct.)
   */
  #define ATTRIBUTE_TUPLE_SIZE \
! 	(offsetof(FormData_pg_attribute,attisinherited) + sizeof(bool))
  
  /* ----------------
   *		Form_pg_attribute corresponds to a pointer to a tuple with
--- 160,166 ----
   * because of alignment padding at the end of the struct.)
   */
  #define ATTRIBUTE_TUPLE_SIZE \
! 	(offsetof(FormData_pg_attribute,attinhcount) + sizeof(int2))
  
  /* ----------------
   *		Form_pg_attribute corresponds to a pointer to a tuple with
***************
*** 171,177 ****
   * ----------------
   */
  
! #define Natts_pg_attribute				17
  #define Anum_pg_attribute_attrelid		1
  #define Anum_pg_attribute_attname		2
  #define Anum_pg_attribute_atttypid		3
--- 174,180 ----
   * ----------------
   */
  
! #define Natts_pg_attribute				18
  #define Anum_pg_attribute_attrelid		1
  #define Anum_pg_attribute_attname		2
  #define Anum_pg_attribute_atttypid		3
***************
*** 188,194 ****
  #define Anum_pg_attribute_attnotnull	14
  #define Anum_pg_attribute_atthasdef		15
  #define Anum_pg_attribute_attisdropped	16
! #define Anum_pg_attribute_attisinherited 17
  
  
  
--- 191,198 ----
  #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
  
  
  
***************
*** 219,486 ****
   * ----------------
   */
  #define Schema_pg_type \
! { 1247, {"typname"},	   19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typnamespace"},  26, -1,	4,	2, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typowner"},	   23, 0,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typlen"},		   21, 0,	2,	4, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1247, {"typbyval"},	   16, 0,	1,	5, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typtype"},	   18, -1,	1,	6, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typisdefined"},  16, -1,	1,	7, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typdelim"},	   18, 0,	1,	8, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typrelid"},	   26, 0,	4,	9, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typelem"},	   26, 0,	4, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typinput"},	   24, 0,	4, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typoutput"},	   24, 0,	4, 12, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typalign"},	   18, 0,	1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typstorage"},    18, 0,	1, 14, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typnotnull"},    16, 0,	1, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typbasetype"},   26, 0,	4, 16, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typtypmod"},	   23, 0,	4, 17, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typndims"},	   23, 0,	4, 18, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typdefaultbin"}, 25, 0,  -1, 19, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }, \
! { 1247, {"typdefault"},    25, 0,  -1, 20, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }
! 
! 
! DATA(insert ( 1247 typname			19 -1 NAMEDATALEN	1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1247 typnamespace		26 -1 4   2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typowner			23 0  4   3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typlen			21 0  2   4 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1247 typbyval			16 0  1   5 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typtype			18 -1 1   6 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typisdefined		16 -1 1   7 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typdelim			18 0  1   8 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typrelid			26 0  4   9 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typelem			26 0  4  10 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typinput			24 0  4  11 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typoutput		24 0  4  12 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typalign			18 0  1  13 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typstorage		18 0  1  14 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typnotnull		16 0  1  15 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typbasetype		26 0  4  16 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typtypmod		23 0  4  17 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typndims			23 0  4  18 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typdefaultbin	25 0 -1  19 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1247 typdefault		25 0 -1  20 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1247 ctid				27 0  6  -1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1247 oid				26 0  4  -2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 xmin				28 0  4  -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 cmin				29 0  4  -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 xmax				28 0  4  -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 cmax				29 0  4  -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f f));
  
  /* ----------------
   *		pg_database
   * ----------------
   */
! DATA(insert ( 1262 datname			19 0 NAMEDATALEN   1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1262 datdba			23 0  4   2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 encoding			23 0  4   3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 datistemplate	16 0  1   4 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1262 datallowconn		16 0  1   5 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1262 datlastsysoid	26 0  4   6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 datvacuumxid		28 0  4   7 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 datfrozenxid		28 0  4   8 0 -1 -1 t p f i t f f f));
  /* do not mark datpath as toastable; GetRawDatabaseInfo won't cope */
! DATA(insert ( 1262 datpath			25 0 -1   9 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1262 datconfig	  1009 0 -1  10 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1262 datacl		  1034 0 -1  11 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1262 ctid				27 0  6  -1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1262 oid				26 0  4  -2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 xmin				28 0  4  -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 cmin				29 0  4  -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 xmax				28 0  4  -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 cmax				29 0  4  -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f f));
  
  /* ----------------
   *		pg_proc
   * ----------------
   */
  #define Schema_pg_proc \
! { 1255, {"proname"},			19, -1, NAMEDATALEN,  1, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"pronamespace"},		26, -1, 4,	2, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"proowner"},			23, 0,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"prolang"},			26, 0,	4,	4, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"proisagg"},			16, -1, 1,	5, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1255, {"prosecdef"},			16, 0,	1,	6, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1255, {"proisstrict"},		16, 0,	1,	7, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1255, {"proretset"},			16, 0,	1,	8, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1255, {"provolatile"},		18, 0,	1,	9, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1255, {"pronargs"},			21, 0,	2, 10, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1255, {"prorettype"},			26, 0,	4, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"proargtypes"},		30, 0, INDEX_MAX_KEYS*4, 12, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"prosrc"},				25, 0, -1, 13, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }, \
! { 1255, {"probin"},				17, 0, -1, 14, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }, \
! { 1255, {"proacl"},			  1034, 0, -1, 15, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }
! 
! DATA(insert ( 1255 proname			19 -1 NAMEDATALEN	1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1255 pronamespace		26 -1 4   2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 proowner			23 0  4   3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 prolang			26 0  4   4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 proisagg			16 -1 1   5 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1255 prosecdef		16 0  1   6 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1255 proisstrict		16 0  1   7 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1255 proretset		16 0  1   8 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1255 provolatile		18 0  1   9 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1255 pronargs			21 0  2  10 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1255 prorettype		26 0  4  11 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 proargtypes		30 0 INDEX_MAX_KEYS*4 12 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1255 prosrc			25 0 -1  13 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1255 probin			17 0 -1  14 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1255 proacl		  1034 0 -1  15 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1255 ctid				27 0  6  -1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1255 oid				26 0  4  -2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 xmin				28 0  4  -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 cmin				29 0  4  -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 xmax				28 0  4  -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 cmax				29 0  4  -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f f));
  
  /* ----------------
   *		pg_shadow
   * ----------------
   */
! DATA(insert ( 1260 usename			19	-1 NAMEDATALEN	1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1260 usesysid			23	-1	4	2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1260 usecreatedb		16	0	1	3 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1260 usesuper			16	0	1	4 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1260 usecatupd		16	0	1	5 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1260 passwd			25	0  -1	6 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1260 valuntil			702 0	4	7 0 -1 -1 t p f i f f f f));
! DATA(insert ( 1260 useconfig	  1009	0  -1	8 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1260 ctid				27 0  6  -1 0 -1 -1 f p f i t f f f));
  /* no OIDs in pg_shadow */
! DATA(insert ( 1260 xmin				28 0  4  -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1260 cmin				29 0  4  -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1260 xmax				28 0  4  -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1260 cmax				29 0  4  -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1260 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f f));
  
  /* ----------------
   *		pg_group
   * ----------------
   */
! DATA(insert ( 1261 groname			19 -1 NAMEDATALEN  1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1261 grosysid			23 -1  4   2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1261 grolist		  1007 0 -1   3 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1261 ctid				27 0  6  -1 0 -1 -1 f p f i t f f f));
  /* no OIDs in pg_group */
! DATA(insert ( 1261 xmin				28 0  4  -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1261 cmin				29 0  4  -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1261 xmax				28 0  4  -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1261 cmax				29 0  4  -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1261 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f f));
  
  /* ----------------
   *		pg_attribute
   * ----------------
   */
  #define Schema_pg_attribute \
! { 1249, {"attrelid"},	  26, -1,	4,	1, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"attname"},	  19, -1, NAMEDATALEN,	2, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"atttypid"},	  26, 0,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"attstattarget"}, 23, 0,	4,	4, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"attlen"},		  21, 0,	2,	5, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1249, {"attnum"},		  21, 0,	2,	6, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1249, {"attndims"},	  23, 0,	4,	7, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"attcacheoff"},  23, 0,	4,	8, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"atttypmod"},	  23, 0,	4,	9, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"attbyval"},	  16, 0,	1, 10, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attstorage"},   18, 0,	1, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attisset"},	  16, 0,	1, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attalign"},	  18, 0,	1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attnotnull"},   16, 0, 1, 14, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"atthasdef"},	  16, 0, 1, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attisdropped"}, 16, 0, 1, 16, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attisinherited"},16,0, 1, 17, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }
! 
! DATA(insert ( 1249 attrelid			26 -1  4   1 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 attname			19 -1 NAMEDATALEN  2 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1249 atttypid			26 0  4   3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 attstattarget	23 0  4   4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 attlen			21 0  2   5 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1249 attnum			21 0  2   6 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1249 attndims			23 0  4   7 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 attcacheoff		23 0  4   8 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 atttypmod		23 0  4   9 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 attbyval			16 0  1  10 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attstorage		18 0  1  11 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attisset			16 0  1  12 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attalign			18 0  1  13 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attnotnull		16 0  1  14 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 atthasdef		16 0  1  15 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attisdropped		16 0  1  16 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attisinherited	16 0  1  17 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 ctid				27 0  6  -1 0 -1 -1 f p f i t f f f));
  /* no OIDs in pg_attribute */
! DATA(insert ( 1249 xmin				28 0  4  -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 cmin				29 0  4  -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 xmax				28 0  4  -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 cmax				29 0  4  -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f f));
  
  /* ----------------
   *		pg_class
   * ----------------
   */
  #define Schema_pg_class \
! { 1259, {"relname"},	   19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relnamespace"},  26, -1,	4,	2, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"reltype"},	   26, 0,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relowner"},	   23, 0,	4,	4, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relam"},		   26, 0,	4,	5, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relfilenode"},   26, 0,	4,	6, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relpages"},	   23, 0,	4,	7, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"reltuples"},	   700, 0,	4,	8, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"reltoastrelid"}, 26, 0,	4,	9, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"reltoastidxid"}, 26, 0,	4, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relhasindex"},   16, 0,	1, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relisshared"},   16, 0,	1, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relkind"},	   18, -1,	1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relnatts"},	   21, 0,	2, 14, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"relchecks"},	   21, 0,	2, 15, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"reltriggers"},   21, 0,	2, 16, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"relukeys"},	   21, 0,	2, 17, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"relfkeys"},	   21, 0,	2, 18, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"relrefs"},	   21, 0,	2, 19, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"relhasoids"},    16, 0,	1, 20, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relhaspkey"},    16, 0,	1, 21, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relhasrules"},   16, 0,	1, 22, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relhassubclass"},16, 0,	1, 23, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relacl"},		 1034, 0,  -1, 24, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }
! 
! DATA(insert ( 1259 relname			19 -1 NAMEDATALEN	1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1259 relnamespace		26 -1 4   2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 reltype			26 0  4   3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 relowner			23 0  4   4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 relam			26 0  4   5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 relfilenode		26 0  4   6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 relpages			23 0  4   7 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 reltuples	   700 0  4   8 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1259 reltoastrelid	26 0  4   9 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 reltoastidxid	26 0  4  10 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 relhasindex		16 0  1  11 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relisshared		16 0  1  12 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relkind			18 -1 1  13 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relnatts			21 0  2  14 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 relchecks		21 0  2  15 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 reltriggers		21 0  2  16 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 relukeys			21 0  2  17 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 relfkeys			21 0  2  18 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 relrefs			21 0  2  19 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 relhasoids		16 0  1  20 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relhaspkey		16 0  1  21 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relhasrules		16 0  1  22 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relhassubclass	16 0  1  23 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relacl		  1034 0 -1  24 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1259 ctid				27 0  6  -1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1259 oid				26 0  4  -2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 xmin				28 0  4  -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 cmin				29 0  4  -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 xmax				28 0  4  -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 cmax				29 0  4  -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 tableoid			26 0  4  -7 0 -1 -1 t p f i t f f f));
  
  /* ----------------
   *		pg_xactlock - this is not a real relation, but is a placeholder
--- 223,492 ----
   * ----------------
   */
  #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, 0,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typlen"},		   21, 0,	2,	4, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1247, {"typbyval"},	   16, 0,	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, 0,	1,	8, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typrelid"},	   26, 0,	4,	9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typelem"},	   26, 0,	4, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typinput"},	   24, 0,	4, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typoutput"},	   24, 0,	4, 12, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typalign"},	   18, 0,	1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typstorage"},    18, 0,	1, 14, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typnotnull"},    16, 0,	1, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typbasetype"},   26, 0,	4, 16, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typtypmod"},	   23, 0,	4, 17, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typndims"},	   23, 0,	4, 18, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typdefaultbin"}, 25, 0,  -1, 19, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1247, {"typdefault"},    25, 0,  -1, 20, 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 0  4   3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typlen			21 0  2   4 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1247 typbyval			16 0  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 0  1   8 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typrelid			26 0  4   9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typelem			26 0  4  10 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typinput			24 0  4  11 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typoutput		24 0  4  12 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typalign			18 0  1  13 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typstorage		18 0  1  14 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typnotnull		16 0  1  15 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typbasetype		26 0  4  16 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typtypmod		23 0  4  17 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typndims			23 0  4  18 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typdefaultbin	25 0 -1  19 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1247 typdefault		25 0 -1  20 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 0 NAMEDATALEN   1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 datdba			23 0  4   2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 encoding			23 0  4   3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datistemplate	16 0  1   4 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1262 datallowconn		16 0  1   5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1262 datlastsysoid	26 0  4   6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datvacuumxid		28 0  4   7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datfrozenxid		28 0  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 0 -1   9 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 datconfig	  1009 0 -1  10 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1262 datacl		  1034 0 -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, 0,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"prolang"},			26, 0,	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, 0,	1,	6, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"proisstrict"},		16, 0,	1,	7, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"proretset"},			16, 0,	1,	8, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"provolatile"},		18, 0,	1,	9, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"pronargs"},			21, 0,	2, 10, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1255, {"prorettype"},			26, 0,	4, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"proargtypes"},		30, 0, INDEX_MAX_KEYS*4, 12, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"prosrc"},				25, 0, -1, 13, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1255, {"probin"},				17, 0, -1, 14, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1255, {"proacl"},			  1034, 0, -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 0  4   3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 prolang			26 0  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 0  1   6 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 proisstrict		16 0  1   7 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 proretset		16 0  1   8 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 provolatile		18 0  1   9 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 pronargs			21 0  2  10 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1255 prorettype		26 0  4  11 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 proargtypes		30 0 INDEX_MAX_KEYS*4 12 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1255 prosrc			25 0 -1  13 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 probin			17 0 -1  14 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 proacl		  1034 0 -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	0	1	3 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 usesuper			16	0	1	4 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 usecatupd		16	0	1	5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 passwd			25	0  -1	6 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1260 valuntil			702 0	4	7 0 -1 -1 t p f i f f f t 0));
! DATA(insert ( 1260 useconfig	  1009	0  -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 0 -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, 0,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attstattarget"}, 23, 0,	4,	4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attlen"},		  21, 0,	2,	5, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1249, {"attnum"},		  21, 0,	2,	6, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1249, {"attndims"},	  23, 0,	4,	7, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attcacheoff"},  23, 0,	4,	8, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"atttypmod"},	  23, 0,	4,	9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attbyval"},	  16, 0,	1, 10, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attstorage"},   18, 0,	1, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attisset"},	  16, 0,	1, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attalign"},	  18, 0,	1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attnotnull"},   16, 0, 1, 14, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"atthasdef"},	  16, 0, 1, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attisdropped"}, 16, 0, 1, 16, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attislocal"},	  16, 0, 1, 17, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attinhcount"},  21, 0, 2, 18, 0, -1, -1, true, 'p', false, 's', 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 0  4   3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attstattarget	23 0  4   4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attlen			21 0  2   5 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1249 attnum			21 0  2   6 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1249 attndims			23 0  4   7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attcacheoff		23 0  4   8 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 atttypmod		23 0  4   9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attbyval			16 0  1  10 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attstorage		18 0  1  11 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attisset			16 0  1  12 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attalign			18 0  1  13 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attnotnull		16 0  1  14 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 atthasdef		16 0  1  15 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attisdropped		16 0  1  16 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attislocal		16 0  1  17 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attinhcount		21 0  2  18 0 -1 -1 t p f s 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, 0,	4,	3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relowner"},	   23, 0,	4,	4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relam"},		   26, 0,	4,	5, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relfilenode"},   26, 0,	4,	6, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relpages"},	   23, 0,	4,	7, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltuples"},	   700, 0,	4,	8, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltoastrelid"}, 26, 0,	4,	9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltoastidxid"}, 26, 0,	4, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relhasindex"},   16, 0,	1, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relisshared"},   16, 0,	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, 0,	2, 14, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relchecks"},	   21, 0,	2, 15, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"reltriggers"},   21, 0,	2, 16, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relukeys"},	   21, 0,	2, 17, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relfkeys"},	   21, 0,	2, 18, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relrefs"},	   21, 0,	2, 19, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relhasoids"},    16, 0,	1, 20, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhaspkey"},    16, 0,	1, 21, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhasrules"},   16, 0,	1, 22, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhassubclass"},16, 0,	1, 23, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relacl"},		 1034, 0,  -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 0  4   3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relowner			23 0  4   4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relam			26 0  4   5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relfilenode		26 0  4   6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relpages			23 0  4   7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltuples	   700 0  4   8 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1259 reltoastrelid	26 0  4   9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltoastidxid	26 0  4  10 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relhasindex		16 0  1  11 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relisshared		16 0  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 0  2  14 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relchecks		21 0  2  15 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 reltriggers		21 0  2  16 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relukeys			21 0  2  17 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relfkeys			21 0  2  18 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relrefs			21 0  2  19 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relhasoids		16 0  1  20 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhaspkey		16 0  1  21 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhasrules		16 0  1  22 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhassubclass	16 0  1  23 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relacl		  1034 0 -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
***************
*** 490,495 ****
   *				  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 f));
  
  #endif   /* PG_ATTRIBUTE_H */
--- 496,501 ----
   *				  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 */
Index: src/include/catalog/pg_class.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/include/catalog/pg_class.h,v
retrieving revision 1.73
diff -c -r1.73 pg_class.h
*** src/include/catalog/pg_class.h	2002/09/04 20:31:37	1.73
--- src/include/catalog/pg_class.h	2002/09/22 01:58:28
***************
*** 136,142 ****
  
  DATA(insert OID = 1247 (  pg_type		PGNSP 71 PGUID 0 1247 0 0 0 0 f f r 20 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 17 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("");
--- 136,142 ----
  
  DATA(insert OID = 1247 (  pg_type		PGNSP 71 PGUID 0 1247 0 0 0 0 f f r 20 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("");
Index: src/include/nodes/parsenodes.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/include/nodes/parsenodes.h,v
retrieving revision 1.207
diff -c -r1.207 parsenodes.h
*** src/include/nodes/parsenodes.h	2002/09/18 21:35:24	1.207
--- src/include/nodes/parsenodes.h	2002/09/22 01:58:32
***************
*** 301,307 ****
  	NodeTag		type;
  	char	   *colname;		/* name of column */
  	TypeName   *typename;		/* type of column */
! 	bool		is_inherited;	/* column is inherited? */
  	bool		is_not_null;	/* NOT NULL constraint specified? */
  	Node	   *raw_default;	/* default value (untransformed parse
  								 * tree) */
--- 301,308 ----
  	NodeTag		type;
  	char	   *colname;		/* name of column */
  	TypeName   *typename;		/* type of column */
! 	bool		is_local;		/* column is locally defined (not inherited) */
! 	int2		inhcount;		/* number of parents of the column */
  	bool		is_not_null;	/* NOT NULL constraint specified? */
  	Node	   *raw_default;	/* default value (untransformed parse
  								 * tree) */
Index: src/test/regress/expected/alter_table.out
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/test/regress/expected/alter_table.out,v
retrieving revision 1.50
diff -c -r1.50 alter_table.out
*** src/test/regress/expected/alter_table.out	2002/09/22 00:37:09	1.50
--- src/test/regress/expected/alter_table.out	2002/09/22 01:58:36
***************
*** 1054,1056 ****
--- 1054,1172 ----
  -- this should fail
  alter table only renameColumn add column x int;
  ERROR:  Attribute must be added to child tables too
+ create table p (f1 int, f2 int);
+ create table c (f1 int not null) inherits(p);
+ NOTICE:  CREATE TABLE: merging attribute "f1" with inherited definition
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ ERROR:  ALTER TABLE: Cannot drop inherited column "f1"
+ alter table p drop column f1;
+ -- c.f1 is still there, but no longer inherited
+ select f1 from c;
+  f1 
+ ----
+ (0 rows)
+ 
+ alter table c drop column f1;
+ select f1 from c;
+ ERROR:  Attribute "f1" not found
+ drop table p cascade;
+ NOTICE:  Drop cascades to table c
+ create table p (f1 int, f2 int);
+ create table c () inherits(p);
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ ERROR:  ALTER TABLE: Cannot drop inherited column "f1"
+ alter table p drop column f1;
+ -- c.f1 is dropped now, since there is no local definition for it
+ select f1 from c;
+ ERROR:  Attribute "f1" not found
+ drop table p cascade;
+ NOTICE:  Drop cascades to table c
+ create table p (f1 int, f2 int);
+ create table c () inherits(p);
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ ERROR:  ALTER TABLE: Cannot drop inherited column "f1"
+ alter table only p drop column f1;
+ -- c.f1 is NOT dropped, but must now be considered non-inherited
+ alter table c drop column f1;
+ drop table p cascade;
+ NOTICE:  Drop cascades to table c
+ create table p (f1 int, f2 int);
+ create table c (f1 int not null) inherits(p);
+ NOTICE:  CREATE TABLE: merging attribute "f1" with inherited definition
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ ERROR:  ALTER TABLE: Cannot drop inherited column "f1"
+ alter table only p drop column f1;
+ -- c.f1 is still there, but no longer inherited
+ alter table c drop column f1;
+ drop table p cascade;
+ NOTICE:  Drop cascades to table c
+ create table p1(id int, name text);
+ create table p2(id2 int, name text, height int);
+ create table c1(age int) inherits(p1,p2);
+ NOTICE:  CREATE TABLE: merging multiple inherited definitions of attribute "name"
+ create table gc1() inherits (c1);
+ select relname, attname, attinhcount, attislocal from pg_class join
+ pg_attribute on (pg_class.oid=pg_attribute.attrelid) where relname
+ ~'^(p1|p2|c1|gc1)$' and attnum>0 order by relname, attname;
+  relname | attname | attinhcount | attislocal 
+ ---------+---------+-------------+------------
+  c1      | age     |           0 | t
+  c1      | height  |           1 | f
+  c1      | id      |           1 | f
+  c1      | id2     |           1 | f
+  c1      | name    |           2 | f
+  gc1     | age     |           1 | f
+  gc1     | height  |           1 | f
+  gc1     | id      |           1 | f
+  gc1     | id2     |           1 | f
+  gc1     | name    |           1 | f
+  p1      | id      |           0 | t
+  p1      | name    |           0 | t
+  p2      | height  |           0 | t
+  p2      | id2     |           0 | t
+  p2      | name    |           0 | t
+ (15 rows)
+ 
+ -- should work
+ alter table only p1 drop column name;
+ -- should work. Now c1.name is local and inhcount is 0.
+ alter table only p2 drop column name;
+ -- should be rejected since its inherited
+ alter table gc1 drop column name;
+ ERROR:  ALTER TABLE: Cannot drop inherited column "name"
+ -- should work, and drop gc1.name along
+ alter table c1 drop column name;
+ -- should fail: column does not exist
+ alter table gc1 drop column name;
+ ERROR:  Relation "gc1" has no column "name"
+ -- should work and drop the attribute in all tables
+ alter table p2 drop column height;
+ select relname, attname, attinhcount, attislocal from pg_class join
+ pg_attribute on (pg_class.oid=pg_attribute.attrelid) where relname
+ ~'^(p1|p2|c1|gc1)$' and attnum>0 order by relname, attname;
+  relname |           attname            | attinhcount | attislocal 
+ ---------+------------------------------+-------------+------------
+  c1      | ........pg.dropped.2........ |           0 | t
+  c1      | ........pg.dropped.4........ |           1 | f
+  c1      | age                          |           0 | t
+  c1      | id                           |           1 | f
+  c1      | id2                          |           1 | f
+  gc1     | ........pg.dropped.2........ |           1 | f
+  gc1     | ........pg.dropped.4........ |           1 | f
+  gc1     | age                          |           1 | f
+  gc1     | id                           |           1 | f
+  gc1     | id2                          |           1 | f
+  p1      | ........pg.dropped.2........ |           0 | t
+  p1      | id                           |           0 | t
+  p2      | ........pg.dropped.2........ |           0 | t
+  p2      | ........pg.dropped.3........ |           0 | t
+  p2      | id2                          |           0 | t
+ (15 rows)
+ 
+ drop table p1, p2 cascade;
+ NOTICE:  Drop cascades to table c1
+ NOTICE:  Drop cascades to table gc1
Index: src/test/regress/sql/alter_table.sql
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/test/regress/sql/alter_table.sql,v
retrieving revision 1.32
diff -c -r1.32 alter_table.sql
*** src/test/regress/sql/alter_table.sql	2002/08/30 19:23:20	1.32
--- src/test/regress/sql/alter_table.sql	2002/09/22 01:58:39
***************
*** 764,766 ****
--- 764,840 ----
  
  -- this should fail
  alter table only renameColumn add column x int;
+ 
+ create table p (f1 int, f2 int);
+ create table c (f1 int not null) inherits(p);
+ 
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ alter table p drop column f1;
+ -- c.f1 is still there, but no longer inherited
+ select f1 from c;
+ alter table c drop column f1;
+ select f1 from c;
+ 
+ drop table p cascade;
+ 
+ create table p (f1 int, f2 int);
+ create table c () inherits(p);
+ 
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ alter table p drop column f1;
+ -- c.f1 is dropped now, since there is no local definition for it
+ select f1 from c;
+ 
+ drop table p cascade;
+ 
+ create table p (f1 int, f2 int);
+ create table c () inherits(p);
+ 
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ alter table only p drop column f1;
+ -- c.f1 is NOT dropped, but must now be considered non-inherited
+ alter table c drop column f1;
+ 
+ drop table p cascade;
+ 
+ create table p (f1 int, f2 int);
+ create table c (f1 int not null) inherits(p);
+ 
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ alter table only p drop column f1;
+ -- c.f1 is still there, but no longer inherited
+ alter table c drop column f1;
+ 
+ drop table p cascade;
+ 
+ create table p1(id int, name text);
+ create table p2(id2 int, name text, height int);
+ create table c1(age int) inherits(p1,p2);
+ create table gc1() inherits (c1);
+ 
+ select relname, attname, attinhcount, attislocal from pg_class join
+ pg_attribute on (pg_class.oid=pg_attribute.attrelid) where relname
+ ~'^(p1|p2|c1|gc1)$' and attnum>0 order by relname, attname;
+ 
+ -- should work
+ alter table only p1 drop column name;
+ -- should work. Now c1.name is local and inhcount is 0.
+ alter table only p2 drop column name;
+ -- should be rejected since its inherited
+ alter table gc1 drop column name;
+ -- should work, and drop gc1.name along
+ alter table c1 drop column name;
+ -- should fail: column does not exist
+ alter table gc1 drop column name;
+ -- should work and drop the attribute in all tables
+ alter table p2 drop column height;
+ 
+ select relname, attname, attinhcount, attislocal from pg_class join
+ pg_attribute on (pg_class.oid=pg_attribute.attrelid) where relname
+ ~'^(p1|p2|c1|gc1)$' and attnum>0 order by relname, attname;
+ 
+ drop table p1, p2 cascade;
Index: doc/src/sgml/catalogs.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql-server/doc/src/sgml/catalogs.sgml,v
retrieving revision 2.60
diff -c -r2.60 catalogs.sgml
*** doc/src/sgml/catalogs.sgml	2002/09/18 21:35:20	2.60
--- doc/src/sgml/catalogs.sgml	2002/09/22 01:58:46
***************
*** 822,835 ****
       </row>
  
       <row>
!       <entry>attisinherited</entry>
        <entry><type>bool</type></entry>
        <entry></entry>
        <entry>
!        This column is inherited from some other relation.  An inherited
!        column cannot be dropped nor renamed.
        </entry>
       </row>
  
      </tbody>
     </tgroup>
--- 822,846 ----
       </row>
  
       <row>
!       <entry>attislocal</entry>
        <entry><type>bool</type></entry>
        <entry></entry>
        <entry>
!        This column is defined locally in the relation (as opposed to
! 	   being inherited).  Note that a column may be locally defined
! 	   and inherited simultaneously.
        </entry>
       </row>
+ 
+ 	 <row>
+ 	  <entry>attinhcount</entry>
+ 	  <entry><type>int2</type></entry>
+ 	  <entry></entry>
+ 	  <entry>
+ 	   The number of ancestors this column has.  A column with a 
+ 	   nonzero number of ancestors cannot be dropped nor renamed.
+ 	  </entry>
+ 	 </row>
  
      </tbody>
     </tgroup>
