Как проверить, что соответствующая строка в таблице БД была заблокирована с помощью postgresql - PullRequest
1 голос
/ 30 мая 2019

У меня есть одна таблица, и я заблокировал ее, используя идентификатор для обновления.

select name from tablename where id=2 for update

как я могу проверить, что соответствующая строка в таблице БД заблокирована.

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Если вы уверены, что строка с id=2 существует, вы можете использовать:

select name from tablename where id=2
for update skip locked

Если результат пустой, это означает, что строка заблокирована другим пользователем (или нет)не существует).

Вы также можете использовать:

select name from tablename where id=2
for update nowait

Если строка существует и заблокирована другим пользователем, запрос выдаст ошибку.

0 голосов
/ 30 мая 2019

Для обучения или тренировок, а если нет, то чего вы пытаетесь достичь?

Откройте два соединения (например, с помощью «psql») и в каждом прогоне:

begin; select name from tablename where id=2 for update;

Второй должен блокироваться, пока первый не выполнит откат или фиксацию. Эта блокировка является доказательством блокировки. Есть много вариантов, один или другой, или оба могут выполнять фактическое ОБНОВЛЕНИЕ, а не ВЫБРАТЬ ... ДЛЯ ОБНОВЛЕНИЯ.

...