From: | Peter Eisentraut <peter(at)eisentraut(dot)org> |
---|---|
To: | Richard Guo <guofenglinux(at)gmail(dot)com> |
Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: expand virtual generated columns in get_relation_constraints() |
Date: | 2025-09-15 14:36:59 |
Message-ID: | fe797df2-6b4a-4414-9962-703c71239a24@eisentraut.org |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 11.09.25 04:16, Richard Guo wrote:
> On Wed, Sep 3, 2025 at 11:05 PM Peter Eisentraut <peter(at)eisentraut(dot)org> wrote:
>> We (I) missed expanding virtual generated columns in
>> get_relation_constraints() in plancat.c. That way, some opportunities
>> for constraint exclusion will be missed if a constraint contains virtual
>> generated columns, as can be shown in the attached test case (thanks to
>> Richard Guo). Simple fix attached.
>
> I'm afraid this fix isn't thorough: it covers only CHECK constraints
> but not NOT NULL or partitioning constraints. For example,
>
> create table vt (a int, b int generated always as (a * 2) virtual not null);
> set constraint_exclusion to on;
>
> explain (costs off) select * from vt where b is null;
> QUERY PLAN
> -----------------------------
> Seq Scan on vt
> Filter: ((a * 2) IS NULL)
> (2 rows)
>
> We should get a dummy Result rather than a SeqScan.
>
> What I have in mind is something like the attached v2, which covers
> all types of constraints.
Thanks, I have committed that.
From | Date | Subject | |
---|---|---|---|
Next Message | suyu.cmj | 2025-09-15 14:41:41 | Newly created replication slot may be invalidated by checkpoint |
Previous Message | Natalya Aksman | 2025-09-15 13:50:56 | Re: Adding skip scan (including MDAM style range skip scan) to nbtree |