首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Postgres中同一表上运行的多个“`DROP索引CONCURRENTLY`”

在Postgres中同一表上运行的多个“`DROP索引CONCURRENTLY`”
EN

Database Administration用户
提问于 2022-11-15 15:48:45
回答 1查看 450关注 0票数 2

我有一个Postgres表,它包含许多索引,其中一些需要删除,因为它们是未使用的。要在不阻塞表的情况下做到这一点,我需要使用DROP INDEX CONCURRENTLY。我总共有10个索引要删除,由于我的迁移系统的设置,它必须对每个迁移进行一个完整的部署,这是一个大约45分钟的过程。理想情况下,我不希望在一个单独的迁移中执行每一个下降,但是仔细查看文档,我无法找到一个明确的声明,说明在同一张表上运行多个DROP INDEX CONCURRENTLYs是否安全。在文献资料 for CREATE INDEX CONCURRENTLY中有一个注释:

常规索引生成允许同一表上的其他常规索引生成同时发生,但一次只能在一个表上生成一个并发索引。

文献资料 for DROP INDEX CONCURRENTLY中,我没有看到类似的注释。同时在同一张表上运行多个DROP INDEX CONCURRENTLY's是否安全?同样值得注意的是,一些指数位于同一列。同时删除这些指数是否安全?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2022-11-15 20:34:22

我的快速实验发现,您可以成功地同时运行多个DROP INDEX CONCURRENTLY语句(无论如何在PG14上)。被删除的索引被标记为无效,因此没有新的查询使用它们,然后它在完成删除之前等待出任何锁。一次只有一个DROP处于活动状态,因此不存在冲突的可能性。

即使索引使用的是相同的列,它们也不相互依赖。如果是这样的话,就必须按特定的顺序予以删除。

CREATE INDEX更不可靠,因为在处理过程中必须跟踪表的更新,因此是一次一次的限制。在删除索引时没有这样的问题。

对于记录,非并发DROP INDEX允许您一次指定多个索引以删除,而DROP INDEX CONCURRENTLY只允许每个语句一个索引。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/319720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档