Вопросы по блокировке PostgreSQL - PullRequest
2 голосов
/ 18 февраля 2011

Я пытаюсь выяснить, как заблокировать целую таблицу от записи в Postgres, однако она не работает, поэтому я предполагаю, что я делаю что-то не так.

Имя таблицы - "пользователи"например.

пользователи LOCK TABLE в эксклюзивном режиме;

Когда я проверяю представление pg_locks, кажется, его там нет.Я пробовал и другие режимы блокировки, но безрезультатно.

Другие транзакции также способны выполнять функцию LOCK и не блокируют, как я предполагал, что они будут.

В инструменте psql (8.1) Я просто возвращаюсь LOCK TABLE.

Любая помощь была бы замечательной.

Ответы [ 2 ]

9 голосов
/ 18 февраля 2011

В стандарте SQL отсутствует LOCK TABLE, который вместо этого использует SET TRANSACTION для указания уровней параллелизма транзакций. Вы должны иметь возможность использовать LOCK в транзакциях, подобных этой

BEGIN WORK;
LOCK TABLE table_name IN ACCESS EXCLUSIVE MODE;
SELECT * FROM table_name WHERE id=10;
Update table_name SET field1=test WHERE id=10;
COMMIT WORK;

Я действительно проверял это на своей базе данных.

4 голосов
/ 18 февраля 2011

Помните, что «таблица блокировок» действует только до конца транзакции.Так что это неэффективно, если вы уже не произвели «начало» в psql.

(в 9.0 это выдает ошибку: «LOCK TABLE может использоваться только в блоках транзакций». 8.1 очень старая)

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