Re: tablecmds: reject CLUSTER ON for partitioned tables earlier
| От | Chao Li |
|---|---|
| Тема | Re: tablecmds: reject CLUSTER ON for partitioned tables earlier |
| Дата | |
| Msg-id | EA6CB317-60C2-4BA9-8E02-DBCAD384F107@gmail.com обсуждение исходный текст |
| Ответ на | Re: tablecmds: reject CLUSTER ON for partitioned tables earlier (Chao Li <li.evan.chao@gmail.com>) |
| Ответы |
Re: tablecmds: reject CLUSTER ON for partitioned tables earlier
|
| Список | pgsql-hackers |
> On Jan 23, 2026, at 07:30, Chao Li <li.evan.chao@gmail.com> wrote: > > > >> On Jan 22, 2026, at 17:01, Chao Li <li.evan.chao@gmail.com> wrote: >> >> >> >>> On Jan 21, 2026, at 11:55, Chao Li <li.evan.chao@gmail.com> wrote: >>> >>> Hi Hacker, >>> >>> I noticed this while working other patches related to “ALTER TABLE”. >>> >>> “ALTER TABLE … CLUSTER ON” and "SET WITHOUT CLUSTER" are not supported for partitioned tables, but currently ATPrepCmd()allows them through and they only fail later at execution time. >>> >>> This patch rejects these commands earlier by using the existing ATSimplePermissions() infrastructure in ATPrepCmd(),matching the handling of other unsupported ALTER TABLE actions on partitioned tables (such as SET LOGGED / SETUNLOGGED). This makes the behavior more consistent and simplifies the code path. >>> >>> As a result, the error reported for partitioned tables changes: >>> >>> Before the patch: >>> ``` >>> evantest=# ALTER TABLE p_test CLUSTER ON idx_p_test_id; >>> ERROR: cannot mark index clustered in partitioned table >>> ``` >>> >>> With the patch: >>> ``` >>> evantest=# ALTER TABLE p_test CLUSTER ON idx_p_test_id; >>> ERROR: ALTER action CLUSTER ON cannot be performed on relation "p_test" >>> DETAIL: This operation is not supported for partitioned tables. >>> ``` >>> >>> Best regards, >>> -- >>> Chao Li (Evan) >>> HighGo Software Co., Ltd. >>> https://www.highgo.com/ >>> >>> >>> >>> >>> <v1-0001-tablecmds-reject-CLUSTER-ON-for-partitioned-table.patch> >> >> >> >> Applying the same change to INHERIT/NO INHeRIT in v2-0002. Other than that, fixing 2 more things for INHERIT/NO INHERIT: >> >> * The header comment of ATPrepAddInherit() was a copy-paste mistake, it described something totally unrelated. >> * NO INHERIT didn’t call ATPrepAddInherit() to check early, so it had to go deeper and run unnecessary checks. >> >> Basically, 0001 and 0002 do the same thing on two sub-commands. If accepted, they can be squashed. >> >> Best regards, >> -- >> Chao Li (Evan) >> HighGo Software Co., Ltd. >> https://www.highgo.com/ >> >> <v2-0001-tablecmds-reject-CLUSTER-ON-for-partitioned-table.patch><v2-0002-tablecmds-reject-INHERIT-NO-INHERIT-for-partition.patch> > > PFA v3: > > 0001 is the same as v2. In 0002: > > * Restored the header comment of ATPrepAddInherit, because I realized the should belong to ATExecAddInherit. > * Renamed ATPrepAddInherit to ATPrepChangeInherit. > > Best regards, > -- > Chao Li (Evan) > HighGo Software Co., Ltd. > https://www.highgo.com/ > > > > > <v3-0001-tablecmds-reject-CLUSTER-ON-for-partitioned-table.patch><v3-0002-tablecmds-reject-INHERIT-NO-INHERIT-for-partition.patch> Please ignore v3 that was badly generated. PFA v4: > 0001 is the same as v2. In 0002: > > * Restored the header comment of ATPrepAddInherit, because I realized the should belong to ATExecAddInherit. > * Renamed ATPrepAddInherit to ATPrepChangeInherit. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/
Вложения
В списке pgsql-hackers по дате отправления: