PostgreSQL的选择结果的大小(PostgreSQL select result size)

2019-11-01 05:40发布

我有PostgreSQL的数据库表,并作出选择从这个表中有一些制约因素,而且比我想知道还有多少磁盘空间做此选择了。 我知道有一个Postgres功能pg_total_relation_size ,让我在DB的一些表的大小,但我怎么能找到“子表”的大小?

有任何想法吗?

我使用PostgreSQL 9.1

Answer 1:

要获取数据的大小,允许TOAST压缩等:

regress=> SELECT sum(pg_column_size(devices)) FROM devices WHERE country = 'US';
 sum 
-----
 105
(1 row)

为了获得所需的磁盘存储块包括分配开销,头,等等等等:

regress=> CREATE TEMPORARY TABLE query_out AS SELECT * FROM devices WHERE country = 'US';
SELECT 3
regress=> SELECT pg_total_relation_size('query_out');
 pg_total_relation_size 
------------------------
                  16384
(1 row)

为什么结果如此不同? 因为后者查询报告对于主表中的8K块的大小,和用于TOAST表8K的块。 它不关心这些块大多是空的。



文章来源: PostgreSQL select result size