PostgreSQL 页面级锁定

PostgreSQL 页面级锁定

我对 postgresql 还不熟悉。我查看了文档,但找不到任何有关如何进行页面级锁定的信息。

我知道我可以将表设置为这样的锁定模式:LOCK TABLE myTable IN LOCKMODE ROW EXCLUSIVE;

我该如何为我的会话实现页面级锁定?如果我对基础知识有误解,请告诉我。

答案1

为什么你会执行显式页面级锁定?您无法控制每个页面上的内容,因此您将锁定一些任意数据集合。这样做有什么用处?

我想你正在寻找行级锁定,这是使用SELECT ... FOR UPDATE或完成的SELECT ... FOR SHARE

PostgreSQL 会在可序列化快照谓词跟踪、缓冲区管理等几个地方将行级锁内部升级为页级锁。当行级锁过多并成为性能问题时,它会这样做。您无需关心这一点,因为这在 SQL 级别几乎不会对您产生任何影响。据我所知,普通行锁(如由、、等获取的)UPDATE从未升级为页级锁,因为这样做会增加死锁的可能性。DELETESELECT ... FOR UPDATESELECT ... FOR SHARE

如果您确实确信您需要页面级锁定,请详细解释您要解决的问题以及为什么行级或表级锁定无法完成这项工作。

看:

相关内容