PostgreSQL锁定问题

时间:2011-02-18 19:49:19

标签: sql postgresql locking

我试图弄清楚如何锁定整个表格而不是写在Postgres中然而它似乎没有工作,所以我假设我做错了。

例如,表名是“用户”。

LOCK TABLE用户处于EXCLUSIVE MODE;

当我检查视图pg_locks时,它似乎不在那里。我尝试过其他锁定模式也无济于事。

其他交易也能够执行LOCK功能,并且不会像我想象的那样阻止。

在psql工具(8.1)中,我只需返回LOCK TABLE。

任何帮助都会很棒。

2 个答案:

答案 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很旧)

相关问题