> On Jun 8, 2026, at 21:01, Andres Freund <[email protected]> wrote:
> 
> Hi,
> 
> On 2026-06-06 16:50:29 +1200, David Rowley wrote:
>> On Thu, 4 Jun 2026 at 17:57, Chao Li <[email protected]> wrote:
>>> While testing "Optimize tuple deformation”, I found a bug:
>> 
>>> I think the problem is in finding the first non-guaranteed attribute where 
>>> virtual generated attributes are not considered:
>> 
>> Thanks for the report and fix. I pushed a slightly adjusted version.
>> Form_pg_attribute.attgenerated is '\0' for non-generated columns, so
>> there's no point in checking cattr->attgenerated as well as that.
>> 
>> I also added an Assert() to help catch any other reason that the
>> guaranteed column gets set incorrectly again in TupleDescFinalize().
> 
> Seems like a test for some of this would be good too?
> 
> Greetings,
> 
> Andres Freund

Okay, I tried to add a test matching my repro. With this test in place, I 
reverted the fix and ran make check; it failed by hitting the Assert David 
added:
```
TRAP: failed Assert("first_null_attr(tup->t_bits, natts) >= firstNullAttr"), 
File: "execTuples.c", Line: 1083, PID: 65804
0   postgres                            0x0000000104e883b8 ExceptionalCondition 
+ 216
1   postgres                            0x00000001048e5ebc 
slot_deform_heap_tuple + 456
2   postgres                            0x00000001048e2a18 
tts_buffer_heap_getsomeattrs + 112
3   postgres                            0x00000001048c5044 slot_getsomeattrs + 
68
4   postgres                            0x00000001048b97a4 ExecInterpExpr + 416
5   postgres                            0x00000001048b8ea0 
ExecInterpExprStillValid + 76
6   postgres                            0x000000010492ec68 ExecEvalExprNoReturn 
+ 44
7   postgres                            0x000000010492ec28 
ExecEvalExprNoReturnSwitchContext + 48
8   postgres                            0x000000010492eb20 ExecProject + 72
9   postgres                            0x000000010492e680 ExecScanExtended + 
288
10  postgres                            0x000000010492d7cc 
ExecSeqScanWithProject + 220
11  postgres                            0x00000001048db508 ExecProcNodeFirst + 
92
12  postgres                            0x00000001048d1eb8 ExecProcNode + 60
```

See the attached patch for details.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/




Attachment: v1-0001-Add-regression-test-for-virtual-generated-column-.patch
Description: Binary data

Reply via email to