暂无图片
pg -10中,create index concurrently 被卡住了??
我来答
分享
暂无图片 匿名用户
pg -10中,create index concurrently 被卡住了??

--sess 1

(postgres@[local]:5432)-[test]-#begin;
BEGIN
(postgres@[local]:5432)-[test]-#insert into t1(id) values(100);
INSERT 0 1


--sess 2


create index concurrently idx00 on t1(c1);

卡住了,

为什么加了并发仍然卡住?


pg -10 的版本

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
周波

(1)concurrently的含义
你首先得明白,concurrently选项的作用,在postgreSQL数据库中,带上concurrently创建索引的作用是可以不阻塞其它并发事务对表数据执行变更操作(包括:update、delete、insert);create index concurrently 对表施加SHARE UPDATE EXCLUSIVE锁,update、delete、insert对表施加ROW EXCLUSIVE,这两种锁互不排斥,这也是上一句话为什么不阻塞的原因;你的测试思路刚好反了,这个时候你应该测试:新启另一个会话,继续对t1表进行变更操作,看变更操作是否被阻塞。
(2)为什么创建索引被阻塞
在表t1的c1列上创建索引,数据库会去扫描t1表,为了保证索引数据的完整性和正确性,带上concurrently创建索引的操作会等待已存在的对相关表执行变更操作的事务提交或回滚,否则创建索引的SQL一直hang住,直到lock_timeout指定的时间达到,被取消执行。

暂无图片 评论
暂无图片 有用 2
打赏 0
清风生

CREATE INDEX CONCURRENTLY会扫描原表2次,如果有dml操作就会被阻塞。

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
postgresql备份报错:无法与数据库“template 1”联接
回答 1
去掉w参数,输入密码试试
pg中在sql中如何使用hint的?
回答 3
pghintplan
postgreSQL 数据库忽略大小写查询的问题如何解决?
回答 1
已采纳
查询的时候可以加“”更多细节参考https://blog.csdn.net/weixin39540651/article/details/117361076
使用CREATE DATABASE创建新数据库时指定字符编码ENCODING参数,请问需要指定哪个模板? A template0和template1均可以
回答 1
已采纳
Dtemplate0使用CREATEDATABASE创建新数据库时指定字符编码ENCODING参数,需要指定模板template0
如何检查给定模式中是否存在表?
回答 2
\c到你说的模式中去,然后\d
postgresql: 想往json类型的字段里 ,加自增列的id ,怎么操作?
回答 1
这个思路很奇特。需求不太合理。
pg在非归档模式手动切换wal和归档模式下,手动归档的命令?
回答 1
在PostgreSQL中,WAL(WriteAheadLogging)日志对于数据库的恢复和崩溃后的数据一致性至关重要。PostgreSQL支持归档WAL日志,以便在需要时可以恢复数据库到特定的时间点
pg 是否有类似调整字段顺序的方法
回答 3
已采纳
参考:https://blog.csdn.net/weixin39540651/article/details/118482969
下面这些是共享的还是私有的?
回答 1
1.保存点:私有内存2.其它:共享内存
PostgreSQL为什么不使用b+树索引
回答 2
可以去吕老师的公众号白鳝的洞穴找下历史文章,应该是看到过,但不记得了。