public inbox for [email protected]
help / color / mirror / Atom feedFrom: jian he <[email protected]>
To: Chao Li <[email protected]>
Cc: Postgres hackers <[email protected]>
Cc: Peter Eisentraut <[email protected]>
Subject: Re: Fix SET EXPRESSION for virtual columns with whole-row dependencies
Date: Sat, 13 Jun 2026 10:42:46 +0800
Message-ID: <CACJufxHaErSjsxkhMJVS9zuGvrgej831ibieAvn1+1o-GQ8dFg@mail.gmail.com> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
<CACJufxHTK0Qk7AwdrHK=y8OtK--zEVY-Ossxx4UUgxaE2NCAXA@mail.gmail.com>
<[email protected]>
<[email protected]>
On Wed, Jun 10, 2026 at 5:06 PM Chao Li <[email protected]> wrote:
>
>
> After reading the other implementation in [1], I realized that I had missed the partial-index case, so I added coverage for that.
>
> I am still sending an updated version of this patch because my implementation is different from the one in [1]. I would like people to compare the two approaches and decide which direction is better.
>
I tried your patch before but abandoned it due to many regression test failures.
RememberAllDependentForRebuilding
{
default:
/*
* We don't expect any other sorts of objects to depend on a
* column. A whole-relation scan can find the relation's row
* type, which doesn't need rebuilding for SET EXPRESSION.
*/
if (attnum == 0 &&
foundObject.classId == TypeRelationId &&
get_typ_typrelid(foundObject.objectId) ==
RelationGetRelid(rel))
continue;
elog(ERROR, "unexpected object depending on column: %s",
getObjectDescription(&foundObject, false));
break;
}
RememberAllDependentForRebuilding(tab, AT_SetExpression, rel, 0, NULL) scans for
all dependencies on the relation (not just a specific column, since attnum=0).
This is much broader than a column-level scan.
The above DEFAULT branch in the SWITCH currently only exempts the relation's own
row type (TypeRelationId). But a table can have many other kinds of dependents
— indexes, triggers, foreign keys, views, etc. — and any of them that
hitting this
DEFAULT branch would incorrectly fire:
elog(ERROR, "unexpected object depending on column: %s", ...)
We need to check that every possible object type that can depend on a relation
and ensure none of them fall through to that `elog(ERROR, ...)`.
In RememberAllDependentForRebuilding, we have `if (subtype ==
AT_AlterColumnType)` guards against AT_SetExpression, — those branches
silently skip AT_SetExpression, which is good.
But the real risk is the DEFAULT branch, which lacks such a guard and
will error on anything unexpected.
view thread (9+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected], [email protected], [email protected]
Subject: Re: Fix SET EXPRESSION for virtual columns with whole-row dependencies
In-Reply-To: <CACJufxHaErSjsxkhMJVS9zuGvrgej831ibieAvn1+1o-GQ8dFg@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox