Re: Fix tuple deformation with virtual generated NOT NULL columns - Mailing list pgsql-hackers

From cca5507
Subject Re: Fix tuple deformation with virtual generated NOT NULL columns
Date
Msg-id tencent_A50A880C0C5ED0818A9D66E84DA15F6D6106@qq.com
Whole thread
In response to Fix tuple deformation with virtual generated NOT NULL columns  (Chao Li <li.evan.chao@gmail.com>)
Responses Re: Fix tuple deformation with virtual generated NOT NULL columns
List pgsql-hackers
> While testing "Optimize tuple deformation”, I found a bug:
> ```
> evantest=# create table t (a int not null,
> evantest(# g int generated always as (a+1) virtual not null,
> evantest(# b int not null);
> CREATE TABLE
> evantest=# insert into t (a, b) values (10, 20);
> INSERT 0 1
> evantest=# select a, g, b from t;
>  a  | g  | b
> ----+----+---
>  10 | 11 | 0
> (1 row)
> ```

Nice catch! I can reproduce this bug on master. Some comments about the fix:

I find that a virtual generated column is stored as a null in heap tuple, so I think
we should stop setting 'attcacheoff' when we see a virtual generated column in
TupleDescFinalize(), or we will set wrong 'attcacheoff' value. But it seems that
we don't use these wrong value because we can only use 'attcacheoff' up until
the first NULL.

--
Regards,
ChangAo Chen

pgsql-hackers by date:

Previous
From: Ashutosh Sharma
Date:
Subject: Re: synchronized_standby_slots behavior inconsistent with quorum-based synchronous replication
Next
From: Peter Eisentraut
Date:
Subject: Re: FOR PORTION OF does not recompute GENERATED STORED columns that depend on the range column