2016-07-27 5 views
0

Я пытаюсь реализовать блокировку через базу данных с помощью команды SELECT FOR UPDATE Psql https://www.postgresql.org/docs/9.1/static/explicit-locking.htmlPSQL: блокировка строки с помощью SELECT FOR UPDATE

Я не могу найти много документации вокруг делает это, кроме того факта, что команда позволяет базу данных основанный на строках

Мне интересно, что произойдет, если Thread 1 выполнит SELECT FOR UPDATE, а затем Thread 2 появится сразу же и попытается выполнить ту же команду. Заблокирован ли поток 2 до тех пор, пока транзакция базы данных в потоке 1 не завершится или не вернется?

+0

Почему бы вам не попробовать? Вместо потоков вы можете имитировать это, открыв 2 сеанса в базе данных PostgreSQL и последовательно выполняя команды в транзакции. – sstan

ответ

1

Да, Thread2 будет ждать завершения Thread1.

Вы можете использовать NOWAIT или SKIP LOCKS, чтобы предотвратить ожидание работы (см. SELECT in the documentation).