1. 데이터베이스 조회
PostgreSQL에서 사용 가능한 데이터베이스 목록을 확인하려면 다음 명령어를 사용합니다.
playboy=> \l
List of databases
Name | Owner | Encoding
-----------+----------+----------
playboy | postgres | UTF8
postgres | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8
특정 데이터베이스의 크기를 확인하려면 pg_database_size 함수를 사용합니다.
playboy=> SELECT pg_database_size('playboy');
pg_database_size
------------------
3637896
모든 데이터베이스의 크기를 한 번에 조회하려면 다음과 같이 pg_database 시스템 카탈로그를 활용합니다.
playboy=> SELECT pg_database.datname, pg_database_size(pg_database.datname) AS size FROM pg_database;
datname | size
-----------+---------
postgres | 3621512
playboy | 3637896
template1 | 3563524
template0 | 3563524
크기를 사람이 읽기 쉬운 KB, MB, GB 형식으로 출력하려면 pg_size_pretty 함수를 사용합니다.
playboy=> SELECT pg_size_pretty(pg_database_size('playboy'));
pg_size_pretty
----------------
3553 kB
2. 테이블 목록 조회
현재 데이터베이스의 모든 테이블 목록을 보려면 \dt 메타 명령어를 사용합니다.
playboy=> \dt
List of relations
Schema | Name | Type | Owner
--------+------+-------+---------
public | test | table | playboy
3. 단일 테이블 정보 및 크기
특정 테이블의 구조를 확인하려면 \d 메타 명령어를 사용합니다.
playboy=> \d test;
Table "public.test"
Column | Type | Modifiers
--------+-----------------------+-----------
id | integer | not null
name | character varying(32) |
Indexes: "playboy_id_pk" PRIMARY KEY, btree (id)
테이블의 실제 데이터 크기(인덱스 제외)를 확인하려면 pg_relation_size 함수를 사용합니다.
playboy=> SELECT pg_relation_size('test');
pg_relation_size
------------------
0
크기를 가독성 좋게 표현하려면 pg_size_pretty를 함께 사용합니다.
playboy=> SELECT pg_size_pretty(pg_relation_size('test'));
pg_size_pretty
----------------
0 bytes
테이블의 총 크기(인덱스, 토스트 데이터 포함)를 확인하려면 pg_total_relation_size 함수를 사용합니다.
playboy=> SELECT pg_size_pretty(pg_total_relation_size('test'));
pg_size_pretty
----------------
8192 bytes
4. 인덱스 조회
현재 데이터베이스의 모든 인덱스를 확인하려면 \di 메타 명령어를 사용합니다.
playboy=> \di
List of relations
Schema | Name | Type | Owner | Table
--------+---------------+-------+---------+-------
public | playboy_id_pk | index | playboy | test
특정 인덱스의 크기를 확인하려면 pg_relation_size 함수를 사용합니다.
playboy=> SELECT pg_size_pretty(pg_relation_size('playboy_id_pk'));
pg_size_pretty
----------------
8192 bytes
5. 테이블스페이스 조회
모든 테이블스페이스를 확인하려면 pg_tablespace 시스템 카탈로그를 조회합니다.
playboy=> SELECT spcname FROM pg_tablespace;
spcname
------------
pg_default
pg_global
특정 테이블스페이스의 크기를 확인하려면 pg_tablespace_size 함수를 사용합니다.
playboy=> SELECT pg_size_pretty(pg_tablespace_size('pg_default'));
pg_size_pretty
----------------
14 MB
6. 데이터베이스 내 테이블별 디스크 사용량 상위 20개 조회
SELECT
table_schema || '.' || table_name AS full_table_name,
pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS total_size
FROM information_schema.tables
ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC
LIMIT 20;
7. 데이터베이스별 디스크 사용량 상위 20개 조회
SELECT
d.datname AS database_name,
pg_catalog.pg_get_userbyid(d.datdba) AS owner,
CASE
WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
ELSE 'No Access'
END AS size
FROM pg_catalog.pg_database d
ORDER BY
CASE
WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
THEN pg_catalog.pg_database_size(d.datname)
ELSE NULL
END DESC
LIMIT 20;