diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2022-01-06 16:46:46 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2022-01-06 16:46:46 -0500 |
commit | 7ead9925ff94cfc9c3237672b7d19d5cc1b27ef5 (patch) | |
tree | de7633dff1b6732f4c5f2cf52ce10caf715ce236 /src/backend/commands/tablecmds.c | |
parent | 328dfbdabd22e321bfe1f0547be71faca99a11e9 (diff) | |
download | postgresql-7ead9925ff94cfc9c3237672b7d19d5cc1b27ef5.tar.gz postgresql-7ead9925ff94cfc9c3237672b7d19d5cc1b27ef5.zip |
Prevent altering partitioned table's rowtype, if it's used elsewhere.
We disallow altering a column datatype within a regular table,
if the table's rowtype is used as a column type elsewhere,
because we lack code to go around and rewrite the other tables.
This restriction should apply to partitioned tables as well, but it
was not checked because ATRewriteTables and ATPrepAlterColumnType
were not on the same page about who should do it for which relkinds.
Per bug #17351 from Alexander Lakhin. Back-patch to all supported
branches.
Discussion: https://postgr.es/m/17351-6db1870f3f4f612a@postgresql.org
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r-- | src/backend/commands/tablecmds.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 89bc865e287..23364d3c7ec 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -12183,12 +12183,11 @@ ATPrepAlterColumnType(List **wqueue, errmsg("\"%s\" is not a table", RelationGetRelationName(rel)))); - if (tab->relkind == RELKIND_COMPOSITE_TYPE || - tab->relkind == RELKIND_FOREIGN_TABLE) + if (!RELKIND_HAS_STORAGE(tab->relkind)) { /* - * For composite types and foreign tables, do this check now. Regular - * tables will check it later when the table is being rewritten. + * For relations without storage, do this check now. Regular tables + * will check it later when the table is being rewritten. */ find_composite_type_dependencies(rel->rd_rel->reltype, rel, NULL); } |