首页 文章

PostgreSQL选择结果大小

提问于
浏览
0

我在PostgreSQL DB中有一个表,并从这个表中选择一些约束,而不是我想知道这个选择有多少磁盘空间 . 我知道有一个postgres函数 pg_total_relation_size 给了我DB中某些表的大小,但是如何才能找到'subtable'大小?

有任何想法吗?

我使用PostgreSQL 9.1

1 回答

  • 6

    要获取数据大小,允许 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块 . 它并不关心这些块大多是空的 .

相关问题