是否有简单的PostgreSQL甚至SQL方式列出空/非空表?
PS:我正在分析一个包含数百个表的数据库,并希望检测"死亡代码".我假设,当一个月后的桌子仍然是空的,而不是它没有使用.
编辑:解决
谢谢你们!最后,这句话似乎输出了我可以使用的统计数据:
select schemaname, relname, n_tup_ins from pg_stat_all_tables WHERE schemaname = 'public' ORDER BY n_tup_ins
Run Code Online (Sandbox Code Playgroud)
你可以使用PostgreSQL的系统目录
SELECT n.nspname, c.relname
FROM pg_class c
INNER JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE c.reltuples = 0 AND c.relkind = 'r';
Run Code Online (Sandbox Code Playgroud)
根据文档,行数是一个估计值.
如果您的表具有从序列中获取其默认值的列,则可以列出它们并使用它们检查它们的值nextval.(不幸的是,currval返回相关的会话值,所以你必须确保没有其他人使用该数据库,并同时使用nextval和setval.)
SELECT n.nspname, c.relname
FROM pg_class c
INNER JOIN pg_namespace n ON (n.oid = c.relnamespace)
WHERE c.relkind = 'S';
Run Code Online (Sandbox Code Playgroud)
(不幸的是我还没有找到任何方法来确定哪个序列属于哪个表.显然它会非常有用.无论如何,你可以pg_class.relnamespace用来缩小结果范围.)
有关详细信息,请参见http://www.postgresql.org/docs/9.3/interactive/catalogs-overview.html.
检查行数可能会给您错误的结果.假设一个表用作临时表:行插入(例如从平面文件中),处理和删除.如果您检查该表中的行数,那么如果您在处理过程中没有碰巧运行查询,那么您很可能会认为它从未被使用过.
检测"未使用"表的另一种方法是监视IO和对表执行的更改.
统计视图pg_stat_user_tables记录对系统中每个表的更改(删除,插入,更新).统计视图pg_statio_user_tables记录对表执行的IO.
如果以固定间隔拍摄这些表的快照,则可以计算值的差异,并查看是否使用了表.
您可以使用pg_stat_reset()将所有值重置为零,然后从中开始.
| 归档时间: |
|
| 查看次数: |
7121 次 |
| 最近记录: |