12

我知道 PostgreSQL 插入使用 ROW EXCLUSIVE 锁,这是否意味着插入可以并行,并且一个插入不会锁定整个表?

有问题的表有一个在数据库之外生成的主键并且没有额外的索引(但我很好奇如果不是这种情况会发生什么)。

编辑1:

根据文档,ROW EXCLUSIVE 与 CREATE INDEX 获得的 SHARE 冲突。

这是否意味着如果表有索引,insert 会锁定整个表?

还是只有在第一次创建索引时才会锁定表?

另外,据我所知,主键也是索引,对吗?

4

1 回答 1

14

并发插入不应相互阻塞,除非它们将冲突的键插入唯一索引,在这种情况下,第二个插入将等待包含第一个事务的事务被提交或回滚,然后中止或继续。主键被实现为唯一索引。

非唯一索引不应导致额外的锁冲突。创建索引将阻止对表的插入和更新,尽管您可以添加concurrently到命令中以避免这种情况,但会降低速度。

于 2013-01-26T01:16:36.617 回答