v3-0001-tablecmds-reject-CLUSTER-ON-for-partitioned-table.patch
application/octet-stream
Filename: v3-0001-tablecmds-reject-CLUSTER-ON-for-partitioned-table.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch v3-0001
Subject: tablecmds: reject CLUSTER ON for partitioned tables earlier
| File | + | − |
|---|---|---|
| src/backend/commands/tablecmds.c | 1 | 1 |
| src/test/regress/expected/cluster.out | 4 | 2 |
From 75a3d94296e83ec5cc82b98f606227503f2c575e Mon Sep 17 00:00:00 2001 From: "Chao Li (Evan)" <lic@highgo.com> Date: Wed, 21 Jan 2026 11:27:03 +0800 Subject: [PATCH v3 1/2] tablecmds: reject CLUSTER ON for partitioned tables earlier ALTER TABLE ... CLUSTER ON and SET WITHOUT CLUSTER are not supported for partitioned tables and already fail today, but only at exec time. Reject these commands earlier via ATSimplePermissions(), matching the handling of other unsupported ALTER TABLE actions on partitioned tables (such as SET LOGGED / SET UNLOGGED). This centralizes the relation-kind check in the ALTER TABLE preparation phase, improving consistency and maintainability. As a result, partitioned tables now report the standard ATSimplePermissions() error for unsupported ALTER TABLE actions. Author: Chao Li <lic@highgo.com> --- src/backend/commands/tablecmds.c | 2 +- src/test/regress/expected/cluster.out | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index f976c0e5c7e..3e9f62e9d37 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -5142,7 +5142,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd, case AT_ClusterOn: /* CLUSTER ON */ case AT_DropCluster: /* SET WITHOUT CLUSTER */ ATSimplePermissions(cmd->subtype, rel, - ATT_TABLE | ATT_PARTITIONED_TABLE | ATT_MATVIEW); + ATT_TABLE | ATT_MATVIEW); /* These commands never recurse */ /* No command-specific prep needed */ pass = AT_PASS_MISC; diff --git a/src/test/regress/expected/cluster.out b/src/test/regress/expected/cluster.out index 4d40a6809ab..07c52e647f7 100644 --- a/src/test/regress/expected/cluster.out +++ b/src/test/regress/expected/cluster.out @@ -492,9 +492,11 @@ Number of partitions: 3 (Use \d+ to list them.) CLUSTER clstrpart; ERROR: there is no previously clustered index for table "clstrpart" ALTER TABLE clstrpart SET WITHOUT CLUSTER; -ERROR: cannot mark index clustered in partitioned table +ERROR: ALTER action SET WITHOUT CLUSTER cannot be performed on relation "clstrpart" +DETAIL: This operation is not supported for partitioned tables. ALTER TABLE clstrpart CLUSTER ON clstrpart_idx; -ERROR: cannot mark index clustered in partitioned table +ERROR: ALTER action CLUSTER ON cannot be performed on relation "clstrpart" +DETAIL: This operation is not supported for partitioned tables. DROP TABLE clstrpart; -- Ownership of partitions is checked CREATE TABLE ptnowner(i int unique) PARTITION BY LIST (i); -- 2.50.1 (Apple Git-155)