본문 바로가기
IT 자료

postgresql(redshift) 테이블 코멘트 확인

by 성곤 2024. 7. 9.
반응형

postgresql(redshift) 테이블 코멘트 확인

 

SELECT 
    n.nspname AS schema_name,
    c.relname AS table_name,
    a.attname AS column_name,
    pg_get_expr(d.adbin, d.adrelid) AS column_default,
    t.typname AS data_type,
    CASE 
        WHEN a.attnotnull THEN 'NOT NULL'
        ELSE 'NULL'
    END AS null_constraint,
    col_description(a.attrelid, a.attnum) AS column_comment
FROM 
    pg_catalog.pg_attribute a
    JOIN pg_catalog.pg_class c ON a.attrelid = c.oid
    JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
    LEFT JOIN pg_catalog.pg_attrdef d ON (a.attrelid, a.attnum) = (d.adrelid, d.adnum)
    JOIN pg_catalog.pg_type t ON a.atttypid = t.oid
WHERE 
    a.attnum > 0 
    AND NOT a.attisdropped
    AND c.relkind IN ('r', 'v', 'm', 'f', 'p')
ORDER BY 
    schema_name, 
    table_name, 
    a.attnum;

 

 

이 쿼리는 다음과 같은 정보를 제공합니다

schema_name: 스키마 이름
table_name: 테이블 이름
column_name: 컬럼 이름
column_default: 컬럼의 기본값 (있는 경우)
data_type: 데이터 타입
null_constraint: NULL 또는 NOT NULL 제약 조건
column_comment: 컬럼 코멘트 (없는 경우 NULL)


이 쿼리는 시스템 카탈로그 테이블을 사용하여 모든 사용자 정의 테이블, 뷰, 물리화된 뷰, 외부 테이블, 파티션 테이블의 컬럼 정보를 가져옵니다. 
시스템 컬럼(attnum <= 0)과 삭제된 컬럼은 제외됩니다.

코멘트가 없는 컬럼의 경우 column_comment 열에 NULL 값이 표시됩니다.
이 쿼리를 실행하여 데이터베이스의 모든 컬럼 정보를 확인할 수 있습니다. 
특정 스키마나 테이블로 결과를 제한하려면 WHERE 절에 조건을 추가하면 됩니다.


WHERE 절의 각 부분을 자세히 설명해 드리겠습니다:

 - a.attnum > 0

attnum은 테이블 내의 컬럼 번호를 나타냅니다.
0 이하의 값은 시스템 컬럼을 의미합니다 (예: oid).
따라서 이 조건은 사용자 정의 컬럼만 선택하고 시스템 컬럼을 제외합니다.


 - NOT a.attisdropped

attisdropped는 해당 컬럼이 삭제되었는지 여부를 나타내는 플래그입니다.
이 조건은 삭제되지 않은 컬럼만 선택합니다.
PostgreSQL에서는 컬럼을 삭제해도 실제로 제거되지 않고 'dropped' 상태로 표시될 수 있습니다.


 - c.relkind IN ('r', 'v', 'm', 'f', 'p')

relkind는 관계(relation)의 종류를 나타냅니다.
각 문자의 의미는 다음과 같습니다:

'r': 일반 테이블 (regular table)
'v': 뷰 (view)
'm': 물리화된 뷰 (materialized view)
'f': 외부 테이블 (foreign table)
'p': 파티션 테이블 (partitioned table)



이 조건은 위에 나열된 종류의 테이블과 뷰에 대한 정보만 선택합니다.

종합하면, 이 WHERE 절은 다음과 같은 조건을 만족하는 컬럼만 선택합니다:

사용자 정의 컬럼 (시스템 컬럼 제외)
현재 활성 상태인 컬럼 (삭제된 컬럼 제외)
일반 테이블, 뷰, 물리화된 뷰, 외부 테이블, 파티션 테이블에 속한 컬럼

이렇게 함으로써 데이터베이스 내의 관련 있고 활성 상태인 사용자 데이터에 초점을 맞출 수 있습니다.

 

 

** AI생성기로 답변얻었습니다.

반응형