数据库占用的磁盘空间比我想象的要多得多

时间:2017-09-27 14:37:23

标签: postgresql

当我在pgadmin中执行此请求时:

SELECT table_name, 
pg_size_pretty(pg_relation_size(table_schema || '.' || table_name)::bigint) As Taille_donnees,
pg_size_pretty(pg_total_relation_size(table_schema || '.' || table_name)::bigint) As Taille_totale,
pg_size_pretty(pg_indexes_size(table_schema || '.' || table_name)::bigint) As Taille_index
FROM information_schema.tables
WHERE table_schema = '***'
ORDER BY pg_total_relation_size(table_schema || '.' || table_name) DESC

数据大小为392 kb,索引大小为136 kb,总大小为1216 Mb,这怎么可能?我看着桌子,只有350根线,为什么这张桌子太重了?

1 个答案:

答案 0 :(得分:0)

https://www.postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT

  

pg_relation_size 指定表或索引的指定fork('main','fsm','vm'或'init')使用的磁盘空间

我想你想改用:

  

pg_table_size(regclass)指定表使用的磁盘空间,不包括索引(但包括TOAST,可用空间映射和可见性)   地图)

因为CDI.current().getBeanManager().getBeans(MyService.class).iterator().next().getQualifiers()没有显示(所有)数据大小 - 只有分叉:

  

pg_relation_size(relation regclass) pg_relation_size(...,'main')的简写

你probalby试图应用公式:

  

pg_total_relation_size接受表或Toast的OID或名称   table,并返回用于该表的磁盘总空间,   包括所有相关索引。这个功能相当于   pg_table_size + pg_indexes_size。

但使用了错误的功能,因为pg_relation_size有单词 relation ,但却是pg_total_relation_size的总和,而不是pg_table_size