From: Tom Lane Date: Thu, 10 Jun 2004 18:25:02 +0000 (+0000) Subject: Fix oversight in recent ALTER TABLE improvements. We now support X-Git-Tag: REL9_0_0~12571 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=6121aed8a51966321a43e59750a7a6b9bb6eca36;p=pg-rex%2Fsyncrep.git Fix oversight in recent ALTER TABLE improvements. We now support ALTER TABLE tab ADD COLUMN col SERIAL, but we forgot to install the dependency between the column and the sequence, so the sequence would not go away if you dropped the table later. --- diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 7b0b35840e..e256a92833 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.113 2004/06/10 17:55:56 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.114 2004/06/10 18:25:02 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -199,6 +199,8 @@ static void ATPrepAddColumn(List **wqueue, Relation rel, bool recurse, static void ATExecAddColumn(AlteredTableInfo *tab, Relation rel, ColumnDef *colDef); static void add_column_datatype_dependency(Oid relid, int32 attnum, Oid typid); +static void add_column_support_dependency(Oid relid, int32 attnum, + RangeVar *support); static void ATExecDropNotNull(Relation rel, const char *colName); static void ATExecSetNotNull(AlteredTableInfo *tab, Relation rel, const char *colName); @@ -438,20 +440,9 @@ DefineRelation(CreateStmt *stmt, char relkind) rawDefaults = lappend(rawDefaults, rawEnt); } + /* Create dependency for supporting relation for this column */ if (colDef->support != NULL) - { - /* Create dependency for supporting relation for this column */ - ObjectAddress colobject, - suppobject; - - colobject.classId = RelOid_pg_class; - colobject.objectId = relationId; - colobject.objectSubId = attnum; - suppobject.classId = RelOid_pg_class; - suppobject.objectId = RangeVarGetRelid(colDef->support, false); - suppobject.objectSubId = 0; - recordDependencyOn(&suppobject, &colobject, DEPENDENCY_INTERNAL); - } + add_column_support_dependency(relationId, attnum, colDef->support); } /* @@ -2926,9 +2917,11 @@ ATExecAddColumn(AlteredTableInfo *tab, Relation rel, } /* - * Add datatype dependency for the new column. + * Add needed dependency entries for the new column. */ add_column_datatype_dependency(myrelid, i, attribute->atttypid); + if (colDef->support != NULL) + add_column_support_dependency(myrelid, i, colDef->support); } /* @@ -2950,6 +2943,24 @@ add_column_datatype_dependency(Oid relid, int32 attnum, Oid typid) } /* + * Install a dependency for a column's supporting relation (serial sequence). + */ +static void +add_column_support_dependency(Oid relid, int32 attnum, RangeVar *support) +{ + ObjectAddress colobject, + suppobject; + + colobject.classId = RelOid_pg_class; + colobject.objectId = relid; + colobject.objectSubId = attnum; + suppobject.classId = RelOid_pg_class; + suppobject.objectId = RangeVarGetRelid(support, false); + suppobject.objectSubId = 0; + recordDependencyOn(&suppobject, &colobject, DEPENDENCY_INTERNAL); +} + +/* * ALTER TABLE ALTER COLUMN DROP NOT NULL */ static void