diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2016-07-04 16:09:11 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2016-07-04 16:09:11 -0400 |
commit | 9c810a2edccaffe0ff48b50d31c47a155e4f9815 (patch) | |
tree | 62b834fa1bba35c137e555c757559fce72aa70d3 /src/backend/utils/adt/jsonb.c | |
parent | 29a2195de645759d66ee7e77c4c05b2c4aeb6729 (diff) | |
download | postgresql-9c810a2edccaffe0ff48b50d31c47a155e4f9815.tar.gz postgresql-9c810a2edccaffe0ff48b50d31c47a155e4f9815.zip |
Fix failure to handle conflicts in non-arbiter exclusion constraints.
ExecInsertIndexTuples treated an exclusion constraint as subject to
noDupErr processing even when it was not listed in arbiterIndexes, and
would therefore not error out for a conflict in such a constraint, instead
returning it as an arbiter-index failure. That led to an infinite loop in
ExecInsert, since ExecCheckIndexConstraints ignored the index as-intended
and therefore didn't throw the expected error. To fix, make the exclusion
constraint code path use the same condition as the index_insert call does
to decide whether no-error-for-duplicates behavior is appropriate. While
at it, refactor a little bit to avoid unnecessary list_member_oid calls.
(That surely wouldn't save anything worth noticing, but I find the code
a bit clearer this way.)
Per bug report from Heikki Rauhala. Back-patch to 9.5 where ON CONFLICT
was introduced.
Report: <4C976D6B-76B4-434C-8052-D009F7B7AEDA@reaktor.fi>
Diffstat (limited to 'src/backend/utils/adt/jsonb.c')
0 files changed, 0 insertions, 0 deletions