이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다범퍼카 토토 PostgreSQL : 문서 : 17 : 36.12. 사용자 정의 골재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

32.10. 사용자 정의 젠 토토

젠 토토 함수PostgreSQL상태 값and상태 전환 기능. 즉, 골재는 정의 될 수 있습니다 입력 항목이있을 때마다 수정 된 상태 약관 가공. 새로운 젠 토토 함수를 정의하려면 데이터를 선택합니다. 상태 값에 대한 유형, 상태의 초기 값 및 상태 전환 기능. 상태 전환 기능은 정당합니다 컨텍스트 외부에서도 사용할 수있는 일반 기능 집계의. 에이최종 기능can 또한 젠 토토의 원하는 결과가 실행 중에 유지 해야하는 데이터와 다릅니다. 상태 가치.

따라서 보이는 인수 및 결과 데이터 유형 외에 젠 토토 사용자가 내부 상태 가치 데이터가 있습니다. 인수와 결과와 다를 수있는 유형 유형.

최종 함수를 사용하지 않는 젠 토토를 정의하면 우리는 각 행에서 열 값.Sumis 이런 종류의 젠 토토의 예.Sum0에서 시작하여 항상 전류를 추가합니다 Row의 가치가 달리는 총계. 예를 들어, 우리가 만들고 싶다면 에이Sum데이터 작업을위한 집계 복소수에 대한 유형, 추가 기능 만 필요합니다. 해당 데이터 유형. 집계 정의는 다음과 같습니다.

젠 토토 complex_sum 만들기 (
    sfunc = complex_add,
    BaseType = Complex,
    stype = complex,
    initcond = '(0,0)'
);

test_complex에서 complex_sum (a)을 선택하십시오.

 complex_sum
-------------
 (34,53.9)

(실제로는 젠 토토의 이름을 지정합니다Sum그리고 의존PostgreSQL어떤 종류의 합계를 파악하려면 유형의 열에 적용하려면복잡한.)

위의 정의Sum의지 unnull이없는 경우 return zero (초기 상태 조건) 입력 값. 아마도 우리는 그 경우에 null을 반환하고 싶을 것입니다. - SQL 표준이 기대SumTO 그렇게 행동하십시오. 우리는 단순히를 생략하여 이것을 할 수 있습니다.initcond최초 상태가되도록 문구 상태는 무일합니다. 일반적으로 이것은sfuncNULL을 확인해야합니다 상태 조건 입력이지만Sum|maxandMin, It 첫 번째 Nonnull 입력 값을 상태 변수를 다음에 전환 기능을 적용하기 시작합니다. 두 번째 비 연소 입력 값.PostgreSQL초기 조건은 널이고 전환 함수가 표시됩니다"엄격한"(즉, 요청되지 않아야합니다 널 입력).

A에 대한 또 다른 기본 동작"엄격한"전이 함수는 이전입니다 널 입력 값이있을 때마다 상태 값이 변경되지 않습니다. 만난. 따라서 널 값은 무시됩니다. 필요하다면 널 입력에 대한 다른 동작은 전환 기능은 엄격한 기능으로 기능하고 NULL을 테스트하도록 코딩합니다. 입력하고 필요한 모든 것을하십시오.

avg(평균)는 더 복잡합니다 젠 토토의 예. 두 개의 러닝 상태가 필요합니다. 입력의 합 및 입력 수의 수. 그만큼 최종 결과는 이러한 수량을 나누어 얻습니다. 평균입니다 일반적으로 2 요소 배열을 상태로 사용하여 구현 값. 예를 들어, 내장 구현avg (float8)모양 :

집계 AVG 만들기 (
    sfunc = float8_accum,
    BaseType = float8,
    stype = float8 [],
    finalfunc = float8_avg,
    initcond = '0,0'
);

젠 토토 함수는 다형성 상태 전이를 사용할 수 있습니다 동일한 함수가 될 수 있도록 함수 또는 최종 기능 여러 골재를 구현하는 데 사용됩니다. 보다섹션 32.2.5다형성 기능에 대한 설명. a 한 단계 더 나아가서, 골재 기능 자체는 다형성 기본 유형 및 상태 유형, 단일을 허용합니다. 다중 입력 데이터 유형에 대한 서비스 정의. 여기 다형성 젠 토토의 예입니다.

젠 토토 생성 array_accum (
    sfunc = array_append,
    BaseType = Anylement,
    stype = anyArray,
    initcond = ''
);

여기서는 집계 호출의 실제 상태 유형은 다음과 같습니다. 실제 입력 유형을 요소로하는 배열 유형.

다음은 다음과 같은 두 가지 실제 데이터 유형을 사용하는 출력입니다. 인수 :

attrelid :: regclass, array_accum (attname)
    pg_attribute에서
    여기서 attnum 0 및 attrelid = 'pg_tablespace':: regclass
    Attrelid에 의한 그룹;

   attrelid |              Array_accum              
---------------+------------------------------------------------
 PG_TABLESPACE | spcname, spcowner, spclocation, spcacl

c로 작성된 함수는 그것이 다음과 같이 호출되고 있음을 감지 할 수 있습니다. 집계 전이 또는 최종 기능이 통과aggstate노드로 함수 호출"컨텍스트"예를 들어 에 의해

if (fcinfo- context && isa (fcinfo- context, aggstate))

이것을 확인하는 한 가지 이유는 사실 일 때 왼쪽이기 때문입니다. 입력은 임시 전환 값이어야하므로 새 사본을 할당하기보다는 안전하게 내내 수정됩니다. (이것은입니다.전용케이스 기능이 통과 회의를 수정하는 것이 안전한 경우 입력.) 참조int8inc ()예.

자세한 내용은 참조하십시오.젠 토토 생성명령.