2014-12-03 2 views
0

트리거에서 수정하고 싶습니다만,이 문제는 200 ~ 300 건으로 수동으로 처리하기에는 너무 많습니다. Postgresql에 전체 db 코드가있는 테이블이 있습니까? 그 곳에서 정의를 모두 찾아서 동시에 모두 수정할 수 있습니까?PostgreSQL의 함수 정의가있는 시스템 테이블

아마도 초보자 용 질문입니다. (오라클에는 그러한 테이블이 있지만 저는 PostgreSQL에 익숙하지 않습니다.)하지만 웹이나 내 자신을 찾을 수는 없습니다.

+0

가장 쉬운 방법은'pg_dump -U the_user --schema-only the_dbname >> textfile.sql'을 사용하고 텍스트 파일의 내용을 사용하는 것입니다. 텍스트 파일에는 테이블, 인덱스, 뷰, 함수를 포함한 ** 모든 ** DDL이 포함되지만 텍스트 파일에서 삭제하기 쉽습니다. – wildplasser

+0

도움이 될 것 같습니다. 파일이 들어있는 디렉토리는 무엇입니까? 'find -name'textfile * '으로 찾을 수는 없지만 리눅스에서 작업 할 때는별로 효과가 없습니다. – Hisu

+0

파일이 없습니다. 출력은 stdout으로 보내집니다. (필자의 예에서는'> textfile'을 사용하여 파일로 리다이렉트했다.) 또한 pg_dump 명령어에'--file = FILENAME' 옵션/플래그가있다. – wildplasser

답변

0

포스트그레스의 모든 절차에 대한 정의가 포함 된 표는 pg_catalog.pg_proc입니다.

소스 코드가있는 열은 prosrc입니다. 당신이 문서라는 이름의 몇 가지 기능을 가지고 가정

select proname, prosrc from pg_proc where proname like '%doc%';

:

당신이 뭔가를 할 수 있습니다.

저장 프로 시저 pg_catalog.pg_get_functiondef은 특정 함수의 소스 코드를 반환합니다. - 그래서 당신은 하나 개 이상의 기능을 반환하는 쿼리에 pg_get_functiondef를 호출 할 수 없습니다

select pg_get_functiondef(oid) from pg_proc where proname='myfunction_name';

불행하게도, pg_get_functiondef는 내부적으로 집계 함수를 사용하여 당신이 뭔가를 할 수 있습니다.

+0

이미 pg_dump로 해결 방법을 사용하고 있지만 pg_proc 테이블은 내가 찾고있는 것과 정확히 일치합니다. 그리고 확실히 다른 경우에 유용 할 것입니다. 도와 주셔서 감사합니다. – Hisu