2014-04-02 3 views
2

포스트그레스의 모든 기능 (각 기능의 소유자 변경)을 변경하는 스크립트를 작성하고 있습니다. postgres 쿼리를 사용하여 모든 함수 이름을 나열 할 수 있지만 각 함수에 대한 매개 변수를 나열 할 수는 없습니다.포스트 그레스에서 함수의 소유자를 변경하는 방법

나는 아래에 언급 된 문제의 대한 솔루션을 얻는 경우에 내 문제가 해결됩니다

  1. 함수의 각 매개 변수의 데이터 유형을 나열 할 수있는 방법이 있나요합니다.
  2. 매개 변수 유형을 전달하는 대신 와일드 카드를 보낼 수있는 함수를 변경하는 방법이 있습니까? 예를 들어, 변경 함수 schemaname.func (텍스트)를 'newowner'로 입력하십시오. 변경 기능 schemaname.func (*) OWNER TO 'newowner'.

    someschema 스키마의 모든 기능을 변경하는 SQL 스크립트를 생성합니다 다음은 :

    select 'alter function '||nsp.nspname||'.'||p.proname||'('||pg_get_function_identity_arguments(p.oid)||') owner to newowner;' 
    from pg_proc p 
        join pg_namespace nsp ON p.pronamespace = nsp.oid 
    where nsp.nspname = 'someschema'; 
    

    당신은 그것의 출력을 스풀링 할 수

답변

8

Is there any way to list down parameters' data type in each of the function.

예, pg_get_function_identity_arguments() 기능을 사용 파일에 저장 한 다음 생성 된 스크립트를 실행하십시오.

인용 부호가 필요한 함수 이름이있는 경우에는 quote_ident을 사용하여 함수 이름을 연결해야 할 수 있습니다.

이 모든 것을 함수로 랩핑하고 동적 SQL을 사용하여 정기적으로 필요하면 편리하게 사용할 수 있습니다.

+0

"PostgreSQL 9.4.8에서는 '오류 : 구문 오류 또는'newowner '"로 불리는 특정 구문이 작동하지 않았습니다. 나는''newowner''', 즉'... 소유자를 새로운 소유자로 변경 '을 인용문에서 제외해야했습니다. –

0

동일한 문제가 있었지만 pg_get_function_identity_arguments (p.oid)이 작동하지 않았습니다. 그래서 저는 그 기능을 oidvectortypes (p.proargtypes)으로 대체했습니다.

select 'alter function '||nsp.nspname||'.'||p.proname||'('||oidvectortypes(p.proargtypes)||') owner to newowner;' 
from pg_proc p 
join pg_namespace nsp ON p.pronamespace = nsp.oid 
where nsp.nspname = 'someschema'; 
관련 문제