我想弄清楚如何锁定整个表在Postgres中编写,但它似乎并没有工作,所以我假设我做错了什么。PostgreSQL锁问题
表名是'用户'例如。
LOCK TABLE users IN EXCLUSIVE MODE;
当我检查视图pg_locks它似乎并不在那里。我试过其他的锁定模式也无济于事。
其他交易也能够执行LOCK功能,并且不会像我认为的那样阻止。
在psql工具(8.1)中,我只需返回LOCK TABLE。
任何帮助将是美好的。
我想弄清楚如何锁定整个表在Postgres中编写,但它似乎并没有工作,所以我假设我做错了什么。PostgreSQL锁问题
表名是'用户'例如。
LOCK TABLE users IN EXCLUSIVE MODE;
当我检查视图pg_locks它似乎并不在那里。我试过其他的锁定模式也无济于事。
其他交易也能够执行LOCK功能,并且不会像我认为的那样阻止。
在psql工具(8.1)中,我只需返回LOCK TABLE。
任何帮助将是美好的。
有一个在SQL标准,而不是使用SET TRANSACTION来指定没有LOCK TABLE事务的并发级别。你应该能够在这样的交易中使用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;
我实际上已经在我的db上测试过了。
请注意,“访问独占模式”可以防止任何其他进程从表中读取数据,而不仅仅是写入数据。您可以使用`共享行独占模式'将表锁定为针对运行更新或插入的其他进程。 – araqnid 2011-03-10 11:13:33
请记住,“锁定表”只能持续到事务结束。所以它是无效的,除非你已经在psql中发布了“begin”。
(在9.0这给出了一个错误:“LOCK TABLE只能在事务块中使用” 8.1已经很老了。)
好吧,那只是我的愚蠢。谢谢! – jreid42 2011-02-18 19:56:09
为什么要锁定表格? – 2011-02-18 20:14:24