插入导致独占锁的内部事务

Insert inside transaction causing Exclusive lock

我正在事务中做一个简单的插入行,这是我遵循的步骤

pg_locks现在说有如下图所示的独占锁。

根据文档,独占锁只能通过刷新物化视图并发获取。

我做错了什么?

使用 pgsql - 9.4

Pg Locks table before insert 有四行,这是由于在两个单独的会话中查询 pg_locks table 本身。

插入后它有两行额外的行,一个是实际的事务 id 本身,它是一个独占锁,另一个是关系 RowExclusiveLock

这些是对交易 ID 的锁定。这完全正常。

目的是另一个事务可以尝试获取此事务上的锁,导致它在继续之前等到第一个事务提交或回滚(从而释放其自身的锁)。

你只需要担心关系锁。