| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.3 : 토토 꽁 머니래머의 경우 | 토토 핫 : 문서 : 9.3 : 내부 | PostgreSQL : 문서 : 9.3 : 외국 데이터 래퍼 토토 핫 | ||
이외의 언어로 작성된 함수에 대한 모든 호출 현재"버전 1"인터페이스 컴파일된 언어(여기에는 사용자 정의 함수가 포함됩니다. 절차적 언어, SQL로 작성된 함수, 버전 0 컴파일된 언어 인터페이스) 다음을 수행합니다.호출 스포츠 토토 결과특정 언어에 대한 함수입니다. 그것 함수를 실행하는 호출 스포츠 토토 결과의 책임입니다. 제공된 소스를 해석하는 등 의미 있는 방식으로 텍스트. 이 장에서는 새로운 절차적 언어의 호출 방법을 간략하게 설명합니다. 핸들러를 작성할 수 있습니다.
절차적 언어에 대한 호출 스포츠 토토 결과는 다음과 같습니다."정상"컴파일된 형식으로 작성되어야 하는 함수 C와 같은 언어, 버전-1 인터페이스를 사용하여 등록 와 함께포스트그레SQL아니오로 인수 및 유형 반환언어_처리자. 이 특별한 유사 유형은 다음을 식별합니다. 호출 처리기로서의 기능을 수행하고 호출되는 것을 방지합니다. SQL 명령에서 직접. C언어 호출에 대한 자세한 내용은 규칙 및 동적 로딩은 참조토토 커뮤니티 : 문서 : 9.3 : 토토 커뮤니티whanguage functions.
호출 스포츠 토토 결과는 다른 핸들러와 동일한 방식으로 호출됩니다. 함수: a에 대한 포인터를 받습니다.FunctionCallInfoData 구조체인수 값과 호출된 항목에 대한 정보가 포함되어 있습니다. 함수이며 a를 반환할 것으로 예상됩니다.데이텀결과(그리고 아마도 다음을 설정함)isnull필드FunctionCallInfoData구조, 원하는 경우 SQL null 결과를 반환합니다). 통화 처리기의 차이점 일반적인 호출 수신자 함수는 다음과 같습니다.flinfo-fn_oid필드FunctionCallInfoData구조에는 다음이 포함됩니다. 호출 스포츠 토토 결과가 아닌 호출할 실제 함수의 OID 그 자체. 호출 스포츠 토토 결과는 이 필드를 사용하여 다음을 결정해야 합니다. 실행하는 함수입니다. 또한 전달된 인수 목록이 설정되었습니다. 의 선언이 아닌 대상 함수의 선언에 따라 핸들러를 호출합니다.
함수 항목을 가져오는 것은 호출 처리기에 달려 있습니다.
에서pg_proc시스템 카탈로그 및
호출된 함수의 인수 및 반환 유형을 분석합니다.AS다음 절함수 생성함수에 대한 명령은 다음과 같습니다.
에서 찾았습니다.prosrc열pg_proc행. 이것은 일반적으로 소스
절차적 언어로 텍스트를 작성하지만 이론적으로는 다음과 같을 수 있습니다.
파일의 경로 이름 등 기타 다른 것
호출 스포츠 토토 결과에게 수행할 작업을 자세히 알려줍니다.
종종 SQL 문당 동일한 함수가 여러 번 호출됩니다. 호출 처리기는 다음에 대한 정보를 반복적으로 조회하는 것을 방지할 수 있습니다. 를 사용하여 함수 호출flinfo-fn_extra필드. 이는 처음에 수NULL, 그러나 호출 스포츠 토토 결과로 설정할 수 있음 호출된 함수에 대한 정보를 가리킵니다. 후속 호출, ifflinfo-fn_extra이다 이미 비-NULL그러면 사용할 수 있고 정보 조회 단계를 건너뛰었습니다. 호출 처리기는 다음을 수행해야 합니다. 물론이죠flinfo-fn_extra만들어졌습니다 적어도 그 이야기가 끝날 때까지 살아 있을 기억을 가리킨다. 현재 쿼리, 이후:FmgrInfo데이터 구조는 그만큼 오래 유지될 수 있다. 이를 수행하는 한 가지 방법은 다음과 같습니다. 다음으로 지정된 메모리 컨텍스트에 추가 데이터를 할당합니다.flinfo-fn_mcxt; 그러한 데이터는 일반적으로 수명은와 동일합니다.FmgrInfo그 자체. 그러나 핸들러는 또한 캐시할 수 있도록 수명이 더 긴 메모리 컨텍스트를 사용하도록 선택합니다. 쿼리 전반에 걸쳐 함수 정의 정보를 제공합니다.
절차적 언어 함수가 트리거로 호출되면, 인수는 일반적인 방식으로 전달되지만,FunctionCallInfoData's컨텍스트필드 포인트 a트리거데이터구조라기보다는NULL일반 함수 호출과 같습니다. 에이 언어 처리기는 절차적 언어에 대한 메커니즘을 제공해야 합니다. 트리거 정보를 얻는 함수입니다.
이것은 절차적 언어 처리기를 위한 템플릿입니다. 씨:
#include "postgres.h"
#include "executor/spi.h"
#include "명령/trigger.h"
#include "fmgr.h"
#include "access/heapam.h"
#include "utils/syscache.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_type.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
PG_FUNCTION_INFO_V1(plsample_call_handler);
데이텀
plsample_call_handler(PG_FUNCTION_ARGS)
데이텀 복구;
if (CALLED_AS_TRIGGER(fcinfo))
/*
* 트리거 프로시저로 호출됨
*/
TriggerData *trigdata = (TriggerData *) fcinfo-context;
회수 = ...
그렇지 않으면
/*
* 함수로 호출됨
*/
회수 = ...
반환 회수;
대신 몇 천 줄의 코드만 추가하면 됩니다. 통화 스포츠 토토 결과를 완성하려면 점을 클릭하세요.
스포츠 토토 결과 함수를 로드 가능한 파일로 컴파일한 후 모듈(참조섹션 35.9.6), 다음 명령을 따른 다음 샘플 절차를 등록하세요. 언어:
함수 생성 plsample_call_handler() 반환 Language_handler
그대로 '파일 이름'
언어 C;
언어 만들기 plsample
스포츠 토토 결과 plsample_call_handler;
호출 스포츠 토토 결과를 제공하는 것만으로도 최소한의 절차적 언어에는 다음과 같은 두 가지 다른 기능이 있습니다. 언어를 더욱 편리하게 사용할 수 있도록 선택적으로 제공됩니다. 이것들은검증기그리고인라인 스포츠 토토 결과. 검증인은 다음에 제공될 수 있습니다. 동안 언어별 검사를 수행하도록 허용합니다.함수 생성. 인라인 스포츠 토토 결과 언어가 익명 코드를 지원할 수 있도록 제공될 수 있습니다. 블록은를 통해 실행됩니다.스포츠 토토 결과 : 문서 : 9.3 : do명령.
검사기가 절차적 언어로 제공되는 경우 다음과 같아야 합니다.
유형의 단일 매개변수를 취하는 함수로 선언됨oid. 유효성 검사기의 결과는 무시되므로
관례적으로 반환을 선언함무효. 는
유효성 검사기는 a가 끝날 때 호출됩니다.만들기
기능함수를 생성하거나 업데이트한 명령
절차적 언어로 작성되었습니다. 전달된 OID는 다음의 OID입니다.
함수의pg_proc행. 는
유효성 검사기는 일반적인 방법으로 이 행을 가져와야 하며 무엇이든 수행해야 합니다.
확인하는 것이 적절합니다. 먼저 전화하세요.CheckFunctionValidatorAccess()진단하다
사용자가 달성할 수 없는 유효성 검사기에 대한 명시적 호출
통해함수 생성. 일반적인 점검
그런 다음 함수의 인수와 결과를 확인하는 것을 포함합니다.
유형은 언어에서 지원되며 함수의 본문은
언어의 구문상 정확합니다. 검증인이 발견한 경우
함수가 괜찮으려면 그냥 반환되어야 합니다. 그것이 발견되면
오류가 발생하면 일반을 통해 이를 보고해야 합니다.ereport()오류 보고 메커니즘. 던지기
오류가 발생하면 트랜잭션 롤백이 강제로 발생하여
잘못된 함수 정의가 커밋되지 않습니다.
유효성 검사기 함수는 일반적으로 다음을 존중해야 합니다.check_function_bodies매개변수: 꺼져 있으면 비용이 많이 들거나 상황에 맞는 검사를 건너뛰어야 합니다. 언어라면 컴파일 시간에 코드 실행을 제공하면 유효성 검사기는 다음을 수행해야 합니다. 그러한 실행을 유도하는 검사를 억제합니다. 특히, 이 매개변수는 다음에 의해 꺼집니다.pg_dump절차를 로드할 수 있도록 부작용 걱정 없이 언어 기능을 다른 데이터베이스 개체에 대한 함수 본문의 종속성. (이 요구사항으로 인해 호출 처리기는 다음을 피해야 합니다. 유효성 검사기가 기능을 완전히 확인했다고 가정합니다. 는 유효성 검사기를 갖는 요점은 호출 처리기가 생략하도록 허용하지 않는 것입니다. 확인하고 있으나, 명백한 사실이 있는 경우에는 즉시 이용자에게 통보합니다. a의 오류함수 생성명령.) 정확히 무엇을 확인할지 선택하는 것은 대부분 사용자에게 달려 있습니다. 유효성 검사기 기능의 재량에 따라 핵심을 참고하세요.함수 생성코드는 실행만 수행됩니다.SET다음 경우에 함수에 연결된 절check_function_bodies켜져 있습니다. 따라서 누구인지 확인하십시오. 결과는 GUC 매개변수의 영향을 받을 수 있습니다. 다음 경우에 건너뛰었습니다.check_function_bodies꺼짐, 덤프를 다시 로드할 때 잘못된 실패를 방지합니다.
인라인 스포츠 토토 결과가 절차적 언어에 의해 제공되는 경우, 유형의 단일 매개변수를 취하는 함수로 선언되어야 합니다.내부. 인라인 처리기의 결과는 다음과 같습니다. 무시되므로 관례적으로 반환하도록 선언됩니다.무효. 인라인 스포츠 토토 결과는 다음과 같은 경우 호출됩니다.DO문이 실행되어 다음을 지정합니다. 절차적 언어. 실제로 전달된 매개변수는 다음을 가리키는 포인터입니다. anInlineCodeBlock구조체, 이는 에 대한 정보가 포함되어 있습니다.DO문의 매개변수, 특히 익명의 텍스트 실행될 코드 블록. 인라인 스포츠 토토 결과는 이것을 실행해야 합니다. 코드를 입력하고 반환합니다.
이러한 모든 함수 선언을 래핑하는 것이 좋습니다. 뿐만 아니라언어 생성명령 그 자체로,확장그래서 간단합니다확장 프로그램 만들기명령으로 충분합니다. 언어를 설치하세요. 참조PostgreSQL : 문서 : 9.3 : 관련 객체를 롤 토토자로 포장확장 프로그램 작성에 대한 정보.
표준 배포판에 포함된 절차적 언어 자신만의 언어 처리기를 작성하려고 할 때 좋은 참고 자료입니다. 다음을 살펴보세요.src/pl하위 디렉토리 소스 트리.PostgreSQL : 문서 : 9.3 : 스포츠 토토 생성참조 페이지에도 유용한 세부정보가 있습니다.
| 이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
| 프로그래머를 위한 | 위로 | 외부 데이터 쓰기 래퍼 |