Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy

Поиск
Список
Период
Сортировка
Искать
От
BharatDB
Тема
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy
Дата
Msg-id
CAAh00ER+dssk3U6hniUzUFLnYu-RDLVQVGo0TiMivNLj8EEWTA@mail.gmail.com
Ответ на
Список
Дерево обсуждения
Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy jian he <jian.universality@gmail.com>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy Kirill Reshke <reshkekirill@gmail.com>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy Peter Eisentraut <peter@eisentraut.org>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy Tom Lane <tgl@sss.pgh.pa.us>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy Tom Lane <tgl@sss.pgh.pa.us>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy jian he <jian.universality@gmail.com>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy Kirill Reshke <reshkekirill@gmail.com>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy jian he <jian.universality@gmail.com>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy jian he <jian.universality@gmail.com>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy Kirill Reshke <reshkekirill@gmail.com>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy BharatDB <bharatdbpg@gmail.com>
Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy Kirill Reshke <reshkekirill@gmail.com>

Hi all,

I tried to fix a bug in PostgreSQL where ALTER TABLE ... DROP EXPRESSION fails on multi-level inheritance hierarchies.

Bug:
When a parent table has a generated column and child/grandchild tables inherit from it, executing:

ALTER TABLE parent ALTER COLUMN d DROP EXPRESSION;

ERROR: ALTER TABLE / DROP EXPRESSION must be applied to child tables too

Fix Details:

  • Updated file: src/backend/commands/tablecmds.c

  • Function modified: ATPrepDropExpression()

  • Change: Added !recursing check to ensure proper recursion across inheritance.

    if (!recurse && !recursing &&

        find_inheritance_children(RelationGetRelid(rel), lockmode))

        ereport(ERROR,

                errcode(ERRCODE_FEATURE_NOT_SUPPORTED),

                errmsg("ALTER TABLE / DROP EXPRESSION must be applied to child tables too"),

                errhint("Do not specify the ONLY keyword."));


  • Test Query DROP TABLE IF EXISTS parent CASCADE;
    CREATE TABLE parent (a int, d int GENERATED ALWAYS AS (11) STORED);
    CREATE TABLE child () INHERITS (parent);
    CREATE TABLE grandchild () INHERITS (child);
    ALTER TABLE parent ALTER COLUMN d DROP EXPRESSION;

  • Output ALTER TABLE


On Thu, Aug 28, 2025 at 10:49 AM Kirill Reshke <reshkekirill@gmail.com> wrote:
On Thu, 28 Aug 2025 at 08:35, jian he <jian.universality@gmail.com> wrote:
>
> That means, we don't need to change the ATPrepDropExpression function
> argument for now?

Sure. V3 with this attached, and I think we can move cf entry to RFC

--
Best regards,
Kirill Reshke
В списке pgsql-hackers по дате отправления
От: Daniel Gustafsson
Дата:
От: Nazir Bilal Yavuz
Дата:
FAQ