插入导致独占锁的内部事务
Insert inside transaction causing Exclusive lock
我正在事务中做一个简单的插入行,这是我遵循的步骤
- 开始;
- 插入数据
- 查询pg_locks
pg_locks现在说有如下图所示的独占锁。
根据文档,独占锁只能通过刷新物化视图并发获取。
我做错了什么?
使用 pgsql - 9.4
Pg Locks table before insert 有四行,这是由于在两个单独的会话中查询 pg_locks table 本身。
插入后它有两行额外的行,一个是实际的事务 id 本身,它是一个独占锁,另一个是关系 RowExclusiveLock
这些是对交易 ID 的锁定。这完全正常。
目的是另一个事务可以尝试获取此事务上的锁,导致它在继续之前等到第一个事务提交或回滚(从而释放其自身的锁)。
你只需要担心关系锁。
我正在事务中做一个简单的插入行,这是我遵循的步骤
- 开始;
- 插入数据
- 查询pg_locks
pg_locks现在说有如下图所示的独占锁。
根据文档,独占锁只能通过刷新物化视图并发获取。
我做错了什么?
使用 pgsql - 9.4
Pg Locks table before insert 有四行,这是由于在两个单独的会话中查询 pg_locks table 本身。
插入后它有两行额外的行,一个是实际的事务 id 本身,它是一个独占锁,另一个是关系 RowExclusiveLock
这些是对交易 ID 的锁定。这完全正常。
目的是另一个事务可以尝试获取此事务上的锁,导致它在继续之前等到第一个事务提交或回滚(从而释放其自身的锁)。
你只需要担心关系锁。