2011-12-01 5 views
3

C 언어 함수 API를 통해 또는 콜백 함수를 매개 변수로 허용하는 pl/pgsql을 사용하여 Postgres에 사용자 정의 함수를 만들 수 있습니까?Postgres의 다른 함수에 대한 매개 변수로 함수

C- 언어 API를 통해서만이 작업을 수행 할 수있는 방법은 없습니다. SQL 데이터 유형 만 허용하고 "함수"에 대한 데이터 유형이 없기 때문입니다. 하지만 뭔가를 놓친 것일까 요?

답변

1

나는 익명의 함수가 없으므로 함수 이름을 전달하면 안된다고 생각합니다.

+1

pl/pgsql 또는 c API를 통해 함수 이름 만 가질 때 함수를 호출하는 방법을 알고 있습니까? – Kungi

+0

@Kungi, 'EXECUTE'SELECT '|| funcname ||'() '...'과 같은 것입니다. –

+0

more here - http://www.postgresql.org/docs/9.1/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN –

3

각 기능/프로 시저에는 pg_proc에 항목이 있어야하므로 프로 시저를 식별하는 데 기본 키를 사용할 수 있습니다. 이것은 또한 동일한 이름이지만 다른 수의 매개 변수 또는 다른 매개 변수 유형을 갖는 프로 시저의 문제점을 제거합니다.

간편한 처리를 위해 연관된 캐스트가있는 regprocregprocedure의 약어입니다. 이 경우 manual을 찾으십시오. 매개 변수 유형으로

select 'pg_database_size(oid)'::regprocedure; -- create "reference" 
    regprocedure  
----------------------- 
pg_database_size(oid) 

사용 regprocedure :

기능을 확인하고 주위를 통과

는 문제가되지 않습니다.

내가 아직 알지 못했던 문제는 실제로 그러한 것을 편리하게 호출하는 방법입니다.

+1

plpgsql 함수에서 동적 SQL을 작성하고 EXECUTE를 사용해야합니다. 쿼리 문자열을 만들기 위해'regproc'을'text'로 다시 던지십시오. 'quote_ident()'로 SQLi를 보호하십시오 - 함수 이름은 안전하지 않습니다. 고려 : 'CREATE FUNCTION "; 사용자로부터 삭제;"() RETURNS int AS'SELECT 1 'LANGUAGE sql;' –

관련 문제