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

execIndexing.c

Blame
    • 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>