postgres INSERT вызывает срабатывание даже при ON ON CONFLICT НЕ НИЧЕГО - PullRequest
0 голосов
/ 01 марта 2019

В паре ответов SO ( 1 , 2 ) предполагается, что триггеры INSERT не должны срабатывать при возникновении конфликта и ON CONFLICT DO NOTHING в триггерезаявление.Возможно, я неправильно понял, но в моих экспериментах это не так:

testdb=> insert into t (n) values ('dummy') on conflict do nothing;
NOTICE:  Called def()
INSERT 0 1
testdb=> insert into t (n) values ('dummy') on conflict do nothing;
NOTICE:  Called def()
INSERT 0 0

Я бы ожидал увидеть Called def() в первый раз, но не в следующий.

Что я делаю не так?

1 Ответ

0 голосов
/ 01 марта 2019
Триггер

A BEFORE INSERT запускается до проверки на конфликт.Триггер имеет возможность изменить вставленные значения, и не имеет смысла проверять наличие коллизий до того, как это произойдет.Для документации:

Обратите внимание, что эффекты всех триггеров BEFORE INSERT для каждой строки отражаются в исключенных значениях, поскольку эти эффекты могли способствовать исключению строки из вставки..

Триггер AFTER INSERT будет работать так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...