본문 바로가기
DBMS/PostgreSql

PostgreSQL 메타 정보 조회

by 천뱅 2024. 10. 1.

 

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';