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 **** ! attisinherited bool ! This column is inherited from some other relation. An inherited ! column cannot be dropped nor renamed. --- 822,846 ---- ! attislocal bool ! This column is defined locally in the relation (as opposed to ! being inherited). Note that a column may be locally defined ! and inherited simultaneously. + + + attinhcount + int2 + + + The number of ancestors this column has. A column with a + nonzero number of ancestors cannot be dropped nor renamed. + +