在PostgreSQL

时间:2016-03-14 23:23:36

标签: postgresql size

是一种查询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;

1 个答案:

答案 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'

我冒昧地添加时间戳,因为您计划随着时间的推移比较大小。