是一种查询postgres数据库大小的简单方法吗? 我想做这样的事情:
select 'session_metrics',pg_size_pretty(pg_total_relation_size('schema1.session_metrics'))
union
select 'transaction_metrics',pg_size_pretty(pg_total_relation_size('schema1.transaction_metrics'))
union
select 'cookie_user_metrics',pg_size_pretty(pg_total_relation_size('schema1.cookie_user_metrics'))
union
select 'cookie_transaction_metrics',pg_size_pretty(pg_total_relation_size('schema1.cookie_transaction_metrics'));
并将这些值存储在表格中,以便稍后我可以轻松跟踪表格的增长率。 问题是我现在有超过50个不同的表,我不希望每次创建新表时都添加一行查询。
如果有人能指引我这样的话,我将不胜感激:
select table_name, schema_name, size;
答案 0 :(得分:1)
'表格名称'您正在寻找的表是pg_catalog.pg_namespace。
以下查询是根据psql \d
命令改编的:
SELECT n.nspname as "Schema",
c.relname as "Name",
pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) as "Size",
now() as "Timestamp"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
我冒昧地添加时间戳,因为您计划随着时间的推移比较大小。