在pgAdmin中,只要表的统计信息已过期,它就会提示:
建议运行VACUUM
表schema.table上的估计rowcount与实际rowcount明显不同.您应该在此表上运行VACUUM ANALYZE.
我用pgAdmin 3和Postgres 8.4.4测试了它,autovacuum = off.每当我单击已更改的表时,会立即显示提示.
假设我正在用Java创建一个基于Web的系统,如何检测表是否已过时,以便我可以在pgAdmin中显示提示?
由于我的应用程序的性质,这里有一些我必须遵循的规则:
我想知道pg_stats和pg_statistic中某个表的统计信息是否是最新的.
我无法在postgresql.conf中设置autovacuum标志.(换句话说,autovacuum标志可以打开或关闭.我无法控制它.我需要判断统计数据是否是最新的autovacuum标志是打开还是关闭.)
我无法每次都进行真空/分析以使其保持最新状态.
当用户选择一个表时,我需要在pg_stats和pg_statistic中没有反映此表的任何更新(例如drop,insert和update)时显示表已过时的提示.
通过分析pg_catalog.pg_stat_all_tables中的时间戳,似乎不可行.当然,如果以前没有分析过某个表,我可以检查它是否在last_analyze中有一个时间戳,以确定该表是否是最新的.但是,使用此方法,当已经有时间戳时,我无法检测表是否是最新的.换句话说,无论我向表中添加多少行,pg_stat_all_tables中的last_analyze时间戳总是用于第一次分析(假设autovacuum标志已关闭).因此,我只能首次显示"正在运行VACUUM"提示.
通过将last_analyze时间戳与当前时间戳进行比较,这也是不可行的.几天内可能没有对表格进行任何更新.一小时内可能会有大量的更新.
鉴于这种情况,我怎样才能始终判断表的统计信息是否是最新的?