함수의 본문은 문자열로 저장됩니다 . 참조 된 객체 목록이 없습니다. (예를 들어, 참조 된 테이블에 대한 실제 링크가 저장된 뷰와 다릅니다.)
Postgres 10 이전 버전에 대한이 쿼리 는 시스템 카탈로그 정보 기능pg_get_functiondef()
을 사용하여 CREATE FUNCTION
관련 기능에 대한 스크립트 를 재구성하고 대소 문자를 구분하지 않는 정규식으로 테이블 이름을 검색합니다.
SELECT n.nspname AS schema_name
, p.proname AS function_name
, pg_get_function_arguments(p.oid) AS args
, pg_get_functiondef(p.oid) AS func_def
FROM pg_proc p
JOIN pg_namespace n ON n.oid = p.pronamespace
WHERE NOT p.proisagg
AND n.nspname NOT LIKE 'pg_%'
AND n.nspname <> 'information_schema'
AND pg_get_functiondef(p.oid) ~* '\mbig\M';
그것은 일을해야하지만 분명히 방탄은 아닙니다. 테이블 이름이 동적으로 생성되는 동적 SQL의 경우 실패 할 수 있으며, 특히 테이블 이름이 공통 단어 인 경우 여러 개의 오 탐지를 리턴 할 수 있습니다.
시스템 스키마의 집계 함수 및 모든 함수는 제외됩니다.
\m
하고\M
시작을 표시하고 정규 표현식에서 단어의 끝.
pg_proc
Postgres 11에서 변경된 시스템 카탈로그 proisagg
가로 대체되었으며 prokind
실제 저장 프로 시저가 추가되었습니다. 적응해야합니다. 관련 :
EXECUTE
와 같은 표현을 찾을 수 없다는 의미에서 완전히 강력'mm_'||name_parameter
하지는 않으며 인용 된 이름"my""table""
이나 대소 문자를 올바르게 처리 하지 못하지만 대부분의 사람들이 원하는 것을 대부분 수행합니다. .