Re: PG19: two RI fast-path issues found while testing the batching revert

From: Matheus Alcantara <matheusssilv97(at)gmail(dot)com>
To: Amit Langote <amitlangote09(at)gmail(dot)com>
Cc: Nathan Bossart <nathandbossart(at)gmail(dot)com>, Melanie Plageman <melanieplageman(at)gmail(dot)com>, Nikolay Samokhvalov <nik(at)postgres(dot)ai>, pgsql-hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: PG19: two RI fast-path issues found while testing the batching revert
Date: 2026-10-07 14:04:31
Message-ID: 99b79fbf-c4ae-464c-b254-2a8d9e5f3dce@gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 07/10/26 08:47, Amit Langote wrote:
> Thanks for the review.
>
>> I also noticed that a user-defined WITH INOUT AS IMPLICIT cast now works
>> through SPI. Before 0001 it failed with "no conversion function" from
>> ri_HashCompareOp(), so perhaps it's worth adding a test for it.
>
> +1, added in v2 (0001's ri_cast tests).
>
>> The pg_cast invalidation also seems to work fine. I tested it with a
>> session that had cached the fast path for a FK using a binary cast,
>> while another session replaced the cast with a function returning NULL,
>> and the next insert on the first session went through SPI and reported
>> the FK violation. The same works when the cast is replaced within the
>> same transaction.
>>
>> I have just a single comment: I'm wondering if the tests that 0001
>> rewords (fk_defer_main, the fkint invalidation test, fp_reentry and the
>> ri_snapshot STABLE test) now all seems to go through SPI, so they no
>> longer test the fast path issues they were written for, what do you
>> think?
>
> Good point. fk_defer_main and fp_reentry were written for batching,
> which is gone, so there's no fast-path code left for them to test;
> I've kept them as they are, now going through SPI. The fkint
> invalidation test and the ri_snapshot test cover the fast path's
> handling of its cached metadata being invalidated mid-check and its
> pushing of the check's snapshot as the active one, so in v2 they use
> the equality function of a custom opclass instead of a cast, the only
> user code a fast-path check still runs, which also makes the pk_fast
> name accurate again.
>
>> Some minor comments:
>>
>> - "getBaseType(fk_type) != righttype &&" on the new check seems
>> redundant since IsBinaryCoercible() already handles the same type and
>> domain cases.
>>
>> - The "typedef struct RI_CompareHashEntry RI_CompareHashEntry;" added
>> by 2da86c1ef9 before FastPathMeta is not needed anymore.
>>
>> - The ri_check_fastpath_index() header comment only mentions index
>> properties, but the new check depends on the FK table. The comment
>> before the fast path call on RI_FKey_check() also only mentions
>> non-partitioned and non-temporal FKs.
>>
>> - "pk_fast" on the ri_snapshot test now also goes through SPI, so the
>> name is a may be misleading.
>
> All addressed in v2.
>

Thanks for the new version. I've tested v2 and it looks good to me.

> I'll push 0001 and 0002 tomorrow barring objections.
>

+1 from me.

--
Matheus Alcantara
EDB: https://www.enterprisedb.com

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Tatsuya Kawata 2026-10-07 14:21:29 Re: [PATCH] Add memory/disk usage for Function Scan nodes in EXPLAIN
Previous Message Nisha Moond 2026-10-07 13:26:14 Re: [PATCH] Preserve replication origin OIDs in pg_upgrade