Uncategorized

[PostgreSQL] 특정 컬럼명을 사용하는 VIEW / FUNCTION / PROCEDURE 찾기

PostgreSQL에서 특정 컬럼명을 사용하는 VIEW / FUNCTION / PROCEDURE 찾기는 결국 “정의(소스)” 안에서 문자열 검색하는 방식이 핵심입니다.



1. VIEW에서 찾기

SELECT 
schemaname,
viewname,
definition
FROM pg_views
WHERE definition ILIKE '%컬럼명%';

2. MATERIALIZED VIEW 포함

SELECT 
schemaname,
matviewname,
definition
FROM pg_matviews
WHERE definition ILIKE '%컬럼명%';

3. FUNCTION / PROCEDURE 찾기

SELECT 
n.nspname AS schema_name,
p.proname AS function_name,
pg_get_functiondef(p.oid) AS definition
FROM pg_proc p
JOIN pg_namespace n ON p.pronamespace = n.oid
WHERE pg_get_functiondef(p.oid) ILIKE '%컬럼명%';

4. 특정 스키마만 조회 (실무 추천)

WHERE n.nspname = 'public'
AND pg_get_functiondef(p.oid) ILIKE '%컬럼명%'

5. VIEW + FUNCTION 통합 검색

-- VIEW
SELECT
'VIEW' AS type,
schemaname AS schema_name,
viewname AS object_name,
definition
FROM pg_views
WHERE definition ILIKE '%컬럼명%'UNION ALL-- FUNCTION / PROCEDURE
SELECT
'FUNCTION' AS type,
n.nspname AS schema_name,
p.proname AS object_name,
pg_get_functiondef(p.oid) AS definition
FROM pg_proc p
JOIN pg_namespace n ON p.pronamespace = n.oid
WHERE pg_get_functiondef(p.oid) ILIKE '%컬럼명%';

6. 더 정확하게 찾고 싶으면 (테이블 + 컬럼 조합)

👉 컬럼명이 겹칠 때 유용

ILIKE '%테이블명.컬럼명%'

실무 핵심 포인트

1. 완벽한 “컬럼 참조” 추적은 어려움

  • 문자열 기반 검색이라
    • alias 사용 (t.user_id)
    • 동적 SQL
      👉 이런 경우 100% 잡기 어려움

2. 그래도 가장 현실적인 방법

  • pg_views.definition
  • pg_get_functiondef()

👉 이 두 개로 대부분 커버됨


3. 성능

  • 전체 DB 스캔이라 느릴 수 있음 ==> 운영에서는 스키마 조건 꼭 추가

실무 추천 전략

1. 테이블/컬럼 영향도 분석
2. VIEW 검색
3. FUNCTION/PROCEDURE 검색
4. 애플리케이션 코드까지 grep
Hi, I’m 관리자