이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 56 장. 절차 적 언어 토토 작성버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

51 장. 쓰기 a 절차 언어 스포츠 토토 결과

전류"버전 1"인터페이스 컴파일 된 언어 (여기에는 사용자 정의 기능이 포함됩니다 절차 언어, SQL로 작성된 기능 및 사용 기능 버전 0 컴파일 된 언어 인터페이스) a를 통과합니다.전화 스포츠 토토 결과특정 언어에 대한 기능. 그것 함수를 실행할 호출 스포츠 토토 결과의 책임입니다. 제공된 출처를 해석하는 것과 같은 의미있는 방식으로 텍스트. 이 장에서는 새로운 절차 언어가 어떻게 호출되는지 간략하게 설명합니다 스포츠 토토 결과를 작성할 수 있습니다.

절차 언어의 호출 스포츠 토토 결과는 A입니다."정상"컴파일에 작성 해야하는 함수 C와 같은 언어, 버전 1 인터페이스를 사용하고 등록했습니다. 와 함께postgresql인수 및 유형 반환Language_Handler. 이 특별한 유사 형식은 식별합니다 통화 스포츠 토토 결과로서의 기능은 호출되는 것을 방지합니다. SQL 명령에서 직접. C 언어 통화에 대한 자세한 내용 컨벤션 및 동적 하중, 참조토토 커뮤니티 : 문서 : 9.3 : 토토 커뮤니티whanguage functions.

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

함수 입력을 가져 오는 것은 통화 스포츠 토토 결과에 달려 있습니다. 에서PG_PROC시스템 카탈로그 및 호출 된 함수의 인수 및 반환 유형을 분석합니다. 그만큼as조항기능 만들기함수에 대한 명령이 있습니다 에서 발견prosrc열의 열PG_PROC행. 이것은 일반적으로 소스입니다 절차 적 언어로 텍스트이지만 이론적으로는 파일의 경로 이름 또는 다른 것과 같은 다른 것 통화 스포츠 토토 결과에게 무엇을 자세히 해야하는지 알려줍니다.

종종 동일한 함수를 SQL 문자 당 여러 번 호출합니다. 통화 처리기는 반복적 인 정보 조회를 피할 수 있습니다. 를 사용하여 함수 호출flinfo- fn_extra필드. 이것은 처음에 할 것입니다 BENULL이지만 호출 스포츠 토토 결과에서 설정할 수 있습니다 호출 된 함수에 대한 정보를 지적합니다. 후속 전화, ifflinfo- fn_extraIS 이미 비NULL그런 다음 사용할 수 있습니다 정보 조회 단계가 건너 뜁니다. 전화 처리기가 만들어야합니다 확실히flinfo- fn_extra적어도 끝까지 살 수있는 메모리를 가리 킵니다. 현재 쿼리, 이후fmgrinfo데이터 구조는 그렇게 오래 유지 될 수 있습니다. 이를 수행하는 한 가지 방법은 다음과 같습니다 에 의해 지정된 메모리 컨텍스트에 추가 데이터를 할당flinfo- fn_mcxt; 그러한 데이터는 할 것입니다 일반적으로와 동일한 수명이 있습니다.fmgrinfo자체. 그러나 스포츠 토토 결과도 할 수 있습니다 캐시 할 수 있도록 더 오래 지속되는 메모리 컨텍스트를 사용하도록 선택하십시오. 쿼리 전체의 함수 정의 정보.

절차 적 기능이 트리거로 호출되면 아니요 인수는 일반적인 방식으로 전달되지만functionCallInfodata'sContext필드 포인트 ATriggerData존재보다는 구조null평범한 기능 호출에있는 것처럼. 에이 언어 처리기는 절차 적 언어를위한 메커니즘을 제공해야합니다 트리거 정보를 얻는 기능.

이것은 절차 적 스포츠 토토 결과를위한 템플릿입니다. 기음:

#include "postgres.h"
#include "Executor/Spi.h"
#include "명령/trigger.h"
#include "fmgr.h"
#include "Access/Heapam.h"
#include "utils/syscache.h"
#include "카탈로그/PG_PROC.H"
#include "카탈로그/pg_type.h"

#ifdef pg_module_magic
PG_MODULE_MAGIC;
#endif

pg_function_info_v1 (plsample_call_handler);

자료
plsample_call_handler (pg_function_args)

    Datum Retval;

    if (호출 _as_trigger (fcinfo))

        /*
         * 트리거 절차라고합니다
         */
        triggerData *trigdata = (triggerData *) fcinfo- 컨텍스트;

        retval = ...

    또 다른

        /*
         * 함수로 호출됩니다
         */

        retval = ...

    retval 리턴;

수천 줄의 코드 만 추가해야합니다. 통화 스포츠 토토 결과를 완료하기위한 점들.

스포츠 토토 결과 기능을로드 가능한 상태로 컴파일 한 후 모듈 (참조섹션 35.9.6), 다음 명령에 따라 샘플 절차를 등록하십시오 언어:

함수 만들기 plsample_call_handler () language_handler를 반환합니다
    처럼 'filename'
    언어 C;
언어 plsample을 만듭니다
    스포츠 토토 결과 plsample_call_handler;

통화 스포츠 토토 결과를 제공하는 것은 최소 절차 언어, 다른 두 가지 기능이 있습니다. 언어를 더 편리하게 사용하기 위해 선택적으로 제공됩니다. 이것들은Validatorand an인라인 스포츠 토토 결과. 유효성 검사기를 제공 할 수 있습니다 언어 별 점검을 수행하는 동안함수 생성. 인라인 스포츠 토토 결과 언어가 익명 코드를 지원할 수 있도록 제공 될 수 있습니다. 를 통해 실행 된 블록스포츠 토토 결과 : 문서 : 9.3 : do명령.

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

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

인라인 스포츠 토토 결과가 절차 언어로 제공되는 경우, IT 유형의 단일 매개 변수를 취하는 함수로 선언해야합니다내부. 인라인 스포츠 토토 결과의 결과는입니다 무시되므로 관습 적으로 반환으로 선언됩니다void. 인라인 스포츠 토토 결과는 A에 호출됩니다.do명령문이 실행됩니다 절차 언어. 실제로 전달 된 매개 변수는 포인터입니다InlineCodeBlockstruct 에 대한 정보가 포함되어 있습니다.do진술의 매개 변수, 특히 익명의 텍스트 실행될 코드 블록. 인라인 스포츠 토토 결과가이를 실행해야합니다 코드 및 반환.

이러한 모든 기능 선언을 랩핑하는 것이 좋습니다. 뿐만 아니라언어 생성명령 그 자체로,확장단순하도록확장 생성명령이 충분합니다 언어를 설치하십시오. 보다PostgreSQL : 문서 : 9.3 : 관련 객체를 롤 토토자로 포장연장 작성에 관한 정보.

표준 배포에 포함 된 절차 언어 자신의 언어 처리기를 작성하려고 할 때 좋은 참조입니다. 조사SRC/PL소스 트리. 그만큼PostgreSQL : 문서 : 9.3 : 스포츠 토토 생성참조 페이지도 유용한 세부 정보가 있습니다.