2012-12-07 2 views

답변

36

사용 pg_getfunctiondef; system information functions을 참조하십시오. pg_getfunctiondef가 PostgreSQL 8.4에 추가되었습니다.

SELECT pg_get_functiondef('proc_name'::regproc); 

pg_catalog에서 시스템 테이블을 조회 할 수있는 스키마의 모든 기능을 덤프; 당신이 public에서 모든 것을 원한다면 말 :

SELECT pg_get_functiondef(f.oid) 
FROM pg_catalog.pg_proc f 
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid) 
WHERE n.nspname = 'public'; 

은 만약 당신이 원하는 아닌 경우 "pg_로 시작 제외한 모든 스키마에서"을 말할 위를 변경하는 사소한입니다. ,

psql -At dbname > /path/to/output/file.sql <<"__END__" 
... the above SQL ... 
__END__ 

다른 DB에서 출력을 실행하려면 같은 것을 사용 :

psql에서 당신은 가진 파일이 덤프 수

psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name 

당신이 좋아하는 데시벨 사이의 기능을 복제하는 경우 그러나 svn 또는 git와 같은 개정 제어 시스템에 함수 정의의 권한있는 사본을 SQL 스크립트로 저장하는 것이 좋으며, PostgreSQL 확장으로 패키징하는 것이 더 바람직합니다. packaging extensions을 참조하십시오.

+0

또한이 함수를 다른 db로 복원하고 싶습니다. 어떻게 할 수 있습니까 ??. 함수 만 복원하면됩니다. – vmb

+0

@vmb 출력은 SQL 함수 정의이므로 psql에 파이프하십시오. 업데이트 된 답변보기 더 좋은 점은 확장을 만들고 그 안에 확장을 꾸미는 것입니다. –

+1

'pg_get_functiondef ('proc_name':: regproc)'**는 때때로 함수 정의의 일부로 간주 될 수있는 함수의 권한 ('GRANT' 및'REVOKE' 문)을 덤프하지 않습니다. – NumberFour

17

pg_dump에는 기능 만 덤프하도록 지정할 수 없습니다. 그러나 데이터가없는 덤프 (-s)를 만들고 복원 할 때 필터링 할 수 있습니다. -Fc 부분에 유의하십시오. pg_restore에 적합한 파일이 생성됩니다.

pg_dump -U username -Fc -s -f dump_test your_database 

은 그 다음의 기능 목록 작성 : 먼저 덤프 걸릴

pg_restore -U username -d your_other_database -L function_list dump_test 
: 마지막으로

pg_restore -l dump_test | grep FUNCTION > function_list 

및 복원 (-L는 위에서 만든 목록 파일을 지정합니다)

+0

아마도 처음 두 명령은'pg_dump -U username -s database | grep FUNCTION> function_list' – Minutis

+0

@Minutis 함수 정의가 _all_ one-liners가 아니라면 작동하지 않습니다. – dezso

+1

방금이 도구를 직접 사용해 보았습니다. 첫 번째 주석의 해결 방법이 맞는지 확인할 수 있습니다. – Minutis