PostgreSQL DB にテーブルがあり、いくつかの制約を付けてこのテーブルから選択を行います。この選択のディスク容量を知りたいです。pg_total_relation_size
DB の一部のテーブルのサイズを取得する postgres 関数があることは知っていますが、「サブテーブル」のサイズを確認するにはどうすればよいですか?
何か案は?
私はPostgreSQL 9.1を使用しています
PostgreSQL DB にテーブルがあり、いくつかの制約を付けてこのテーブルから選択を行います。この選択のディスク容量を知りたいです。pg_total_relation_size
DB の一部のテーブルのサイズを取得する postgres 関数があることは知っていますが、「サブテーブル」のサイズを確認するにはどうすればよいですか?
何か案は?
私は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 ブロックのサイズを報告しているためです。これらのブロックがほとんど空であることは気にしません。