Postgresql блокирует тупик - PullRequest
       5

Postgresql блокирует тупик

3 голосов
/ 19 октября 2010

Я занимаюсь разработкой системы с использованием Django + Postgresql.Это мой первый раз с postgresql, но я выбрал его, потому что мне нужны были транзакции и функции внешнего ключа.

В определенном представлении я должен заблокировать свои таблицы с помощью AccessExclusiveLock, чтобы предотвратить любое чтение или запись во время этого просмотра.Это потому, что я делаю некоторые проверки всех данных, прежде чем сохранить / обновить свои объекты.

Я заметил противоречивую ошибку, которая время от времени происходит.Это из-за оператора выбора, который происходит непосредственно после оператора блокировки.Требуется наличие AccessShareLock.Я прочитал на сайте postgresql , что AccessShareLock конфликтует с AccessExclusiveLock.

Что я не могу понять, так это почему это происходит в первую очередь.Зачем postgresql запрашивать неявную блокировку, если она уже имеет явную блокировку, охватывающую эту неявную блокировку?Во-вторых, я не могу понять, почему это представление работает на 2 разных процессах postregsql?Разве они не должны быть собраны в одной транзакции?

Спасибо заранее.

1 Ответ

1 голос
/ 19 октября 2010

В PostgreSQL вместо получения исключительных блокировок доступа я бы рекомендовал установить соответствующий уровень изоляции транзакции в вашем сеансе.Поэтому перед запуском «обновления» отправьте в свою базу данных следующую команду:

begin;
set transaction isolation level repeatable read;
-- your SQL commands here
commit;

Согласно вашему описанию вам необходимо повторяемое чтение уровень изоляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...