| From: | Amit Langote <amitlan(at)postgresql(dot)org> |
|---|---|
| To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
| Subject: | pgsql: Remove batching from RI fast-path checks |
| Date: | 2026-09-10 05:46:01 |
| Message-ID: | E1x4Xbk-00000004FD2-32Wt@gemulon.postgresql.org |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-committers |
Remove batching from RI fast-path checks
Commit b7b27eb41a5 added batching to the direct-index fast path for
foreign key checks introduced by 2da86c1ef9b. Instead of probing the
referenced index once per row, it accumulated referencing rows and
checked them in groups, using SK_SEARCHARRAY for single-column foreign
keys.
The batching requires state to survive across trigger invocations and
to be flushed at the end of each trigger-firing cycle. Follow-up work
has had to define how that state interacts with nested trigger firing,
subtransactions, deferred constraints, and SET CONSTRAINTS.
Failure to handle one of those cases can leave a buffered check
unperformed, allowing a transaction to commit a permanent foreign key
violation without reporting an error. With PostgreSQL 19 close to
release, there is not enough time to gain confidence that all relevant
trigger and transaction states have been covered.
Remove the batching and its after-trigger callback infrastructure,
including the per-batch RI cache and associated subtransaction cleanup.
Restore the early exit in AfterTriggerFireDeferred(), since batch
callbacks can no longer queue additional deferred triggers after
afterTriggerInvokeEvents() returns.
Remove tests that exercise only the batching implementation and its
callback and cache lifetime machinery. Retain tests that continue to
exercise the underlying per-row fast path, including validation,
scan-key construction, cross-type rechecks, deferred checks, and
metadata invalidation.
Keep the underlying per-row fast path. It performs each check
synchronously and retains no pending checks across trigger invocations.
Also retain the fixes made to the per-row probe path, including support
for domain-typed referencing columns, restriction to btree referenced
indexes, concurrent index replacement, metadata invalidation, and
nullable referenced keys.
This removal applies only to REL_19_STABLE.
Discussion: https://postgr.es/m/CA+HiwqEDcCSDoYTtoXH4Ta_BpGN+revMZSLLj6GRz2_5ybwE1g@mail.gmail.com
Branch
------
REL_19_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/25649d6e791c2d803fff0ce8b69ed968028a5edc
Modified Files
--------------
.git-blame-ignore-revs | 3 -
doc/src/sgml/release-19.sgml | 4 -
src/backend/access/transam/xact.c | 2 -
src/backend/commands/trigger.c | 206 +----
src/backend/utils/adt/ri_triggers.c | 937 +--------------------
src/include/commands/trigger.h | 24 -
src/test/isolation/isolation_schedule | 2 +-
.../specs/ri_fastpath_reindex.spec | 12 +-
src/test/regress/expected/foreign_key.out | 347 +-------
src/test/regress/expected/triggers.out | 24 -
src/test/regress/sql/foreign_key.sql | 305 +------
src/test/regress/sql/triggers.sql | 23 -
src/tools/pgindent/typedefs.list | 4 -
13 files changed, 128 insertions(+), 1765 deletions(-)
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Fujii Masao | 2026-09-10 07:13:03 | pgsql: Remove stale comment and redundant assignment in BuildTupleHashT |
| Previous Message | Michael Paquier | 2026-09-10 04:56:46 | pgsql: Split transaction data out of pgstats table counters |