Некоторые особенности синтаксиса INSERT в PostgreSQL, которые стоит учитывать при работе с уникальными индексами:
- Блокировка операции INSERT. 1 В таблицах с уникальными индексами операция INSERT может блокироваться, если в параллельных сеансах выполняются действия, которые блокируют или изменяют строки, совпадающие с вставляемыми значениями в уникальном индексе. 1
- Использование условия ON CONFLICT DO NOTHING/UPDATE. 5 Оно позволяет в случае возникновения конфликта при вставке произвести обновление полей или же проигнорировать ошибку. 5 В выражении указывается отдельно conflicttarget (по какому полю/условию будет рассматриваться конфликт) и conflictaction (что делать, когда конфликт произошёл: DO NOTHING или DO UPDATE SET). 5
- Детерминированность команды INSERT. 1 Команда INSERT с предложением ON CONFLICT DO UPDATE является «детерминированной», то есть ей не разрешено воздействовать на любую существующую строку больше одного раза. 1
- Требования к предлагаемым для добавления строкам. 1 Строки, предлагаемые для добавления, не должны дублироваться с точки зрения атрибутов, ограничиваемых решающим индексом или ограничением. 1