2013-08-19 2 views
17

Postgres 9.1의 테이블에 text 유형의 열이 있습니다. 필자는 필요한 열의 디스크 공간에 대한 영향을 알고 싶습니다. 그것은 정확해야 할 필요는 없지만, 그 컬럼이 데이터베이스에 의해 소비되는 디스크 공간의 20 %/30 %/...에 대한 책임이 있다면 아이디어를 얻고 싶습니다.Postgres 테이블에서 한 열의 크기를 계산하는 방법은 무엇입니까?

나는 pg_relation_size을 알고 있지만 테이블 수준에서만 작동합니다.

동일한 스키마를 사용하는 많은 데이터베이스가 있습니다. 나는 작은 것을 버리고 grep을 사용하여 컬럼을 잘라내어 일반 텍스트 덤프의 크기를 비교했다. 그러나 이것이 반드시 라이브 DB의 공간 요구 사항을 나타내는 좋은 지표는 아니며 대용량 데이터베이스의 경우에도이를 수행하기가 더 어렵습니다.

답변

31
select 
    sum(pg_column_size(the_text_column)) as total_size, 
    avg(pg_column_size(the_text_column)) as average_size, 
    sum(pg_column_size(the_text_column)) * 100.0/pg_relation_size('t') as percentage 
from t; 
+7

pg_relation_size는 토스트 테이블을 포함하지 않고 기본 테이블의 크기를 반환합니다. 누군가가 각 열의 디스크 사용에 신경을 쓰면 토스트 테이블이 관련되어있을 수 있으므로 대신 pg_table_size를 사용하는 것이 좋습니다. – jjanes

+5

토스트 테이블에 인덱스의 크기를 더한 값으로 계산하려면 pg_total_relation_size를 사용할 수도 있습니다. –

관련 문제