【问题标题】:Insert inside transaction causing Exclusive lock插入内部事务导致排他锁
【发布时间】:2023-04-05 18:48:01
【问题描述】:

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

  • 开始;
  • 插入数据
  • 查询 pg_locks

pg_locks 现在表示有一个独占锁,如下图所示。

根据文档,独占锁只能通过同时刷新物化视图获得。

我在这里做错了什么?

使用 pgsql - 9.4

插入前的 pg_locks 表有四行,这是由于在两个单独的会话中查询 pg_locks 表本身。

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

【问题讨论】:

  • 您是否查看了所有这些列的含义? postgresql.org/docs/9.2/static/view-pg-locks.html 提示:这里持有排他锁是什么意思?
  • 我知道它只保留一行,但是在这种特殊情况下,ExclusiveLock 和 RowExclusiveLock 有什么区别。
  • 据我所知,ExclusiveLock 不属于关系(请以 formatted 文本的形式发布此类示例数据,而不是屏幕截图)跨度>
  • 为不同类型的对象持有 ExclusiveLocks。

标签: database postgresql transactions


【解决方案1】:

这些是对事务 ID 的锁定。这很正常。

目的是另一个事务可以尝试获取该事务上的锁,使其等到第一个事务提交或回滚(从而释放自己的锁)后再继续。

您只需要担心关系锁。

【讨论】:

  • 哦..我明白了..所以排他锁用于事务,关系是实际的 RowExclusiveLock
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多