Workaround for bug #13148 (deferred EXCLUDE constraint violation) - Mailing list pgsql-general

From Evan Martin
Subject Workaround for bug #13148 (deferred EXCLUDE constraint violation)
Date
Msg-id 553E2F65.3080508@realityexists.net
Whole thread Raw
Responses Re: Workaround for bug #13148 (deferred EXCLUDE constraint violation)  (John McKown <john.archie.mckown@gmail.com>)
List pgsql-general
I submitted the following bug report through the web form a few days
ago. It's causing problems in my application and I've been unable to
find a way to get around it. If someone here, familiar with PostgreSQL
internals, could suggest a workaround I'd really appreciate it!


I have a deferred EXCLUDE constraint on a derived table. Inside a
transaction I insert a new row that conflicts with an existing one (so the
constraint would fail if it was immediate), delete the old row and run
an unrelated UPDATE on the new row, then try to commit. I would expect
the commit to succeed, since there is now no conflict, but it fails with

     ERROR: conflicting key value violates exclusion constraint
"uq_derived_timeslice_dup_time_ex"
     SQL state: 23P01
     Detail: Key (feature_id, valid_time_begin, interpretation,
(COALESCE(sequence_number, (-1))))=(1, 2015-01-01 00:00:00, X, -1) conflicts
with existing key (feature_id, valid_time_begin, interpretation,
(COALESCE(sequence_number, (-1))))=(1, 2015-01-01 00:00:00, X, -1).

If I run the delete statement first it works. If I remove the (seemingly
unrelated) update statement it also works. Reproducible under PostgreSQL
9.3.6 and 9.4.1 64-bit on Windows 7 and Postgresql 9.2.10 32-bit on
Ubuntu using the attached script.



Attachment

pgsql-general by date:

Previous
From: Craig Ringer
Date:
Subject: Re: BDR Selective Replication
Next
From: Marc-André Goderre
Date:
Subject: Re: Invalid memory alloc