我在PostgreSQL數據庫中有一個表,並且從這個表中選擇了一些限制條件,並且我想知道這個選擇有多少磁盤空間。我知道有一個postgres函數pg_total_relation_size
,它給了我一些在DB中的表的大小,但我怎麼能找到'subtable'的大小?PostgreSQL選擇結果大小
任何想法?
我使用PostgreSQL 9.1
我在PostgreSQL數據庫中有一個表,並且從這個表中選擇了一些限制條件,並且我想知道這個選擇有多少磁盤空間。我知道有一個postgres函數pg_total_relation_size
,它給了我一些在DB中的表的大小,但我怎麼能找到'subtable'的大小?PostgreSQL選擇結果大小
任何想法?
我使用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塊的大小。它並不在意這些塊大部分是空的。
謝謝,這正是我所期待的,'octet_length'也是可以的,但它給了我二進制字符串中的字節數,所以如果字符串只是一個文本,我會得到錯誤的大小... – golinko
@ann octet_length也不會準確反映TOAST的空間使用情況。請參閱http://stackoverflow.com/questions/13304572/how-can-pg-column-size-be-smaller-than-octet-length –
16384?這是什麼意思?它是在kb還是字節? –
select語句沒有「磁盤大小」,因爲它沒有存儲在任何地方。 –
好的,所以我需要先存儲它才能獲得大小?有其他的選擇嗎?我的意思是,我只是想知道一個子表的大小... – golinko
你可以將其假脫機到一個文本文件,以粗略估計數據的原始大小 –