【发布时间】:2020-02-23 07:45:33
【问题描述】:
我正在寻找一个自动删除重复索引的脚本,而不是手动逐个检查和删除表。
是否可以通过SQL代码或PL/pgSQL代码删除?
脚本正在使用查找重复索引:
SELECT
indrelid::regclass AS TableName
,array_agg(indexrelid::regclass) AS Indexes
FROM pg_index
GROUP BY
indrelid
,indkey
HAVING COUNT(*) > 1;
【问题讨论】:
-
自动删除数据库对象基本上是个坏主意。这些物体的存在,或者在某个时候确实存在,是有目的的。对于您要丢弃的每个对象,您需要询问:该目的是否仍然有效。如果是,那么您有替代解决方案吗?您的提议似乎属于“我想更改数据库,但我不想花时间去理解它”的类别。查看并考虑@jjanes 给出的警告。它会做你所要求的,但它会做你想做的。它们很可能是非常不同的东西。
标签: sql postgresql indexing