이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 와이즈 토토 생성버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

만들기 배트맨 토토

이름

CREATE LANGUAGE  --  새로운 배트맨 토토를 정의합니다. 함수 배트맨 토토

시놉시스

[ 신뢰할 수 있음 ] [ 절차 ] 배트맨 토토 ' 생성배트맨 토토명'
    핸들러call_handlerLANCOMPILER '댓글'

입력

신뢰할 수 있음

신뢰할 수 있음다음을 지정합니다. 해당 언어에 대한 호출 처리기가 안전합니다. 즉, 그것은 제공합니다 권한이 없는 사용자는 액세스를 우회할 수 있는 기능이 없습니다. 제한. 등록 시 이 키워드를 생략한 경우 언어, 다음 사용자만포스트그레스슈퍼유저 권한을 사용할 수 있습니다 새로운 기능을 생성하기 위한 배트맨 토토입니다.

배트맨 토토명

새로운 절차적 언어의 이름. 언어 이름은 대소문자를 구분하지 않습니다. 절차적 언어는 불가능하다. 내장 언어 중 하나를 재정의합니다.포스트그레스.

핸들러call_handler

call_handler이것은 이전에 등록된 함수 이름 PL 프로시저를 실행하기 위해 호출됩니다.

댓글

LANCOMPILER인수는 에 삽입될 문자열LANCOMPILER새 속성pg_배트맨 토토항목. 현재,포스트그레스사용하지 않음 어떤 방식으로든 이 속성을 사용하세요.

출력

생성

이 메시지는 언어가 다음과 같은 경우 반환됩니다. 성공적으로 생성되었습니다.

오류: PL 핸들러 함수기능 이름()는 그렇지 않습니다 존재한다

이 오류는 다음과 같은 경우에 반환됩니다.기능 이름()를 찾을 수 없습니다.

설명

사용 중언어 생성, 아포스트그레사용자는 새로운 배트맨 토토를 등록할 수 있습니다 와 함께포스트그레스. 이어서, 함수와 트리거 프로시저를 이 새로운 도구에서 정의할 수 있습니다. 언어. 사용자는 다음을 가지고 있어야 합니다.포스트그레수퍼유저 등록 권한 새로운 배트맨 토토.

PL 핸들러 작성 중

참고:포스트그레스7.1 이상, 핸들러 호출 "버전 1" 기능 관리자 인터페이스를 준수해야 합니다. 예전 스타일의 인터페이스가 아닙니다.

절차적 언어에 대한 호출 핸들러를 작성해야 합니다. C와 같은 컴파일된 언어로 등록되어 있습니다.포스트그레스함수로 사용 인수가 없고를 반환합니다.불투명type, 지정되지 않거나 정의되지 않은 유형에 대한 자리 표시자입니다. 이 호출 처리기가 직접 호출되는 것을 방지합니다. 쿼리에서 함수를 실행합니다. (단, 인수는 다음과 같이 제공될 수 있습니다. 에서 제공하는 언어로 PL 함수를 호출할 때 실제 호출 핸들러가 실행됩니다.)

호출 핸들러는 다른 핸들러와 동일한 방식으로 호출됩니다. 함수: FunctionCallInfoData에 대한 포인터를 받습니다. 인수 값과 이에 대한 정보를 포함하는 구조체 함수를 호출했으며 Datum 결과를 반환할 것으로 예상됩니다. (아마도 다음을 설정할 수 있습니다.isnull필드 FunctionCallInfoData 구조체(SQL을 반환하려는 경우) NULL 결과). 콜 핸들러와 콜 핸들러의 차이점 일반적인 피호출자 함수는 다음과 같습니다.flinfo-fn_oid필드 FunctionCallInfoData 구조체에는 PL의 OID가 포함됩니다. 호출 핸들러 자체가 아닌 호출할 함수입니다. 전화 핸들러는 이 필드를 사용하여 어떤 기능을 수행할지 결정해야 합니다. 실행하다. 또한 전달된 인수 목록이 설정되었습니다. 의 선언이 아닌 대상 PL 함수의 선언에 따라 호출 처리기.

다음을 가져오는 것은 호출 처리기에 달려 있습니다.pg_proc항목을 입력하고 인수를 분석하고 호출된 프로시저의 반환 유형입니다. 의 AS 절함수 생성절차의 내용은 다음과 같습니다. 에서 찾았습니다.prosrc속성pg_proc테이블 항목. 이는 다음과 같을 수 있습니다. 절차적 언어 자체의 소스 텍스트(예: PL/Tcl), 파일 경로 이름, 또는 자세한 내용은 핸들러를 호출하세요.

종종 SQL당 동일한 함수가 여러 번 호출됩니다. 성명. 호출 핸들러는 반복적인 조회를 피할 수 있습니다. 를 사용하여 호출된 함수에 대한 정보flinfo-fn_extra필드. 이는 처음에 NULL일 수 있지만 호출 처리기에 의해 다음을 가리키도록 설정할 수 있습니다. PL 기능에 대한 정보입니다. 후속 호출에서 다음과 같은 경우flinfo-fn_extra이미 NULL이 아닌 경우 사용할 수 있으며 정보 조회 단계 건너뛰었습니다. 호출 핸들러는 다음 사항에 주의해야 합니다.flinfo-fn_extra기억을 가리키도록 만들어졌습니다. 적어도 현재 쿼리가 끝날 때까지 지속됩니다. FmgrInfo 데이터 구조가 그렇게 오랫동안 유지될 수 있기 때문입니다. 하나 이를 수행하는 방법은 메모리에 추가 데이터를 할당하는 것입니다. 에 의해 지정된 컨텍스트flinfo-fn_mcxt; 그러한 데이터는 일반적으로 FmgrInfo 자체와 수명이 동일합니다. 하지만 핸들러는 할 수 있습니다 또한 캐시할 수 있도록 수명이 긴 컨텍스트를 사용하도록 선택합니다. 쿼리 전반에 걸쳐 함수 정의 정보를 제공합니다.

PL 함수가 트리거로 호출되면 명시적인 인수가 전달되었지만 FunctionCallInfoData의컨텍스트필드는 TriggerData 노드를 가리킵니다. 일반 함수 호출에서와 같이 NULL이 아닌 것입니다. PL 핸들러는 PL 함수가 다음을 얻을 수 있는 메커니즘을 제공해야 합니다. 트리거 정보입니다.

참고

사용함수 생성만들기 위해 기능.

사용배트맨 토토 삭제절차를 삭제하려면 배트맨 토토.

표 참조pg_배트맨 토토용 추가 정보:

테이블 "pg_배트맨 토토"
   속성 |  유형 | 수정자
-------------+---------+----------
 란이름 | 이름 |
 라니플 | 부울 |
 신뢰할 수 있는 lanpl | 부울 |
 랜플콜포이드 | 이드 |
 란컴파일러 | 텍스트 |

   란이름 | 라니플 | 신뢰할 수 있는 lanpl | 랜플콜포이드 | 란컴파일러
-------------+---------+------------+------------+---------------+------------
 내부 | 에프 | 에프 |             0 | 해당사항 없음
 다 | 에프 | 에프 |             0 | /bin/cc
 SQL | 에프 | 에프 |             0 | 포스트그레스

절차적 언어에 대한 호출 핸들러는 일반적으로 다음과 같아야 합니다. C로 작성되어 '내부' 또는 'C' 언어로 등록되어 있으며, 백엔드에 연결되어 있는지 여부에 따라 동적으로 로드됩니다. 호출 처리기는 이전 스타일을 사용할 수 없습니다. 'C' 함수 인터페이스.

현재 절차적 언어에 대한 정의는 다음과 같습니다. 생성된 후에는 변경될 수 있습니다.

사용법

이것은 C로 작성된 PL 핸들러의 템플릿입니다:

#include "executor/spi.h"
#include "명령/trigger.h"
#include "utils/elog.h"
#include "fmgr.h"
#include "access/heapam.h"
#include "utils/syscache.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_type.h"

PG_FUNCTION_INFO_V1(plsample_call_handler);

데이텀
plsample_call_handler(PG_FUNCTION_ARGS)

     데이텀 복구;

     if (CALLED_AS_TRIGGER(fcinfo))

          /*
           * 트리거 프로시저로 호출됨
           */
          TriggerData *trigdata = (TriggerData *) fcinfo-context;

          회수 = ...
      그렇지 않으면 
          /*
           * 함수로 호출됨
           */

          회수 = ...

     반환 회수;

대신 몇 천 줄의 코드만 추가하면 됩니다. PL 호출 핸들러를 완료하려면 점을 클릭하세요. 참조함수 생성컴파일 방법에 대한 정보 로드 가능한 모듈로 변환합니다.

다음 명령은 샘플 절차를 등록합니다 언어:

함수 생성 plsample_call_handler () 불투명 반환
    AS '/usr/local/pgsql/lib/plsample.so'
    언어 'C';
절차적 언어 'plsample' 생성
    핸들러 plsample_call_handler
    LANCOMPILER 'PL/샘플';

호환성

SQL92

언어 생성포스트그레스확장. 없습니다언어 생성문의 내용SQL92.