테이블명세서 작성용
-- 원하는 스키마와 테이블 이름을 여기에 입력하세요
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;