> On Aug 25, 2025, at 01:34, Yugo Nagata <[email protected]> wrote:
> 
> Currently, TM_FailureData.ctid is used as a reference to the
> latest version of oldtuple, but this is not always correct. 
> Instead, the tupleid passed to table_tuple_lock should be used.


Based on my understanding:

At line 3386:
                    result = table_tuple_lock(resultRelationDesc, tupleid,
                                              estate->es_snapshot,
                                              inputslot, estate->es_output_cid,
                                              lockmode, LockWaitBlock,
                                              TUPLE_LOCK_FLAG_FIND_LAST_VERSION,
                                              &context->tmfd);

When calling table_tuple_lock(), “tupleid” is used to lock the tuple, and 
“&context->tmfd” is used to carry out lasted version of tuple info if 
table_tuple_lock() fails.

In this case, at line 3394, it drops into:

                    switch (result)
                    {
                        case TM_Ok:

Result is TM_Ok, meaning table_tuple_lock() didn’t fail, then we should not use 
info from “context->tmfd”.

So I think this fix makes sense.

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




Reply via email to