[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% 잡기 어려움
- alias 사용 (
2. 그래도 가장 현실적인 방법
pg_views.definitionpg_get_functiondef()
👉 이 두 개로 대부분 커버됨
3. 성능
- 전체 DB 스캔이라 느릴 수 있음 ==> 운영에서는 스키마 조건 꼭 추가
실무 추천 전략
1. 테이블/컬럼 영향도 분석
2. VIEW 검색
3. FUNCTION/PROCEDURE 검색
4. 애플리케이션 코드까지 grep



