[PostgreSQL] 테이블별 용량 확인 방법

2025. 9. 19. 23:45·개발 (Development)/PostgreSQL

PostgreSQL: 테이블별 용량 확인 방법

PostgreSQL 데이터베이스를 관리하면서 어떤 테이블이 가장 많은 공간을 차지하고 있는지 파악하는 것은 성능 최적화와 스토리지 관리에 매우 중요한 일입니다. 이 글에서는 PostgreSQL에서 한 데이터베이스 내의 테이블별 전체 용량을 확인하는 세 가지 방법을 알려드리겠습니다.

1. SQL 쿼리 활용하기 (가장 정확한 방법)

가장 정확하고 상세한 정보를 얻을 수 있는 방법은 SQL 쿼리를 직접 실행하는 것입니다. pg_total_relation_size() 함수는 테이블 자체는 물론, 연관된 인덱스와 TOAST 테이블의 크기까지 합산하여 전체 용량을 보여줍니다.

SELECT
    relname AS "테이블명",
    pg_size_pretty(pg_total_relation_size(C.oid)) AS "총 용량"
FROM
    pg_class C
LEFT JOIN
    pg_namespace N ON (N.oid = C.relnamespace)
WHERE
    nspname NOT IN ('pg_catalog', 'information_schema')
    AND C.relkind = 'r'
ORDER BY
    pg_total_relation_size(C.oid) DESC;
  • pg_total_relation_size(): 테이블과 모든 인덱스를 포함한 전체 크기를 바이트 단위로 반환합니다.
  • pg_size_pretty(): 바이트 값을 'MB', 'GB'와 같이 보기 쉬운 형태로 변환해줍니다.
  • C.relkind = 'r': 'r'은 일반 테이블을 의미하며, 다른 시스템 객체는 제외합니다.

이 쿼리를 실행하면 용량이 큰 테이블 순서대로 깔끔하게 정리된 목록을 확인하실 수 있습니다.

2. psql 명령어 사용하기 (가장 간편한 방법)

별도의 쿼리 작성 없이 psql 클라이언트에서 제공하는 메타 커맨드를 이용하면 더욱 간편하게 확인할 수 있습니다. 데이터베이스에 접속한 상태에서 아래 명령어를 입력해보세요.

\dt+

이 명령어는 현재 접속된 데이터베이스의 모든 테이블 목록과 함께 용량, 소유자, 접근 권한 등 상세 정보를 제공합니다. 가볍게 용량을 확인하고 싶을 때 유용합니다.

3. 뷰(View)를 만들어 재활용하기 (가장 효율적인 방법)

테이블 용량 확인 작업을 자주 해야 한다면, 앞서 소개한 SQL 쿼리를 **뷰(View)**로 만들어두는 것이 매우 효율적입니다. 한 번 뷰를 생성해두면, 복잡한 쿼리를 반복해서 입력할 필요 없이 간단하게 조회할 수 있습니다.

CREATE OR REPLACE VIEW public.table_size_info AS
SELECT
    relname AS "테이블명",
    pg_size_pretty(pg_total_relation_size(C.oid)) AS "총 용량"
FROM
    pg_class C
LEFT JOIN
    pg_namespace N ON (N.oid = C.relnamespace)
WHERE
    nspname NOT IN ('pg_catalog', 'information_schema')
    AND C.relkind = 'r'
ORDER BY
    pg_total_relation_size(C.oid) DESC;

이제 아래 쿼리만 실행하면 언제든지 최신 테이블 용량 정보를 확인하실 수 있습니다.

SELECT * FROM public.table_size_info;

이 세 가지 방법 중 상황에 맞는 방법을 활용하여 데이터베이스를 효율적으로 관리할 수 있습니다.

반응형

'개발 (Development) > PostgreSQL' 카테고리의 다른 글

[PostgreSQL/Java] shared memory 에러 해결: Java + MyBatis 대용량 쿼리 처리  (0) 2025.08.25
[PostgreSQL/TimescaleDB] 데이터 적재 시 발생하는 statement_timeout 및 row is too big 오류 해결 방법  (0) 2025.08.10
[PostgreSQL] View와 Materialized View의 차이점과 사용법  (0) 2025.08.03
[PostgreSQL] 문자열을 timestamp with time zone으로 변환하는 방법  (0) 2025.07.27
[PostgreSQL] MyBatis foreach + UNION ALL 쿼리의 성능 문제와 PostgreSQL 최적화  (1) 2025.07.05
'개발 (Development)/PostgreSQL' 카테고리의 다른 글
  • [PostgreSQL/Java] shared memory 에러 해결: Java + MyBatis 대용량 쿼리 처리
  • [PostgreSQL/TimescaleDB] 데이터 적재 시 발생하는 statement_timeout 및 row is too big 오류 해결 방법
  • [PostgreSQL] View와 Materialized View의 차이점과 사용법
  • [PostgreSQL] 문자열을 timestamp with time zone으로 변환하는 방법
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Linux
    javascript
    docker
    백준
    Vue.js
    pandas
    오답노트
    Spring boot
    MyBatis
    리눅스 마스터 2급
    자바
    python
    데이터분석
    백준알고리즘
    JSON
    AWS
    백준자바
    백준온라인저지
    DevOps
    Linux master
    JPA
    ADsP
    timescaledb
    PostgreSQL
    springboot
    deepseek
    java
    리눅스 마스터 2급 2차
    Kubernetes
    Kafka
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[PostgreSQL] 테이블별 용량 확인 방법
상단으로

티스토리툴바