Ситуация простая. Потребовалось изменить два значение поля jobNumber. Запустил соответствующие апдейты. Посмотрел лог выполнения. Запросы выругались, что была блокировка. По логике вещей если была блокировка PostgreSQL должен был ждать её окончания и после этого завершить выполнение запросов.
Однако сейчас я делаю select и вижу, что в БД по прежнему остались старые данные.
SELECT * FROM xml_files where "jobNumber" > 9
Вот лог. Судя по которому походу запросы были заблокированы и не отработали. Как такое возможно??
UPDATE xml_files SET "jobNumber" = 1 WHERE "jobNumber" > 9 AND "jobNumber" < 12;
psql:D:/dump/job_numbers.sql:1: ОШИБКА: обнаружена взаимоблокировка
ПОДРОБНОСТИ: Процесс 7444 ожидает в режиме ShareLock блокировку "транзакция 17499718"; заблокирован процессом 10304.
Процесс 10304 ожидает в режиме ShareLock блокировку "транзакция 16365708"; заблокирован процессом 7444.
ПОДСКАЗКА: Подробности запроса смотрите в протоколе сервера.
КОНТЕКСТ: при изменении кортежа (147470,18) в отношении "xml_files"
UPDATE xml_files SET "jobNumber" = 8 WHERE "jobNumber" >= 12;
psql:D:/dump/job_numbers.sql:3: ОШИБКА: обнаружена взаимоблокировка
ПОДРОБНОСТИ: Процесс 7444 ожидает в режиме ShareLock блокировку "транзакция 17697349"; заблокирован процессом 10304.
Процесс 10304 ожидает в режиме ShareLock блокировку "транзакция 17535413"; заблокирован процессом 7444.
ПОДСКАЗКА: Подробности запроса смотрите в протоколе сервера.
КОНТЕКСТ: при изменении кортежа (40940,13) в отношении "xml_files"