PostgreSQL에서 개발 또는 디버깅 중 테이블 구조를 빠르게 확인하고 싶을 때 유용한 쿼리들을 정리했습니다.
information_schema 만 포함된 쿼리는 전체 DBMS 공용 사용
pg_catalog 는 postgresql 전용
1. 현재 스키마의 테이블 목록 조회
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public'; -- 사용 중인 스키마명
2. 특정 테이블의 전체 컬럼 정보 조회
SELECT column_name, data_type, character_maximum_length, is_nullable
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'your_table_name';
3. 테이블의 Primary Key 컬럼명 확인
SELECT a.attname AS column_name
FROM pg_index i
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
WHERE i.indrelid = 'your_table_name'::regclass
AND i.indisprimary;
4. 테이블에 설정된 Unique 제약 조건 확인
SELECT
conname AS constraint_name,
pg_get_constraintdef(oid) AS definition
FROM pg_constraint
WHERE contype = 'u'
AND conrelid = 'your_table_name'::regclass;
5. 테이블에 설정된 Foreign Key 정보 확인
SELECT
conname AS constraint_name,
pg_get_constraintdef(oid) AS definition
FROM pg_constraint
WHERE contype = 'f'
AND conrelid = 'your_table_name'::regclass;
6. 테이블 상세 명세 보기 (컬럼+PK+기타 제약조건까지)
SELECT
a.attnum AS col_no,
a.attname AS column_name,
format_type(a.atttypid, a.atttypmod) AS data_type,
NOT a.attnotnull AS is_nullable,
coalesce(i.indisprimary, false) AS is_primary_key
FROM pg_attribute a
JOIN pg_class c ON a.attrelid = c.oid
JOIN pg_namespace n ON c.relnamespace = n.oid
LEFT JOIN pg_index i ON c.oid = i.indrelid AND a.attnum = ANY(i.indkey)
WHERE c.relname = 'your_table_name'
AND n.nspname = 'public'
AND a.attnum > 0
ORDER BY a.attnum;
7. 전체 인덱스 목록 확인
SELECT indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'public'
AND tablename = 'your_table_name';
8. 특정 테이블의 row 수, 크기, 마지막 업데이트 시간 확인
SELECT
relname AS table_name,
n_live_tup AS row_estimate,
pg_size_pretty(pg_total_relation_size(relid)) AS total_size
FROM pg_stat_user_tables
WHERE relname = 'your_table_name';
'DBMS > PostgreSql' 카테고리의 다른 글
SQL 쿼리 최적화 - CTE로 복잡한 조건 정리하기 (0) | 2025.04.25 |
---|---|
String_agg로 성능 최적화하기 (1) | 2025.04.11 |