PostgreSQL table 上的 SELECT COUNT(*) 会锁定它吗?
Does a SELECT COUNT(*) on a PostgreSQL table lock it?
在 PostgreSQL table 上执行 SELECT COUNT(*) 会锁定它吗?如果是这样,有没有办法让它在 SQL 服务器中表现得像 WITH (nolock)?
没有
A SELECT 永远不会在 Postgres 中锁定 table。
或者更准确地说:它只需要一个非常弱的共享锁来防止 table 上的 DDL。
在 Postgres 中,读者永远不会阻止作者,而作者也永远不会阻止读者。
对 table 的每种类型的访问都需要一个锁。所以是的,它确实需要锁。但看起来你有一个不同的问题,因为只有当你遇到问题时才会弹出这样的问题。但我们不知道那是什么问题。
所有不同类型的锁以及它们如何相互作用,都可以在 manual 中找到。在大多数情况下,您不会遇到任何并发问题。您可以在同一个 table 上同时执行数十个 SELECT 语句,而不会出现任何锁定问题。
在 PostgreSQL table 上执行 SELECT COUNT(*) 会锁定它吗?如果是这样,有没有办法让它在 SQL 服务器中表现得像 WITH (nolock)?
没有
A SELECT 永远不会在 Postgres 中锁定 table。
或者更准确地说:它只需要一个非常弱的共享锁来防止 table 上的 DDL。
在 Postgres 中,读者永远不会阻止作者,而作者也永远不会阻止读者。
对 table 的每种类型的访问都需要一个锁。所以是的,它确实需要锁。但看起来你有一个不同的问题,因为只有当你遇到问题时才会弹出这样的问题。但我们不知道那是什么问题。
所有不同类型的锁以及它们如何相互作用,都可以在 manual 中找到。在大多数情况下,您不会遇到任何并发问题。您可以在同一个 table 上同时执行数十个 SELECT 语句,而不会出现任何锁定问题。