@beduin01

Разве возможно чтобы PostgreSQL пропустил выполнение заблокированных запросов?

Ситуация простая. Потребовалось изменить два значение поля 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"
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Есть мысль что ты сам себя заблокировал. Работаешь в UI ?

Есть еще мысль что надо посчитать count сколько ты собираешся обновить. Может там - вся таблица обновляется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы