Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

insert_conflict.sql

  • Tom Lane's avatar
    9c810a2e
    Fix failure to handle conflicts in non-arbiter exclusion constraints. · 9c810a2e
    Tom Lane authored
    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>
    9c810a2e
    History
    Fix failure to handle conflicts in non-arbiter exclusion constraints.
    Tom Lane authored
    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>