| From: | Andres Freund <andres(at)anarazel(dot)de> |
|---|---|
| To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
| Cc: | Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com>, dwwoelfel(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org |
| Subject: | Re: BUG #19380: Transition table in AFTER INSERT trigger misses rows from MERGE when used with INSERT in a CTE |
| Date: | 2026-01-24 17:03:49 |
| Message-ID: | hvus56twlvqnucatfamtodwwt4kaxfmorksxc2yk6su6p2teph@xjy4r6uvsaqd |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
Hi,
On 2026-01-24 10:58:40 -0500, Tom Lane wrote:
> crake has reported in [1]:
>
> Leaf changes summary: 2 artifacts changed
> Changed leaf types summary: 2 leaf types changed
> Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function (2 filtered out)
> Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
>
> 'struct AfterTriggersTableData' changed:
> type size changed from 80 to 64 (in bytes)
> 2 data member deletions:
> 'Tuplestorestate* old_del_tuplestore', at offset 56 (in bytes)
> 'Tuplestorestate* new_ins_tuplestore', at offset 64 (in bytes)
> there are data member changes:
> 'TupleTableSlot* storeslot' offset changed from 72 to 56 (in bytes) (by -16 bytes)
>
> 'struct TransitionCaptureState' changed:
> type size changed from 24 to 40 (in bytes)
> 2 data member insertions:
> 'AfterTriggersTableData* tcs_update_private', at offset 24 (in bytes)
> 'AfterTriggersTableData* tcs_delete_private', at offset 32 (in bytes)
> there are data member changes:
> name of 'TransitionCaptureState::tcs_private' changed to 'TransitionCaptureState::tcs_insert_private'
>
>
> I find it unhelpful that it reported the AfterTriggersTableData
> change as an ABI change, even though that struct is not globally
> accessible. I wonder if there's some libabigail switches we
> should be tweaking to refine that.
Specifying --headers-dir ... during abidw seems to do the trick.
Without --headers-dir:
'struct AfterTriggersTableData at trigger.c:3912:1' changed:
type size changed from 80 to 64 (in bytes)
2 data member deletions:
'Tuplestorestate* old_del_tuplestore', at offset 56 (in bytes) at trigger.c:3934:1
'Tuplestorestate* new_ins_tuplestore', at offset 64 (in bytes) at trigger.c:3936:1
there are data member changes:
'TupleTableSlot* storeslot' offset changed from 72 to 56 (in bytes) (by -16 bytes)
'struct TransitionCaptureState at trigger.h:56:1' changed:
type size changed from 24 to 40 (in bytes)
2 data member insertions:
'AfterTriggersTableData* tcs_update_private', at offset 24 (in bytes) at trigger.h:82:1
'AfterTriggersTableData* tcs_delete_private', at offset 32 (in bytes) at trigger.h:83:1
there are data member changes:
name of 'TransitionCaptureState::tcs_private' changed to 'TransitionCaptureState::tcs_insert_private' at trigger.h:81:1
With --headers-dir:
'struct TransitionCaptureState at trigger.h:56:1' changed:
type size changed from 24 to 40 (in bytes)
2 data member insertions:
'AfterTriggersTableData* tcs_update_private', at offset 24 (in bytes) at trigger.h:82:1
'AfterTriggersTableData* tcs_delete_private', at offset 32 (in bytes) at trigger.h:83:1
(the reason --headers-dir matters is that it implies dropping private types)
So it seems like that'd improve things... I did check the PR adding this to
the buildfarm [1] and it doesn't use --headers-dir.
It also has the nice side-benefit of making the diffing a bit faster (65s to
48s on my older workstation).
Greetings,
Andres Freund
[1] https://github.com/PGBuildFarm/client-code/pull/38/changes
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2026-01-24 17:27:35 | Re: BUG #19380: Transition table in AFTER INSERT trigger misses rows from MERGE when used with INSERT in a CTE |
| Previous Message | Tom Lane | 2026-01-24 15:58:40 | Re: BUG #19380: Transition table in AFTER INSERT trigger misses rows from MERGE when used with INSERT in a CTE |