]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Throw a more on-point error for publications depending on columns.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 2 May 2024 21:36:31 +0000 (17:36 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 2 May 2024 21:36:31 +0000 (17:36 -0400)
Same as 42b041243, except that the trouble case is a publication
WHERE clause that depends on a column.

Again reported by Alexander Lakhin.  Back-patch to v15 where
we added publication WHERE clauses.

Discussion: https://postgr.es/m/548a47bc-87ae-b3df-c6a2-60b9966f808b@gmail.com

src/backend/commands/tablecmds.c

index d256312b63a91a5607ae4bfd1b42a9145634a4ba..81dd5f4501afb88074e70ea4c4505265fd2cd5cf 100644 (file)
@@ -12816,6 +12816,20 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
                                RememberStatisticsForRebuilding(foundObject.objectId, tab);
                                break;
 
+                       case OCLASS_PUBLICATION_REL:
+
+                               /*
+                                * Column reference in a PUBLICATION ... FOR TABLE ... WHERE
+                                * clause.  Same issues as above.  FIXME someday.
+                                */
+                               ereport(ERROR,
+                                               (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+                                                errmsg("cannot alter type of a column used by a publication WHERE clause"),
+                                                errdetail("%s depends on column \"%s\"",
+                                                                  getObjectDescription(&foundObject, false),
+                                                                  colName)));
+                               break;
+
                        case OCLASS_TYPE:
                        case OCLASS_CAST:
                        case OCLASS_COLLATION:
@@ -12845,7 +12859,6 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
                        case OCLASS_PARAMETER_ACL:
                        case OCLASS_PUBLICATION:
                        case OCLASS_PUBLICATION_NAMESPACE:
-                       case OCLASS_PUBLICATION_REL:
                        case OCLASS_SUBSCRIPTION:
                        case OCLASS_TRANSFORM: