我有一张名为“汽车”的桌子
表“db145004db.car” 栏目 | 类型 | 整理 | 可空 | 默认 ----------+--------+------------+--------+------ -- 车号 | 二进制 | | 不为空 | 车名 | 文字 | | | 指标: "car_pkey" 主键,btree (car_no)
表格内容:
车号 | 车名 ------+------------ 1 | 第一辆车 2 | 第二辆车 3 | 第三辆车
我在两笔交易之后运行了这个,
事务 1:
开始 ; select * from car where car_no=2 进行更新;
交易 2:
开始 ; select * from car where car_no=2 进行更新;(等待第一个事务释放锁)
我的“pg_locks”表如下所示:
锁型 | 数据库 | 关系 | 页| 元组 | virtualxid | 事务编号 | 分类 | 对象 | 对象 | 虚拟交易 | 进程号 | 模式 | 授予 | 快速通道 --------------+----------+----------+------+----- --+------------+----------------+--------+--------+ ----------+--------------------+--------+---------- ----------+--------+-------- 关系 | 103777 | 143022 | | | | | | | | 4/75 | 11043 | 访问共享锁 | 吨 | 吨 关系 | 103777 | 143016 | | | | | | | | 4/75 | 11043 | 行共享锁 | 吨 | 吨 virtualxid | | | | | 4/75 | | | | | 4/75 | 11043 | 独占锁 | 吨 | 吨 关系 | 103777 | 143022 | | | | | | | | 5/144 | 11150 | 访问共享锁 | 吨 | 吨 关系 | 103777 | 143016 | | | | | | | | 5/144 | 11150 | 行共享锁 | 吨 | 吨 virtualxid | | | | | 5/144 | | | | | 5/144 | 11150 | 独占锁 | 吨 | 吨 关系 | 103777 | 11577 | | | | | | | | 3/141 | 11263 | 访问共享锁 | 吨 | 吨 virtualxid | | | | | 3/141 | | | | | 3/141 | 11263 | 独占锁 | 吨 | 吨 事务编号 | | | | | | 10204 | | | | 5/144 | 11150 | 共享锁 | f | F 元组 | 103777 | 143016 | 0 | 2 | | | | | | 5/144 | 11150 | 访问独占锁 | 吨 | F 事务编号 | | | | | | 10204 | | | | 4/75 | 11043 | 独占锁 | 吨 | F
我看不到任何与行/元组相关的锁 (car_no=2)。此外,locktype 和 mode 有点令人困惑(我不明白他们倾向于传达什么)。作为 psql 的新手,我完全感到困惑。关于上述情况,任何人都可以帮助解释关于行级锁定的“pg_locks”。
我遇到了有关锁定的 postgres文档,其中指出
我得到了答案。