Postgresql pg_class查看所有表名relname及记录数reltuples,记录数显示0实际有数据解决

在Postgresql中,当使用pg_class查询表的reltuples时可能显示0,即使表中有数据。这是因为reltuples是规划器的估计值,可能未更新。解决方法是运行ANALYZE命令来刷新统计信息。例如,可以执行`ANALYZEtableA,tableB,tableC;`来更新指定表的统计信息。此外,文章提到了PG_STATISTIC和PG_CLASS系统表在存储统计信息方面的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Postgresql pg_class查看所有表名relname及记录数reltuples,记录数显示0实际有数据解决

问题

当使用Postgresql 查看所有表的表名及记录数reltuples显示0,实际select * from tableA查看有数据。

relname 表、索引、视图等的名字
reltuples 记录数,表中的存活行数。这只是一个由规划器使用的估计值。它被VACUUM、ANALYZE以及一些DDL命令(如CREATE INDEX)所更新。
relkind r = 普通表, i = 索引, S = 序列, t = TOAST表, v = 视图, m = 物化视图, c = 组合类型, f = 外部表, p = 分区表, I = 分区索引

select relname as tableName,reltuples as rowCounts from pg_class where relkind='r' order by tableName,rowCounts desc;

解决

analyse手动刷新下,然后再查看 完美解决;可多个表同时,分隔;analyse 同 analyze

analyse tableA,tableB,tableC;

select string_agg(relname,',') from pg_class where relkind='r' and reltuples=0;
analyse tableA,tableB,tableC;

拓展

PostgreSQL支持多种形式的统计信息,包括单列的统计信息和多列(扩展)的统计信息,单列的统计信息是指对每个表的每一个属性(列)都在PG_STATISTIC系统表中产生一个对应的统计信息元组,这个元组负责从多个角度描绘这个属性中的数据分布。

  • PG_STATISTIC系统表
    PG_CLASS系统表会保存两个统计信息:relpages和reltuples。relpages记录了当前表用了多少个页面,reltuples记录了当前表共有多少条元组。PG_STATISTIC系统表保存单列的统计信息,如果用户要给某个表生成统计信息,则可以使用ANALYZE语句对一个表进行统计分析,这样就能给这个表生成统计信息并且保存在PG_STATISTIC系统表中。

  • PG_STATISTIC_EXT系统表
    保存的是多列的统计信息,用户需要显式地使用CREATE STATISTICS语句对一个表创建多列统计信息。

参考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛一枚~

您的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值