如何创建一个函数来重新索引前 X 个最差的 postgres 索引

问题描述

我正在尝试获取以下查询输出并将索引传递给另一个将执行重新索引的查询。最终目标是安排一个夜间作业,将重新索引前 5 或 10 个“最碎片化”的索引。我们的应用程序是高度事务性的,并且可能相当大,因此我们无法每晚对所有表进行重新索引。此外,我们运行 postgres 11(所以并发)不是一个选项。

...

SELECT i.indexrelid::regclass
       --,s.leaf_fragmentation
FROM pg_index AS i
   JOIN pg_class AS t ON i.indexrelid = t.oid
   JOIN pg_opclass AS opc ON i.indclass[0] = opc.oid
   JOIN pg_am ON opc.opcmethod = pg_am.oid
   CROSS JOIN LAteraL pgstatindex(i.indexrelid) AS s
WHERE t.relkind = 'i'
  AND pg_am.amname = 'btree'
AND s.leaf_fragmentation > 30
AND s.leaf_fragmentation != 'NaN'
AND left(relname,3) !='pg_'
ORDER BY leaf_fragmentation desc
LIMIT 10

...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)