Ошибка PostgreSQL 40001 означает, что транзакция была прервана из-за конфликта с параллельной транзакцией. Это штатный механизм защиты целостности на уровнях изоляции REPEATABLE READ и SERIALIZABLE: сервер не смог гарантировать порядок выполнения и откатил транзакцию.
Важно: это не дефект конфигурации. Приложение, работающее на повышенных уровнях изоляции, обязано быть готово к такому откату.
Как исправить ошибку 40001
- Реализуйте повтор транзакции на стороне приложения – после отката запрос выполняется заново целиком, с задержкой перед повторной попыткой.
- Проверьте уровень изоляции текущей сессии:
- Если бизнес-логика не требует строгих гарантий, используйте READ COMMITTED – уровень по умолчанию, на котором ошибка 40001 не возникает:
- Сократите длительность транзакций и приведите операции к единому порядку обращения к строкам – это снижает частоту конфликтов.
SHOW transaction_isolation;
BEGIN ISOLATION LEVEL READ COMMITTED;