Postgresql 我如何创建一个函数来重新索引top X worst postgres索引

Postgresql 我如何创建一个函数来重新索引top X worst postgres索引,postgresql,reindex,Postgresql,Reindex,我试图获取以下查询的输出,并将索引传递给另一个将执行重新索引的查询。最终目标是安排一个夜间作业,重新编制前5或10个“最碎片化”索引。我们的应用程序是高度事务性的,并且可能相当大,因此我们无法承担每夜对所有表重新编制索引的费用。此外,我们正在运行postgres 11(因此并发)不是一个选项 …这将是一个非常不寻常的工作负载,需要这样做(同时也不会使表格膨胀)。我认为你不应该那样做。你为什么要那样做?你想解决的问题是什么? SELECT i.indexrelid::regclass

我试图获取以下查询的输出,并将索引传递给另一个将执行重新索引的查询。最终目标是安排一个夜间作业,重新编制前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