58 장. 절차 무지개 토토 핸들러 작성

현재 이외의 언어로 작성된 모든 함수에 대한 모든 호출버전 1컴파일 된 무지개 토토의 인터페이스 (여기에는 사용자 정의 절차 무지개 토토 및 SQL로 작성된 기능 포함)전화 핸들러특정 무지개 토토의 기능. 제공된 소스 텍스트를 해석하는 것과 같은 의미있는 방식으로 함수를 실행하는 것은 통화 핸들러의 책임입니다. 이 장에서는 새로운 절차 무지개 토토의 통화 핸들러가 어떻게 작성 될 수 있는지 설명합니다.

절차 무지개 토토의 호출 핸들러는입니다.정상version-1 인터페이스를 사용하여 C와 같은 편집 된 무지개 토토로 작성하고에 등록 해야하는 함수PostgreSQL논증을 취하지 않고 유형을 반환La무지개 토토uage_Handler. 이 특수 의사 유형은 기능을 통화 핸들러로 식별하고 SQL 명령으로 직접 호출되는 것을 방지합니다. C 무지개 토토 통화 규칙 및 동적 로딩에 대한 자세한 내용은 참조하십시오.PostgreSQL : 문서 : 16 : 38.10. C- 언어 스포츠 토토 베트맨.

통화 핸들러는 다른 기능과 같은 방식으로 호출됩니다. A에 대한 포인터를받습니다functionCallInfobasedata struct호출 된 함수에 대한 인수 값과 정보를 포함하는 것은 a를 반환 할 것으로 예상됩니다.Datum결과 (그리고 아마도를 설정할 수 있습니다isnull필드functionCallInfoBovasedataSQL NULL 결과를 반환하려는 경우 구조). 통화 핸들러와 일반 Callee 기능의 차이점은입니다.flinfo- fn_oid필드functionCallInfobasedata구조에는 호출 핸들러 자체가 아닌 실제 기능의 OID가 포함됩니다. 통화 핸들러는이 필드를 사용하여 실행할 기능을 결정해야합니다. 또한 통과 된 인수 목록은 통화 핸들러가 아닌 대상 기능의 선언에 따라 설정되었습니다.

|PG_PROC시스템 카탈로그 및 호출 된 함수의 인수 및 반환 유형을 분석합니다. 그만큼as조항함수 만들기함수에 대한 명령은에 있습니다.prosrc열의 열PG_PROC행. 이것은 일반적으로 절차 무지개 토토의 소스 텍스트이지만 이론적으로는 파일의 경로 이름 또는 통화 핸들러에게 자세히해야 할 일을 알려주는 다른 것과 같은 다른 것일 수 있습니다..

종종 동일한 함수가 SQL 문에 따라 여러 번 호출됩니다. 통화 핸들러는를 사용하여 호출 된 기능에 대한 반복적 인 정보 조회를 피할 수 있습니다.flinfo- fn_extra필드. 이것은 처음에NULL이지만 호출 핸들러에서 호출 된 함수에 대한 정보를 가리키기 위해 설정할 수 있습니다. 후속 통화에서 ifflinfo- fn_extra이미 비null그런 다음 사용될 수 있고 정보 조회 단계가 건너 뜁니다. 통화 핸들러는flinfo- fn_extraa 이후로 현재 쿼리가 끝날 때까지 적어도 살게 될 메모리를 가리키도록 만들어졌습니다.fmgrinfo데이터 구조는 그렇게 오래 유지할 수 있습니다. 이를 수행하는 한 가지 방법은에 의해 지정된 메모리 컨텍스트에서 추가 데이터를 할당하는 것입니다.flinfo- fn_mcxt; 이러한 데이터는 일반적으로와 같은 수명을 갖습니다.fmgrinfo자체. 그러나 핸들러는 쿼리 전체에서 기능 정의 정보를 캐시 할 수 있도록 더 오래 지속되는 메모리 컨텍스트를 사용하도록 선택할 수 있습니다.

절차 적 무지개 토토 함수가 트리거로 호출되면 일반적인 방식으로 인수는 전달되지 않지만functionCallInfobasedata's컨텍스트필드 포인트 ATriggerData존재보다는 구조null평범한 기능 호출에있는 것처럼. 무지개 토토 핸들러는 트리거 정보를 얻기 위해 절차 적 기능에 대한 메커니즘을 제공해야합니다.

C 확장으로 작성된 절차 적 핸들러를위한 템플릿SRC/TEST/MODULES/PLSALLE. 이것은 절차 적 핸들러를 만들고, 매개 변수를 처리하고, 값을 반환하는 한 가지 방법을 보여주는 작동하는 샘플입니다.

콜 핸들러를 제공하는 것만으로 최소한의 절차 무지개 토토를 작성하기에 충분하지만 무지개 토토를보다 편리하게 사용하기 위해 선택적으로 제공 할 수있는 두 가지 다른 기능이 있습니다. 이것들은Validatorand an인라인 핸들러. 무지개 토토 별 점검을 수행 할 수 있도록 유효성 검사기가 제공 될 수 있습니다.함수 만들기. 언어가를 통해 실행 된 익명 코드 블록을 지원할 수 있도록 인라인 핸들러가 제공 될 수 있습니다.do명령.

유효성 검사기가 절차 무지개 토토로 제공되는 경우 유형의 단일 매개 변수를 취하는 함수로 선언해야합니다OID. 유효성 검사기의 결과는 무시되므로 관습 적으로 반환으로 선언됩니다void. 유효성 검사기는 A의 끝에서 호출됩니다.기능 만들기절차 언어로 작성된 함수를 작성하거나 업데이트 한 명령. 통과 된 OID는 함수의 OID입니다PG_PROC행. 유효성 검사기는이 행을 평범한 방식으로 가져와야하며, 확인이 적절한 모든 것을 수행해야합니다. 첫째, 전화CheckFunctionValidatorAccess ()사용자가 달성 할 수없는 유효성 검사기에 대한 명시적인 호출을 진단하려면기능 만들기. 그런 다음 일반적인 검사에는 기능의 인수와 결과 유형이 언어에 의해 뒷받침되고 함수의 본문이 언어에서 구문 적으로 정확한지 확인하는 것이 포함됩니다. 유효성 검사기가 함수가 괜찮다는 것을 찾으면 반환해야합니다. 오류가 발견되면 정상을 통해보고해야합니다Ereport ()오류보고 메커니즘. 오류를 던지면 트랜잭션 롤백이 강화되어 잘못된 기능 정의가 커밋되는 것을 방지합니다.

Validator 함수는 일반적으로를 존중해야합니다.check_function_bodies매개 변수 : 꺼져 있으면 비싸거나 컨텍스트에 민감한 점검을 건너 뛰어야합니다. 언어가 컴파일 시간에 코드 실행을 제공하는 경우, 유효성 검사기는 그러한 실행을 유도 할 수있는 점검을 억제해야합니다. 특히이 매개 변수는에 의해 꺼집니다.pg_dump다른 데이터베이스 개체에서 기능 본체의 부작용이나 종속성에 대해 걱정하지 않고 절차 적 무지개 토토 기능을로드 할 수 있도록. (이 요구 사항으로 인해 호출 핸들러는 유효성 검사기가 함수를 완전히 점검했다고 가정하지 않아야합니다. 유효성 검사기를 갖는 점은 통화 핸들러가 확인을 생략하도록하는 것이 아니라 A에 명백한 오류가있는 경우 즉시 사용자에게 알리는 것입니다.함수 생성Command.) 정확히 확인해야 할 내용의 선택은 대부분 유효성 검사기 기능의 재량에 남아 있지만 핵심에 주목하십시오.기능 생성코드 만 실행set클로즈는 함수에 첨부 될 때check_function_bodies켜져 있습니다. 따라서 결과가 GUC 매개 변수에 의해 영향을받을 수있는 점검은 확실히을 건너 뛰어야합니다.check_function_bodies덤프를 복원 할 때 허위 실패를 피하기 위해 꺼져 있습니다.

절차 언어로 인라인 핸들러가 제공되면 유형의 단일 매개 변수를 취하는 함수로 선언해야합니다내부. 인라인 핸들러의 결과는 무시되므로 관례 적으로 반환으로 선언됩니다void. 인라인 핸들러는 A에 호출됩니다.do진술은 절차 무지개 토토를 지정하여 실행됩니다. 실제로 전달 된 매개 변수는에 대한 포인터입니다.InlineCodeBlock구조물에 대한 정보가 포함되어 있습니다doStatement의 매개 변수, 특히 실행될 익명 코드 블록의 텍스트. 인라인 핸들러는이 코드를 실행하고 반환해야합니다.

이 기능 선언과 모든 기능 선언을 래핑하는 것이 좋습니다무지개 토토 생성명령 자체,확장그래서 간단하게확장 생성명령은 무지개 토토를 설치하기에 충분합니다. 보다PostgreSQL : 문서 : 16 : 38.17. 관련 객체를 토토 꽁 머니자로 포장연장 작성에 관한 정보.

표준 배포에 포함 된 절차 무지개 토토는 자신의 무지개 토토 핸들러를 작성하려고 할 때 좋은 참조입니다. 조사SRC/PL소스 트리의 서브 디렉토리. 그만큼무지개 토토 생성참조 페이지도 유용한 세부 사항이 있습니다.

정정 제출

올바른 문서에 아무것도 표시되면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면