小编Kev*_*vin的帖子

Postgres、MVCC 和锁定

我有一系列 SQL 语句,如下所示:

BEGIN;
SELECT counter FROM table WHERE id=X FOR UPDATE;
REALLY COMPLEX QUERY;
UPDATE table SET counter=Y WHERE id=X;
END;
Run Code Online (Sandbox Code Playgroud)

我想防止在重新计算计数器值时读取计数器,但根据 Postgres 文档“行级锁不影响数据查询;它们只阻止写入者到同一行。”

问题:

  1. 如果不阻止读取,“排他”行锁有什么意义?难道只是为了防止其他事务获取共享锁?
  2. 如果我使用 SELECT ... FOR SHARE 读取该行,是否达到与“排他”锁相同的效果?
  3. 是否可以关闭表/模式/数据库的 MVCC 并允许就地写入?

postgresql locking

9
推荐指数
1
解决办法
2577
查看次数

标签 统计

locking ×1

postgresql ×1