Re: let ALTER TABLE DROP COLUMN drop whole-row referenced object
Chao Li <li.evan.chao@gmail.com>
From: Chao Li <li.evan.chao@gmail.com>
To: jian he <jian.universality@gmail.com>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2025-09-11T01:27:27Z
Lists: pgsql-hackers
> On Sep 9, 2025, at 11:12, jian he <jian.universality@gmail.com> wrote: > > hi. > I found a new way to solve this problem. > > CREATE TABLE ts (a int, c int, b int > constraint cc check((ts = ROW(1,1,1))), > constraint cc1 check((ts.a = 1))); > > > ALTER TABLE ts DROP COLUMN a CASCADE; > will drop above all indexes, constraints and policies on the table ts. > <v2-0001-ALTER-TABLE-DROP-COLUMN-drop-wholerow-referenced-object.patch> I agree we should delete those constraints and indices on the whole row, otherwise, with cc (ts=ROW(1,1,1)), once a column is dropped, it won’t be able to insert data anymore: ``` evantest=# insert into ts values (2, 3); ERROR: new row for relation "ts" violates check constraint "cc" DETAIL: Failing row contains (2, 3). evantest=# insert into ts values (1, 1); ERROR: cannot compare record types with different numbers of columns ``` But v2 needs a rebase, I cannot apply it to master. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/