我试图弄清楚如何锁定整个表格而不是写在Postgres中然而它似乎没有工作,所以我假设我做错了。
例如,表名是“用户”。
LOCK TABLE用户处于EXCLUSIVE MODE;
当我检查视图pg_locks时,它似乎不在那里。我尝试过其他锁定模式也无济于事。
其他交易也能够执行LOCK功能,并且不会像我想象的那样阻止。
在psql工具(8.1)中,我只需返回LOCK TABLE。
任何帮助都会很棒。
答案 0 :(得分:9)
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;
我实际在我的数据库上测试了这个。
答案 1 :(得分:4)
请记住,“锁定表”仅持续到事务结束。所以除非你已经在psql中发出了“begin”,否则它是无效的。
(在9.0中,这给出了一个错误:“LOCK TABLE只能在事务块中使用”.8.1很旧)