A GiST index on a multirange stores only its bounding range, so different multiranges can produce the same index key. However, RelationFindReplTupleByIndex() and RelationFindDeletedTupleInfoByIndex() assume that matches through a primary key or replica identity index are exact and skip the equality check. This can cause updates or deletes to target the wrong row, and conflict detection to report update_deleted instead of update_missing. Fix this by rechecking candidates when the index scan sets xs_recheck. Compare only the index key columns, using the scan keys' equality operators and collations to match the index's notion of key equality. Backpatch to 18, where WITHOUT OVERLAPS was introduced. The change to RelationFindDeletedTupleInfoByIndex() applies only to 19 and later, where update_deleted conflict detection was added. Reported-by: Andres Freund <andres@anarazel.de> Author: Paul A. Jungwirth <pj@illuminatedcomputing.com> Author: Zhijie Hou <houzhijie22@gmail.com> Reviewed-by: Nisha Moond <nisha.moond412@gmail.com> Reviewed-by: kedar anavardekar <kedar.anavardekar@gmail.com> Reviewed-by: Amit Kapila <amit.kapila16@gmail.com> Discussion: https://postgr.es/m/kcyaok346iwocfdourf2oojgtz7ggxmh2ugis7qqhggs4qfzc2@cu6pkox4rfwp Discussion: https://postgr.es/m/e5nb5jbus2oa3pffmlo7pdvdckmchd54tqld4k3n6huyg5xxqn@7rounyvufjx6 Discussion: https://postgr.es/m/CA+renyWzTBC4GetPzJM1KqrejrmOWcGnn2NaA7tpee17HFxRPw@mail.gmail.com Backpatch-through: 18
PostgreSQL Database Management System
This directory contains the source code distribution of the PostgreSQL database management system.
PostgreSQL is an advanced object-relational database management system that supports an extended subset of the SQL standard, including transactions, foreign keys, subqueries, triggers, user-defined types and functions. This distribution also contains C language bindings.
Copyright and license information can be found in the file COPYRIGHT.
General documentation about this version of PostgreSQL can be found at https://www.postgresql.org/docs/18/. In particular, information about building PostgreSQL from the source code can be found at https://www.postgresql.org/docs/18/installation.html.
The latest version of this software, and related software, may be obtained at https://www.postgresql.org/download/. For more information look at our web site located at https://www.postgresql.org/.