Jal*_*esh 5 postgresql locking transactions
经过大量的谷歌搜索,我想我会问这个问题。我有一段代码对 postgres (9.2) 数据库执行以下操作:
我对 postgres 的阅读告诉我,在此操作正在进行时,我应该能够做到这一点,并且仍然允许其他用户从表中进行选择(实际上甚至使用现有索引,因为它们尚未为它们删除)。
什么我实际上发现的是,所有其他的查询在桌子上(他们都选择查询)被卡住。在查看 pg_locks 和 pg_stat_activity 表后,我发现我的事务在表上创建了一个 AccessExclusiveLock,阻止其他查询运行。此事务完成后,所有其他查询都可以正常执行。
所以,我的问题是 - 为什么创建索引/插入数据会在表上创建排他锁?不应该使用侵入性较小的锁(例如共享锁)吗?
我是基于我对这里的官方文档的阅读- 所以我不会因为任何人向 RTFM 提出要求而生气:)
谢谢,
贾尔佩什
我也想要这个,但是你做不到。
在表上获取 AccessExclusive 锁的不是创建索引,也不是插入,而是删除索引。
该文档并未提供获取每种类型锁的每种情况的详尽列表——它仅提供说明性示例(但也许应该包含此示例)。
我相信代码的许多部分都假设在表上持有 AccessShare 锁时索引不会消失。因此,删除索引需要与此相冲突。
| 归档时间: |
|
| 查看次数: |
1242 次 |
| 最近记录: |