gpt4 book ai didi

postgresql - 如何在 Postgres 中删除表的所有索引?

转载 作者:行者123 更新时间:2023-11-29 11:12:19 24 4
gpt4 key购买 nike

我一直遇到这个问题:我需要删除表上的大约 20 个索引才能进行测试。删除表不会删除所有这些元数据。

似乎没有通配符 drop index ix_table_* 或任何有用的命令。您可以编写围绕 psql 的一些 bash 循环。
必须有更好的东西!想法?

最佳答案

假设您只想删除普通索引:

DO
$do$
DECLARE
_sql text;
BEGIN
SELECT 'DROP INDEX ' || string_agg(indexrelid::regclass::text, ', ')
FROM pg_index i
LEFT JOIN pg_depend d ON d.objid = i.indexrelid
AND d.deptype = 'i'
WHERE i.indrelid = 'table_name'::regclass -- possibly schema-qualified
AND d.objid IS NULL -- no internal dependency
INTO _sql;

IF _sql IS NOT NULL THEN -- only if index(es) found
EXECUTE _sql;
END IF;
END
$do$;

不涉及作为约束(UNIQUEPKEXCLUDE)实现细节创建的索引。
The documentation:

DEPENDENCY_INTERNAL (i)

The dependent object was created as part of creation of the referencedobject, and is really just a part of its internal implementation.

您可以将其包装在一个函数中以重复执行。
相关:

相关:


旁白:这是一个误会:

Dropping the table doesn't drop all of this metadata.

删除表总是级联到表上的所有索引。

关于postgresql - 如何在 Postgres 中删除表的所有索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34010401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com