我想提取一些有关如何在给定 PostgreSQL 16 模式中填充表的基本统计信息,例如该模式中所有表中每列的空值的绝对数量和百分比。
目前,我正在使用 Python/psycopg2 获取/计算这些值,但我想知道是否可以在 PostgreSQL 本身内部存储某种函数,以便每次我想获取这些统计数据时都可以调用?
我想提取一些有关如何在给定 PostgreSQL 16 模式中填充表的基本统计信息,例如该模式中所有表中每列的空值的绝对数量和百分比。
目前,我正在使用 Python/psycopg2 获取/计算这些值,但我想知道是否可以在 PostgreSQL 本身内部存储某种函数,以便每次我想获取这些统计数据时都可以调用?
测试设置
简单、幼稚、重复且缓慢
基本上,您希望任何给定表的所有列都有这种输出:
智能,但还不够动态
除了速度更快之外,这还添加了更多数据并防止被零除:
关于
WHERE NOT (t.*) IS NOT NULL
:有关的:
全自动化
您真正想要的是:执行动态查询的全自动函数。具有附加功能和优化的性能。还可以正确防御可能的 SQL 注入。
该函数接受一个或两个参数:
_tbl regclass
...表名称为(可选模式限定)字符串文字或 OID 类型regclass
_show_table_stats bool
...显示附加表统计数据?可选,默认false
。调用示例:
小提琴
现在您只需为每个感兴趣的表调用此函数即可。
您需要了解 PL/pgSQL 的方法才能正确处理这个问题。
关于使用
%s
表名作为regclass
输入format()
:有关的: