데이터베이스

표준화를 위한 컬럼 추출

텐버거의 행복회로 2025. 4. 19. 17:39
728x90

postgresql의 전체 테이블들의 컬럼을 출력하는 프로시져이다.

CREATE OR REPLACE FUNCTION get_all_table_columns()

RETURNS TABLE (

table_schema TEXT,

table_name TEXT,

ordinal_position INT,

column_name TEXT,

data_type TEXT,

not_null BOOLEAN,

default_value TEXT,

column_comment TEXT

) AS $$

DECLARE

v_tbl_schema TEXT;

v_tbl_name TEXT;

v_col RECORD;

full_table_name TEXT;

BEGIN

-- 테이블 목록 순회 (alias로 이름 충돌 방지)

FOR v_tbl_schema, v_tbl_name IN

SELECT t.table_schema, t.table_name

FROM information_schema.tables t

WHERE t.table_type = 'BASE TABLE'

AND t.table_schema NOT IN ('topology','information_schema', 'pg_catalog')

LOOP

-- 테이블 이름 문자열 조합

full_table_name := format('%I.%I', v_tbl_schema, v_tbl_name);

 

BEGIN

-- 컬럼 순회

FOR v_col IN

SELECT

a.attnum AS ordinal_position,

a.attname AS column_name,

format_type(a.atttypid, a.atttypmod) AS data_type,

a.attnotnull AS not_null,

pg_get_expr(d.adbin, d.adrelid, true) AS default_value,

col_description(a.attrelid, a.attnum) AS column_comment

FROM

pg_attribute a

LEFT JOIN

pg_attrdef d ON d.adrelid = a.attrelid AND d.adnum = a.attnum

WHERE

a.attrelid = full_table_name::regclass

AND a.attnum > 0

AND NOT a.attisdropped

ORDER BY

a.attnum

LOOP

-- 반환할 테이블 필드 값 설정

table_schema := v_tbl_schema;

table_name := v_tbl_name;

ordinal_position := v_col.ordinal_position;

column_name := v_col.column_name;

data_type := v_col.data_type;

not_null := v_col.not_null;

default_value := v_col.default_value;

column_comment := v_col.column_comment;

 

RETURN NEXT;

END LOOP;

 

EXCEPTION WHEN OTHERS THEN

RAISE NOTICE '오류 발생: %.% → %', v_tbl_schema, v_tbl_name, SQLERRM;

END;

END LOOP;

END;

$$ LANGUAGE plpgsql;

 

 

 

-- 출력은 이렇게

-- 출력은 이렇게

-- 출력은 이렇게

SELECT * FROM get_all_table_columns();

 


-- 결과화면

728x90