diff options
author | Robert Haas <rhaas@postgresql.org> | 2011-04-20 21:35:15 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2011-04-20 21:38:47 -0400 |
commit | 68739ba856c52e6721d6cffec21f1bf0327a9a7b (patch) | |
tree | f0982dcba2eb0414a732582e29ae03995636a6fb /src/backend/parser/parse_utilcmd.c | |
parent | 520bcd9c9bb4d06627054e1c567bac1feb2da879 (diff) | |
download | postgresql-68739ba856c52e6721d6cffec21f1bf0327a9a7b.tar.gz postgresql-68739ba856c52e6721d6cffec21f1bf0327a9a7b.zip |
Allow ALTER TABLE name {OF type | NOT OF}.
This syntax allows a standalone table to be made into a typed table,
or a typed table to be made standalone. This is possibly a mildly
useful feature in its own right, but the real motivation for this
change is that we need it to make pg_upgrade work with typed tables.
This doesn't actually fix that problem, but it's necessary
infrastructure.
Noah Misch
Diffstat (limited to 'src/backend/parser/parse_utilcmd.c')
-rw-r--r-- | src/backend/parser/parse_utilcmd.c | 22 |
1 files changed, 1 insertions, 21 deletions
diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 4f1bb34dae0..0078814905d 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -825,35 +825,15 @@ transformOfType(CreateStmtContext *cxt, TypeName *ofTypename) TupleDesc tupdesc; int i; Oid ofTypeId; - bool typeOk = false; AssertArg(ofTypename); tuple = typenameType(NULL, ofTypename, NULL); + check_of_type(tuple); typ = (Form_pg_type) GETSTRUCT(tuple); ofTypeId = HeapTupleGetOid(tuple); ofTypename->typeOid = ofTypeId; /* cached for later */ - if (typ->typtype == TYPTYPE_COMPOSITE) - { - Relation typeRelation; - - Assert(OidIsValid(typ->typrelid)); - typeRelation = relation_open(typ->typrelid, AccessShareLock); - typeOk = (typeRelation->rd_rel->relkind == RELKIND_COMPOSITE_TYPE); - /* - * Close the parent rel, but keep our AccessShareLock on it until xact - * commit. That will prevent someone else from deleting or ALTERing - * the type before the typed table creation commits. - */ - relation_close(typeRelation, NoLock); - } - if (!typeOk) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("type %s is not a composite type", - format_type_be(ofTypeId)))); - tupdesc = lookup_rowtype_tupdesc(ofTypeId, -1); for (i = 0; i < tupdesc->natts; i++) { |