728x90
PostgreSQL에서 함수(function)나 프로시저(procedure)의 소스 내용에 특정 텍스트를 검색하려면, 함수 본문을 저장하는 시스템 카탈로그인 **pg_proc**의 prosrc 컬럼을 활용하면 됩니다. 아래에 이를 수행하는 구체적인 방법을 정리하였습니다.
1. pg_proc에서 소스 내용 검색
pg_proc.prosrc 컬럼은 함수 또는 프로시저의 본문(소스 코드)을 포함합니다. 특정 키워드를 검색하려면 다음과 같은 SQL 쿼리를 사용할 수 있습니다.
특정 키워드 검색
SELECT nspname AS schema_name,
proname AS function_name,
prosrc AS function_body
FROM pg_proc
JOIN pg_namespace ON pg_proc.pronamespace = pg_namespace.oid
WHERE prosrc LIKE '%검색할_키워드%';
- nspname: 함수가 속한 스키마 이름
- proname: 함수 이름
- prosrc: 함수의 소스 코드
- LIKE '%검색할_키워드%': 특정 키워드 검색
2. INFORMATION_SCHEMA.ROUTINES에서 검색
INFORMATION_SCHEMA.ROUTINES 뷰에서도 소스 코드(routine_definition)를 검색할 수 있습니다.
예제: 특정 키워드 검색
SELECT specific_schema AS schema_name,
routine_name AS function_name,
routine_definition AS function_body
FROM information_schema.routines
WHERE routine_definition LIKE '%검색할_키워드%'
AND routine_type = 'FUNCTION'; -- 프로시저 검색 시 'PROCEDURE'로 변경
3. 함수와 프로시저를 포함한 전체 검색
함수와 프로시저를 모두 포함하여 검색하려면 pg_proc를 사용하는 것이 편리합니다.
SELECT nspname AS schema_name,
proname AS object_name,
prosrc AS object_body,
CASE
WHEN proisagg THEN 'AGGREGATE'
WHEN proiswindow THEN 'WINDOW FUNCTION'
ELSE 'FUNCTION/PROCEDURE'
END AS object_type
FROM pg_proc
JOIN pg_namespace ON pg_proc.pronamespace = pg_namespace.oid
WHERE prosrc LIKE '%검색할_키워드%';
4. pgAdmin에서 소스 검색
pgAdmin에서 GUI를 사용하여 소스 코드를 검색하려면:
- Functions 또는 Procedures 목록으로 이동합니다.
- 각 함수를 열어 Definition 탭에서 소스 코드 내용을 확인합니다.
5. SQL 스크립트 활용: 정교한 검색
아래는 키워드와 스키마 필터를 동시에 사용할 수 있는 SQL 스크립트 예제입니다.
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN
SELECT nspname AS schema_name,
proname AS function_name,
prosrc AS function_body
FROM pg_proc
JOIN pg_namespace ON pg_proc.pronamespace = pg_namespace.oid
WHERE prosrc LIKE '%검색할_키워드%'
LOOP
RAISE NOTICE 'Schema: %, Function: %, Code: %', r.schema_name, r.function_name, r.function_body;
END LOOP;
END;
$$;
주의사항
- 보안 함수: SECURITY DEFINER 또는 C 언어로 작성된 함수는 prosrc에 소스가 저장되지 않을 수 있습니다.
- 대소문자 구분: PostgreSQL에서 LIKE는 기본적으로 대소문자를 구분합니다. 대소문자를 구분하지 않는 검색을 하려면 ILIKE를 사용하세요.
WHERE prosrc ILIKE '%검색할_키워드%'
요약
- pg_proc.prosrc 또는 information_schema.routines에서 LIKE 또는 ILIKE를 사용하여 키워드를 검색.
- GUI 도구(pgAdmin)를 사용하면 소스 검색이 쉽지만, 대량 검색은 SQL이 유용.
- 복잡한 검색이나 결과 필터링은 스크립트를 활용.
LIST
'Develop' 카테고리의 다른 글
[jQuery] forEach 와 each 사용법과 다양한 예제 (2) | 2025.01.13 |
---|---|
[MyBatis] foreach 사용 방법 - list dto map 예제 (2) | 2025.01.08 |
[MyBatis] selectKey를 사용하여 생성된 키값을 Java에서 리턴받는 방법 (3) | 2024.12.31 |
[PostgreSQL] 문자 자리수 계산 ... 그 외 문자열 함수 활용 예제 (3) | 2024.12.26 |
REST API 개념 및 Java를 활용한 예제 (4) | 2024.12.24 |