TGViewer
Чашечка Java Чашечка Java @a_cup_of_java · 8.35K subscribers
Post #8695 340
Spring Boot и PostgreSQL: дедлок может быть в транзакциях

Приложение получило ошибку 40P01? Это PostgreSQL обнаружил цикл ожидания блокировок, а не доказательство взаимной блокировки Java-потоков.

Достаточно двух строк: транзакция A обновила первую и ждёт вторую, B — наоборот. Такие дедлоки возможны даже без явного LOCK TABLE, потому что обновление строки тоже берёт блокировку.

PostgreSQL прервёт одну транзакцию, чтобы остальные продолжили работу. Какая станет жертвой, заранее полагаться нельзя. В локальной проверке двух сессий получен именно deadlock detected с SQLSTATE 40P01.

Базовый способ избежать цикла — брать блокировки в согласованном порядке во всех путях приложения. Если всё же повторяете запрос после дедлока, повторять нужно транзакцию целиком, а не только последнюю упавшую команду.

Дедлоки и порядок блокировок

#spring #java
  • 👍 1
More from @a_cup_of_java
  1. Oct 14, 2026Развёрнутое пояснение: 1. Создаётся session, реализующий AutoCloseable: при закрытии он вы…
  2. Oct 14, 2026Post #8693
  3. Oct 13, 2026Post #8692
  4. Oct 13, 2026Showboat и Rodney помогают показать работу ИИ-агента Саймон Уиллисон собирает демонстрации…
  5. Oct 13, 2026Spring Boot Actuator: свои проверки здоровья и доступ к диагностике В Spring Boot 4 провер…
  6. Oct 13, 2026Хаотичный планировщик помог найти ошибку в тесте JFR В январском разборе Йоханнес Бехберге…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →