PostgreSQL에서 (테이블, 스키마, 테이블 스페이스) 등의 DB 용량 조회하기 위한 SQL문이다.
[데이터베이스 총 용량 확인]
select datname, pg_size_pretty(pg_database_size(datname)) from pg_database;
[테이블 스페이스 총 용량 확인]
select spcname, pg_size_pretty(pg_tablespace_size(spcname)) from pg_tablespace;
[DB의 전체 스키마 조회]
select nspname from pg_catalog.pg_namespace pn;
[DB의 전체 테이블 조회]
select tablename from pg_tables;
[스키마 용량 조회]
--스키마 사이즈 반환하기 위한 세팅
CREATE OR REPLACE FUNCTION pg_schema_size(text) returns bigint AS $$
select sum(pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(tablename)))::bigint from pg_tables where schemaname = $1
$$ language sql;
-- 특정 스키마 사이즈 조회
select pg_size_pretty(pg_schema_size('스키마 명'));
--전체 스키마 크기 출력 [스키마 명 / 디스크 공간 / 할당된 DB 사이즈 / 사용 percent]
SELECT schema_name,
pg_size_pretty(sum(table_size)::bigint) as "disk space",
pg_size_pretty(pg_database_size(current_database())) as "DB_size",
(sum(table_size) / pg_database_size(current_database())) * 100
as "percent (%)"
FROM (
SELECT pg_catalog.pg_namespace.nspname as schema_name,
pg_relation_size(pg_catalog.pg_class.oid) as table_size
FROM pg_catalog.pg_class
JOIN pg_catalog.pg_namespace
ON relnamespace = pg_catalog.pg_namespace.oid
) t
GROUP BY schema_name
ORDER BY schema_name;
[특정 스키마의 테이블 별 사이즈 확인]
SELECT nspname || '.' || relname AS "relation",
pg_size_pretty(pg_relation_size(C.oid)) AS "size",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname IN ('스키마 명')
AND C.relkind <> 'i'
AND nspname !~ '^pg_toast'
ORDER BY pg_relation_size(C.oid) desc;
'Database > PostgreSQL' 카테고리의 다른 글
# PostgreSQL DB pool + with문 + dynamic query (0) | 2020.09.13 |
---|---|
# PostgreSQL upsert (0) | 2020.07.18 |
# PostgreSQL 절차형SQL_for문_insert (0) | 2020.07.05 |
PostgreSQL ON DELETE CASCADE (0) | 2020.07.02 |
PostgreSQL Auto_increment(varchar) (0) | 2020.07.02 |