pgsql: Fix ON CONFLICT DO NOTHING/UPDATE for temporal indexes

From: Peter Eisentraut <peter(at)eisentraut(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix ON CONFLICT DO NOTHING/UPDATE for temporal indexes
Date: 2024-05-10 13:11:26
Message-ID: E1s5Q21-000KWK-GE@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix ON CONFLICT DO NOTHING/UPDATE for temporal indexes

A PRIMARY KEY or UNIQUE constraint with WITHOUT OVERLAPS will be a
GiST index, not a B-Tree, but it will still have indisunique set. The
code for ON CONFLICT fails if it sees a non-btree index that has
indisunique. This commit fixes that and adds some tests. But now
that we can't just test indisunique, we also need some extra checks to
prevent DO UPDATE from running against a WITHOUT OVERLAPS constraint
(because the conflict could happen against more than one row, and we'd
only update one).

Author: Paul A. Jungwirth <pj(at)illuminatedcomputing(dot)com>
Discussion: https://www.postgresql.org/message-id/1426589a-83cb-4a89-bf40-713970c07e63@illuminatedcomputing.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/144c2ce0cc75ff99c66749b0ca5235d037df7c09

Modified Files
--------------
src/backend/executor/execIndexing.c | 2 +-
src/backend/optimizer/util/plancat.c | 9 +-
src/test/regress/expected/without_overlaps.out | 176 +++++++++++++++++++++++++
src/test/regress/sql/without_overlaps.sql | 113 ++++++++++++++++
4 files changed, 298 insertions(+), 2 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Bruce Momjian 2024-05-10 19:47:31 pgsql: doc PG 17 relnotes: add FETCH_COUNT item
Previous Message Alvaro Herrera 2024-05-10 12:23:09 Re: pgsql: Fix overread in JSON parsing errors for incomplete byte sequence