Postgres检查是否插入了任何新行

时间:2019-02-05 10:36:48

标签: database postgresql count postgresql-9.4

我有许多很大的表(300-400个表,每个表约3000万行)。每天(每天一次)我必须检查是否有任何新行插入到这些表中的任何一个中。可能插入的行数可能从0到3000万行不等。行不会被删除。

目前,我使用近似计数检查是否插入了任何新行。然后将其与之前(昨天)的结果进行比较。

SELECT reltuples FROM pg_class WHERE oid='tablename'::regclass;

我主要怀疑的是:例如,如果将插入3000行(或插入5行),reltuples将会在多久后更新?对于这种情况,近似计数是一个好的解决方案吗?

我的配置参数是:

autovacuum_analyze_threshold: 50
autovacuum_analyze_scale_factor: 0.1

1 个答案:

答案 0 :(得分:1)

\\将在reltuples(自动真空)运行时进行更新,因此该数字通常具有20%的错误余量。

您将从表格统计信息视图中更好地估算表格中的行数:

VACUUM

此数字由统计信息收集器更新,因此不能保证它是100%准确的(涉及UDP套接字),并且可能需要一些时间才能看到数据修改的效果。

还是比SELECT n_live_tup FROM pg_stat_user_tables WHERE schemaname = 'myschema' AND relname = 'mytable'; 更准确。