pgsql: Don't throw serialization errors for self-conflicts in INSERT ON

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Don't throw serialization errors for self-conflicts in INSERT ON
Дата
Msg-id E1byRNe-0007oV-Ee@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Don't throw serialization errors for self-conflicts in INSERT ON CONFLICT.

A transaction that conflicts against itself, for example
    INSERT INTO t(pk) VALUES (1),(1) ON CONFLICT DO NOTHING;
should behave the same regardless of isolation level.  It certainly
shouldn't throw a serialization error, as retrying will not help.
We got this wrong due to the ON CONFLICT logic not considering the case,
as reported by Jason Dusek.

Core of this patch is by Peter Geoghegan (based on an earlier patch by
Thomas Munro), though I didn't take his proposed code refactoring for fear
that it might have unexpected side-effects.  Test cases by Thomas Munro
and myself.

Report: <CAO3NbwOycQjt2Oqy2VW-eLTq2M5uGMyHnGm=RNga4mjqcYD7gQ@mail.gmail.com>
Related-Discussion: <57EE93C8.8080504@postgrespro.ru>

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/a6c0a5b6e8a9498540c6a7bb1b6d68958acc9bc6

Modified Files
--------------
src/backend/executor/nodeModifyTable.c             |  13 ++-
.../expected/insert-conflict-do-nothing-2.out      | 105 +++++++++++++++++++++
src/test/isolation/isolation_schedule              |   1 +
.../specs/insert-conflict-do-nothing-2.spec        |  34 +++++++
src/test/regress/expected/insert_conflict.out      |  35 +++++++
src/test/regress/sql/insert_conflict.sql           |  32 +++++++
6 files changed, 218 insertions(+), 2 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Heikki Linnakangas
Дата:
Сообщение: Re: pgsql: Use OpenSSL EVP API for symmetric encryption in pgcrypto.
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Don't throw serialization errors for self-conflicts in INSERT ON