2012-09-29 3 views
1

SQL을 사용하여 PostgreSQL 함수의 소스를 추출해야합니다.postgresql 추출 함수 소스

나는이 이상한 행동을 하나의 기능으로보고 있으며, 다른 모든 기능 (약 200+)은 절대적으로 훌륭하게 작동합니다. 나는 다음 문을 실행하면

, 그것은 작동합니다

select prosrc from pg_proc where proname= 'accounts_count'; 

을 그러나 나는 다음을 실행할 때, 그것은 빈 문자열 반환

select routine_definition 
from information_schema.routines 
where specific_name = 'accounts_count_66243' 

PostgreSQL의 버전 8.3. 나는 pgAdmin III와 psql을 모두 사용해 보았습니다.

쇼 스토퍼가 아니지만 이것이 어쩌면 이유인지 아는 데 유용합니다.

아무도 아이디어가 없습니까?

+0

'반환) 최고? –

+0

8.4부터'pg_get_functiondef()'가 있습니다. 최신 버전으로 업데이트하는 또 다른 이유는 무엇입니까? –

답변

2

당신이 information_schema.routines의 정의를 보면, 당신은 다음과 같은 필터를 찾을 수 있습니다

FROM pg_namespace n, pg_proc p, pg_language l, pg_type t, pg_namespace nt 
WHERE n.oid = p.pronamespace AND p.prolang = l.oid AND p.prorettype = t.oid 
    AND t.typnamespace = nt.oid AND (pg_has_role(p.proowner, 'USAGE'::text) 
    OR has_function_privilege(p.oid, 'EXECUTE'::text)); 

그래서 내 이론 :

  • 관련 기능의 권리와 소유권에 약간의 문제가있다 (아마) -이 이론의 검증을 위해 다른 계정을 사용하려고 (포스트 그레스는
  • `을 선택 길이 (routine_definition를) ... 무엇을
+0

잘 했어. 그것은 권리 문제로 밝혀졌습니다. 함수 소유자가 다른 사용자로 설정되었습니다. 함수가 로그인 한 사용자가 소유하지 않은 경우 나타납니다. pg_proc이 수행하는 동안 information_schema.routines는 소스를 표시하지 않습니다. 이상한. – ManiP

+0

확실 - http://www.postgresql.org/docs/9.2/static/infoschema-routines.html을 참조하십시오. –