Re: Fix ALTER TABLE DROP EXPRESSION with inheritance hierarchy

BharatDB <bharatdbpg@gmail.com>

From: BharatDB <bharatdbpg@gmail.com>
To: Kirill Reshke <reshkekirill@gmail.com>
Cc: jian he <jian.universality@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2025-10-22T12:26:41Z
Lists: pgsql-hackers

Attachments

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
>