2

PostgreSQL DB にテーブルがあり、いくつかの制約を付けてこのテーブルから選択を行います。この選択のディスク容量を知りたいです。pg_total_relation_sizeDB の一部のテーブルのサイズを取得する postgres 関数があることは知っていますが、「サブテーブル」のサイズを確認するにはどうすればよいですか?

何か案は?

私はPostgreSQL 9.1を使用しています

4

1 に答える 1

11

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 ブロックのサイズを報告しているためです。これらのブロックがほとんど空であることは気にしません。

于 2012-11-20T23:18:52.953 に答える