diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2024-07-26 12:39:45 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2024-07-26 12:39:45 -0400 |
commit | 5d1d8b3c82c2a796bf7d89f2a5785ce9424acab1 (patch) | |
tree | d6151a5c5b809bcfd9653d9d6ec658749abbc15c /src/backend/commands/tablecmds.c | |
parent | c883453cb29cb40c1e59c3c54d159c5e744da8a9 (diff) | |
download | postgresql-5d1d8b3c82c2a796bf7d89f2a5785ce9424acab1.tar.gz postgresql-5d1d8b3c82c2a796bf7d89f2a5785ce9424acab1.zip |
Clarify error message and documentation related to typed tables.
We restrict typed tables (those declared as "OF composite_type")
to be based on stand-alone composite types, not composite types
that are the implicitly-created rowtypes of other tables.
But if you tried to do that, you got the very confusing error
message "type foo is not a composite type". Provide a more specific
message for that case. Also clarify related documentation in the
CREATE TABLE man page.
Erik Wienhold and David G. Johnston, per complaint from Hannu Krosing.
Discussion: https://postgr.es/m/CAMT0RQRysCb_Amy5CTENSc5GfsvXL1a4qX3mv_hx31_v74P==g@mail.gmail.com
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r-- | src/backend/commands/tablecmds.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 721d24783b4..0b2a52463f1 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -6962,8 +6962,15 @@ check_of_type(HeapTuple typetuple) * the type before the typed table creation/conversion commits. */ relation_close(typeRelation, NoLock); + + if (!typeOk) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("type %s is the row type of another table", + format_type_be(typ->oid)), + errdetail("A typed table must use a stand-alone composite type created with CREATE TYPE."))); } - if (!typeOk) + else ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("type %s is not a composite type", |