我为我们的数据库编写了一个维护脚本,并希望在我们每天停机期间最需要吸尘/重新索引的表格上运行该脚本。有没有办法在postgres中确定?
我会像这样对需要注意的表进行分类:
我看到一些大概有希望的here
答案 0 :(得分:4)
听起来你正试图重新发明自动吸尘器。有什么理由你不能只是启用它并让它做它的工作吗?
要获得所需的实际信息,请查看 pg_stat_all_tables 和 pg_stat_all_indexes 。
有关如何使用其中数据的一个很好的示例,请查看自动真空的来源。它不直接查询视图,但它使用该信息。
答案 1 :(得分:0)
我认为你真的应该考虑自动吸尘。
但是,如果我确实理解了您的需求,那就是我要做的:
例如,talbe'foo'需要重新索引每个X新记录并清空每次X更新,删除或插入
每天检查表状态,将其保存在日志中(以比较时间上的行差异),然后重新索引/清空符合您标准的表。
听起来有点黑客,但我认为这是做custom-autovacuum-with-custom-'triggers'-criteria
答案 2 :(得分:0)
如何将对任何CRUD操作后运行的相同触发器函数添加到所有表中。
该函数将接收表名,检查表的状态,然后在该表上运行vacuum或reindex。
应该是一个“简单的”pl / sql触发器,但那些从来都不简单......
另外,如果您的数据库机器足够强大,并且您的停机时间足够长,那么每晚只需运行一个脚本来重新编制所有内容,并将所有内容真空吸尘......即使您的标准在测试时未达到要求也是如此(晚上)但接近它(几乎没有你的标准记录),第二天它达到标准时不会出现问题...