데이타베이스/POSTGRESQL

테이블명세서 작성용

큰세상2000 2024. 7. 16. 19:21
반응형

 

 

-- 원하는 스키마와 테이블 이름을 여기에 입력하세요
WITH params AS (
    SELECT 
        'public' AS schema_name,  -- 여기에 원하는 스키마 이름을 입력하세요
        'table_name' AS table_name  -- 여기에 원하는 테이블 이름을 입력하세요
),
columns AS (
    SELECT 
        c.table_schema,
        c.table_name,
        c.ordinal_position as no,
        COALESCE(c.column_name, '') as column_name,
        COALESCE(pg_catalog.col_description(format('%s.%s', c.table_schema, c.table_name)::regclass::oid, c.ordinal_position), '') as column_description,
        c.data_type as format,
        CASE 
            WHEN c.data_type IN ('character', 'character varying', 'char', 'varchar') 
                THEN COALESCE(c.character_maximum_length::text, '')
            ELSE ''
        END as length,
        COALESCE(c.column_default, '') as default_value,
        CASE WHEN pk.constraint_type = 'PRIMARY KEY' THEN 'PK' ELSE '' END as pk
    FROM 
        information_schema.columns c
    LEFT JOIN (
        SELECT 
            tc.table_schema, 
            tc.table_name, 
            kcu.column_name, 
            tc.constraint_type
        FROM 
            information_schema.table_constraints tc
        JOIN 
            information_schema.key_column_usage kcu 
            ON tc.constraint_name = kcu.constraint_name 
            AND tc.table_schema = kcu.table_schema
        WHERE tc.constraint_type = 'PRIMARY KEY'
    ) pk 
    ON c.table_schema = pk.table_schema 
    AND c.table_name = pk.table_name 
    AND c.column_name = pk.column_name
    JOIN params p
    ON c.table_schema = p.schema_name
    AND c.table_name = p.table_name
    ORDER BY 
        c.ordinal_position
)
SELECT 
    no,
    column_name as "컬럼명",
    column_description as "컬럼설명",
    format as "형식",
    length as "길이",
    default_value as "Default",
    pk as "PK"
FROM 
    columns;

반응형