PostgreSQL页面级locking

我是相当新的postgresql。 我检查了文档,找不到有关如何进行页面级locking的任何信息。

我明白,我可以设置一个表,像这样的locking模式:LOCK TABLE myTable IN LOCKMODE ROW EXCLUSIVE;

我将如何实现页面级locking我的会话? 让我知道,如果我似乎有一个误解的基本面。

你为什么要做明确的页面级别locking? 你不能控制每个页面上的内容,所以你会locking一些任意的数据集合。 这有什么用途?

我想你正在寻找行级locking ,这是使用SELECT ... FOR UPDATESELECT ... FOR SHARE

PostgreSQL将行级锁升级到一些内部的页级锁,比如可序列化的快照谓词跟踪,缓冲区pipe理等等。当行级锁太多时,PostgreSQL会执行此操作,并且会成为性能问题。 你不需要关心这个,因为这在SQL级别对你几乎没有影响。 正常的行锁 – 通过UPDATEDELETESELECT ... FOR UPDATESELECT ... FOR SHARE – AFAIK从未升级到页级锁,因为这样做会增加死锁的可能性。

如果你确信你想要页面级locking,请详细解释你想要解决的问题,以及为什么行级或表级locking不能完成这项工作。

看到:

  • 显式locking – PostgreSQL手册
  • SELECT ... FOR [UPDATE|SHARE] – 行级locking
  • LOCK – 表级locking
  • lockingPostgreSQL是一个更高级的locking讨论