Некоторые потенциальные подводные камни использования ON CONFLICT DO NOTHING в PostgreSQL:
- Проблемы с параллельной вставкой. stackoverflow.com vc.ru Если две транзакции одновременно выполняют вставку, каждая получает свой идентификатор, даже если одна потом откатится. vc.ru Это может привести к появлению пропусков. vc.ru
- Ошибки при использовании объекта SEQUENCE. vc.ru Если вручную добавить строку с идентификатором 9999, а sequence «застрял» на 5000, то при следующих попытках осуществить вставку строки БД дойдёт до значения 9999 и произойдёт ошибка «дубликат ключа». vc.ru Это связано с тем, что sequence не обновляется автоматически. vc.ru
- Потеря данных. vc.ru Иногда база говорит, что вставка прошла успешно, но на диск ещё ничего не записано. vc.ru Если в этот момент выключить сервер, можно потерять часть данных. vc.ru
Для минимизации возможных проблем рекомендуется настраивать fsync, commit и уровни надёжности транзакций. vc.ru