포스트그레스사용자가 추가할 수 있도록 허용 함수 작성에 사용할 수 있는 새로운 프로그래밍 토토 캔 및 절차. 이것들은절차적 토토 캔(PL). 함수나 트리거의 경우 절차적 언어로 작성된 절차, 데이터베이스 서버 함수를 해석하는 방법에 대한 기본 지식이 없습니다. 소스 텍스트. 대신 작업이 특수 핸들러에 전달됩니다. 그것은 언어의 세부 사항을 알고 있습니다. 핸들러는 다음 중 하나를 수행할 수 있습니다. 구문 분석, 구문 분석, 실행 등의 모든 작업을 수행합니다. 그 자체이거나 다음 역할을 할 수 있습니다."접착제"사이포스트그레스및 기존 프로그래밍 토토 캔의 구현. 핸들러 자체는 공유로 컴파일된 특수 프로그래밍 토토 캔 기능 개체를 생성하고 요청 시 로드합니다.
새로운 절차적 언어에 대한 핸들러 작성은 일부 정보는 본 설명서의 범위에 포함되어 있지만 CREATE LANGUAGE 참조 페이지. 여러 절차적 언어 표준에서 사용 가능포스트그레스배포.
절차적 언어는 다음과 같아야 합니다."설치됨"각 데이터베이스에 사용. 하지만 템플릿에 설치된 절차적 언어1 데이터베이스는 이후 모든 항목에서 자동으로 사용 가능합니다. 데이터베이스를 생성했습니다. 따라서 데이터베이스 관리자는 다음을 결정할 수 있습니다. 어떤 데이터베이스에서 어떤 언어를 사용할 수 있고, 그가 선택하면 기본적으로 일부 언어를 사용할 수 있습니다.
표준 배포판과 함께 제공되는 토토 캔의 경우, 쉘 스크립트createlang아마도 세부 사항을 직접 수행하는 대신 사용됩니다. 예를 들어, template1 데이터베이스에 PL/pgSQL을 설치하려면 다음을 사용하세요.
createlang plpgsql template1아래에 설명된 수동 절차는 다음 경우에만 권장됩니다. 사용자 정의 언어 설치createlang모릅니다.
수동 절차적 토토 캔 설치
절차적 언어가 다음의 데이터베이스에 설치되었습니다. 데이터베이스에서 수행해야 하는 세 단계 슈퍼유저.
언어 처리기를 위한 공유 객체는 다음과 같아야 합니다 적절한 라이브러리에 컴파일 및 설치 디렉토리. 이것은 건물과 같은 방식으로 작동합니다. 일반 사용자 정의 C 함수로 모듈 설치 그렇습니다; 참조섹션 13.4.6.
핸들러는 다음 명령으로 선언되어야 합니다.
함수 생성handler_function_name()
OPAQUE를 다음과 같이 반환합니다.
'공유 객체 경로' 토토 캔 'C';특수 반환 유형불투명말한다
이 함수가 정의된 것 중 하나를 반환하지 않는 데이터베이스SQL데이터 유형이며 직접적이지 않습니다.
에서 사용 가능SQL문장.PL은 다음 명령으로 선언되어야 합니다.
생성 [신뢰할 수 있음] [절차] 토토 캔 '토토 캔-이름' 핸들러handler_function_nameLANCOMPILER '설명';선택적 키워드신뢰할 수 있음슈퍼유저가 없는 일반 데이터베이스 사용자인지 여부를 알려줍니다. 이 언어를 사용하여 생성하려면 권한이 허용되어야 합니다. 기능 및 트리거 절차. PL 기능이 실행되기 때문에 데이터베이스 백엔드 내부에서,신뢰할 수 있음플래그는 언어에만 제공되어야 합니다. 데이터베이스 백엔드 내부 또는 파일 시스템. PL/pgSQL, PL/Tcl 및 PL/Perl 언어가 알려져 있습니다. 신뢰할 수 있는 것; PL/TclU 언어는아님신뢰할 수 있는 것으로 표시됩니다.
기본적으로포스트그레설치, PL/pgSQL 언어용 핸들러가 빌드되었습니다. 그리고 다음에 설치되었습니다."도서관"디렉토리. Tcl/Tk 지원이 구성된 경우 PL/Tcl과 PL/TclU도 동일하게 구축되어 설치됩니다. 위치. 마찬가지로 PL/Perl 핸들러가 빌드 및 설치됩니다. Perl 지원이 구성된 경우.createlang스크립트는 두 개의 CREATE를 자동화합니다. 위에서 설명한 단계입니다.
예
다음 명령은 데이터베이스에 찾을 위치를 알려줍니다. PL/pgSQL 언어 호출을 위한 공유 객체 핸들러 함수.
CREATE FUNCTION plpgsql_call_handler ()는 OPAQUE AS를 반환합니다.
'/usr/local/pgsql/lib/plpgsql.so' LANGUAGE 'C';
명령어
신뢰할 수 있는 절차적 언어 'plpgsql' 생성
핸들러 plpgsql_call_handler
LANCOMPILER 'PL/pgSQL';그런 다음 이전에 선언된 호출 핸들러를 정의합니다.
함수 및 트리거 프로시저에 대해 함수를 호출해야 합니다.
여기서 언어 속성은 'plpgsql'입니다.