PostgreSQL相当于SQLServer的NoLock提示

时间:2010-03-06 23:56:12

标签: postgresql nolock

在SQLServer中,您可以使用语法“(nolock)”来确保查询不会锁定表,或者不会被锁定同一个表的其他查询阻止。 e.g。

SELECT * FROM mytable (nolock) WHERE id = blah

Postgres中的等效语法是什么?我在PG(http://www.postgresql.org/docs/8.1/interactive/sql-lock.html)中找到了关于表锁定的一些文档,但它似乎都是如何锁定表,而不是确保未锁定。 / p>

3 个答案:

答案 0 :(得分:50)

SELECT不会锁定PostgreSQL中的任何表,除非您想要锁定:

SELECT * FROM tablename FOR UPDATE;

PostgreSQL使用MVCC来最小化锁争用,以便在多用户环境中实现合理的性能。读者不与作家或其他读者发生冲突。

答案 1 :(得分:9)

我做了一些研究,似乎SQL Server中的NOLOCK提示与READ UNCOMMITTED事务隔离级别大致相同。在PostgreSQL中,您可以设置READ UNCOMMITTED,但它会默认将级别升级为READ COMMITTED。不支持READ UNCOMMITTED。

PostgreSQL 8.4交易隔离文档:http://www.postgresql.org/docs/8.4/static/transaction-iso.html

答案 2 :(得分:0)

nolock或readpast的目的是查看记录是否被当前锁定。用户可以在更新中使用它来查看所标识的记录是否已更改(受行影响);如果记录未锁定,则受影响的人数为1;如果为o,则记录已锁定

根据该结果,用户可以使用select进行更新以将其锁定以供自己使用。