Select PostgreSQL选择结果大小

Select PostgreSQL选择结果大小,select,postgresql-9.1,Select,Postgresql 9.1,我在PostgreSQL DB中有一个表,并从这个表中选择了一些约束条件,然后我想知道这个选择有多少磁盘空间。我知道有一个postgres函数pg_total_relationship_size,它给出了某个表的大小(以DB为单位),但是我如何才能找到“子表”的大小呢 有什么想法吗 我使用PostgreSQL 9.1获取数据大小,允许TOAST压缩,等等: regress=> SELECT sum(pg_column_size(devices)) FROM devices WHERE co

我在PostgreSQL DB中有一个表,并从这个表中选择了一些约束条件,然后我想知道这个选择有多少磁盘空间。我知道有一个postgres函数pg_total_relationship_size,它给出了某个表的大小(以DB为单位),但是我如何才能找到“子表”的大小呢

有什么想法吗


我使用PostgreSQL 9.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块大小。它不在乎这些块大部分是空的。

select语句没有磁盘大小,因为它没有存储在任何地方。好的,所以我需要先存储它以获得大小?还有其他选择吗?我是说,我只想知道子表的大小…你可以将其假脱机到一个文本文件中,以粗略估计数据的原始大小。我刚刚找到了以下替代方法:选择sumoctet_lengthtemp.*::选择课文中的文本*,在temp工作时,我得到文本表示中的表的大小。谢谢,这正是我想要的,八位字节长度也可以,但它给出了二进制字符串中的字节数,因此如果字符串只是文本,我将得到错误的大小…@ann octet_length也无法准确反映TOAST中的空间使用情况。见16384?这是什么意思?是kb还是字节?@Mohdan还有,pg_total_relationship_size的手册上写着字节。所以我猜是字节。如果你想要漂亮的印刷品,请使用pg_尺寸_pretty@CraigRinger谢谢如果我想在一个查询中获得多个表的大小,请告诉我需要做什么?