이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 토토 사이트 추천 생성버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

배트맨 토토 생성

이름

배트맨 토토 생성-새 집계 함수 정의

시놉시스

배트맨 토토 생성이름([argmode] [argname ] arg_data_type[, ...]) (sfunc,state_data_type[, sspace =state_data_size]ffunc]Initial_Condition]msfunc]minvfunc]mstate_data_type]mstate_data_size]mffunc]minitial_condition]Sort_Operator]이름([[argmode] [argname ] arg_data_type[, ...]]argmode] [argname ] arg_data_type[, ...]) (sfunc,state_data_type[, sspace =state_data_size]ffunc]Initial_Condition]또는 기존 구문배트맨 토토 생성이름(base_type,sfunc,state_data_type[, sspace =state_data_size]ffunc]Initial_Condition]msfunc]minvfunc]mstate_data_type]mstate_data_size]mffunc]minitial_condition]Sort_Operator]

설명

배트맨 토토 생성새로운 배트맨 토토 함수를 정의합니다. 일부 기본적이고 일반적으로 사용되는 배트맨 토토 함수는 분포에 포함됩니다.PostgreSQL : 문서 : 9.4 : 젠 토토 함수. 새 유형을 정의하거나 아직 제공되지 않은 배트맨 토토 함수가 필요한 경우배트맨 토토 생성원하는 기능을 제공하는 데 사용할 수 있습니다.

스키마 이름이 제공되는 경우 (예 :배트맨 토토 생성 myschema.myagg ...) 그러면 집계 함수가 지정된 스키마에서 생성됩니다. 그렇지 않으면 현재 스키마에서 생성됩니다.

집계 함수는 이름 및 입력 데이터 유형으로 식별됩니다. 동일한 스키마의 두 집계는 다른 입력 유형에서 작동하는 경우 동일한 이름을 가질 수 있습니다.함수 만들기).

간단한 배트맨 토토 함수는 하나 또는 두 개의 일반 함수에서 만들어집니다 : 상태 전환 함수sfunc및 선택적 최종 계산 함수ffunc. 이들은 다음과 같이 사용됩니다.

sfunc(내부 상태, 차세대-값) ---> 다음 내부 상태ffunc(내부 상태) ---> 배트맨 토토 값

PostgreSQL데이터 유형의 임시 변수 생성Stype집계의 현재 내부 상태를 유지합니다. 각 입력 행에서, 집계 인수 값 (들)이 계산되고 상태 전환 함수는 현재 상태 값과 새로운 인수 값으로 호출되어 새로운 내부 상태 값을 계산합니다.

배트맨 토토 함수는 초기 조건, 즉 내부 상태 값의 초기 값을 제공 할 수 있습니다. 이것은 데이터베이스에 유형 값으로 지정되고 저장됩니다텍스트, 그러나 상태 값 데이터 유형의 상수를 유효한 외부 표현이어야합니다. 공급되지 않으면 상태 가치가 널에서 시작됩니다.

상태 전환 함수가 선언 된 경우"엄격한", 널 입력으로 호출 할 수 없습니다. 이러한 전환 기능을 사용하면 집계 실행이 다음과 같이 동작합니다.max. 이 동작은에만 사용할 수 있습니다.state_data_type첫 번째와 동일합니다arg_data_type. 이러한 유형이 다르면 초기 조건이 아닌 초기 조건을 제공하거나 NAMPLEST 전환 기능을 사용해야합니다.

상태 전환 함수가 엄격하지 않으면 각 입력 행에서 무조건적으로 호출되며 그 자체로 널 입력 및 널 상태 값을 처리해야합니다. 이를 통해 골재 저자는 배트맨 토토의 널 값 처리를 완전히 제어 할 수 있습니다.

최종 함수가 선언 된 경우"엄격한", 결말 상태 값이 null 일 때 호출되지 않습니다. 대신 널 결과가 자동으로 반환됩니다.avg입력 행이 0 인 것을 볼 때 NULL을 반환합니다.

때로는 최종 기능을 상태 값뿐만 아니라 배트맨 토토의 입력 값에 해당하는 추가 매개 변수를 취하는 것으로 선언하는 것이 유용합니다. 이를 수행하는 주된 이유는 최종 기능이 다형성이고 상태 값의 데이터 유형이 결과 유형을 고정하기에 부적절한 경우입니다.FinalFunc_extra옵션이 사용됨) 그러나 그럼에도 불구하고 유효한 매개 변수입니다. 최종 기능은 예를 들어를 사용할 수 있습니다.get_fn_expr_argtype현재 통화에서 실제 인수 유형을 식별하려면.

집계가 선택적으로 지원할 수 있습니다이동 모드, 설명대로섹션 35.10.1. 이를 위해서는 지정해야합니다.msfunc, minvfuncmstype매개 변수 및 선택적으로MSSPACE, mfinalfunc, mfinalfunc_extraMinitcond매개 변수. 을 제외하고minvfunc,이 매개 변수는 해당 단순 응집 매개 변수와 같이 작동합니다M; 역 전이 함수를 포함하는 배트맨 토토의 별도의 구현을 정의합니다.

구문주문 by매개 변수 목록에 an이라는 특수 유형의 배트맨 토토를 만듭니다.주문 세트 배트맨 토토; 또는 if가상지정된 다음 A가상 세트 집계생성되었습니다. 이러한 배트맨 토토는 정렬 된 값의 그룹에 걸쳐 순서 의존적 방식으로 작동하므로 입력 정렬 순서의 사양은 통화의 필수 부분입니다.Direct인수는 입력 행 당 한 번이 아닌 집계 당 한 번만 평가되는 인수입니다. 가상 세트 골재는 순서대로 인수 열의 숫자 및 데이터 유형에 맞는 직접 인수 중 일부가 필요한 순서 세트 집계의 서브 클래스입니다."가상"행.

좋아하는 배트맨 토토Min또는max모든 입력 행을 스캔하는 대신 인덱스를 살펴보면 때때로 최적화 할 수 있습니다. 이 배트맨 토토가 그렇게 최적화 될 수 있다면 A를 지정하여 표시하십시오.정렬 연산자. 기본 요구 사항은 배트맨 토토가 연산자가 유도 한 정렬 순서에서 첫 번째 요소를 산출해야한다는 것입니다.

탭에서 agg (col)를 선택하십시오.

:와 동일해야합니다.

COL에서 COL에서 COL을 선택하여 Sortop Limit 1;

추가 가정은 배트맨 토토가 널 입력을 무시하고 널 입력이없는 경우에만 널 결과를 전달한다는 것입니다. 일반적으로 데이터 유형<연산자는 적절한 정렬 연산자입니다Min|max. 지정된 연산자가가 아니라면 최적화는 실제로 적용되지 않습니다.""보다 작습니다.또는""보다 크다B-Tree Index Operator Class의 전략 멤버.

배트맨 토토 함수를 만들 수 있으려면usage인수 유형, 상태 유형 및 반환 유형에 대한 권한 및execute전환 및 최종 기능에 대한 특권.

매개 변수

이름

생성 할 집계 함수의 이름 (선택적으로 스키마 자격).

argmode

인수의 모드 :in또는variadic. (집계 함수는 지원하지 않습니다out인수.) 생략하면 기본값은입니다.in. 마지막 인수 만 표시 될 수 있습니다variadic.

argname

인수의 이름. 이것은 현재 문서화 목적에만 유용합니다.

arg_data_type

이 배트맨 토토 기능이 작동하는 입력 데이터 유형. 제로 학습 배트맨 토토 함수를 만들려면 쓰기*인수 사양 목록 대신. (그러한 배트맨 토토의 예는count (*).)

base_type

기존 구문에서배트맨 토토 생성, 입력 데이터 유형은 a에 의해 지정됩니다.BaseType집계 이름 옆에 쓰여지지 않고 매개 변수. 이 구문은 하나의 입력 매개 변수 만 허용합니다.BaseTypeas"Any"(아님*). 주문 세트 배트맨 토토는 이전 구문으로 정의 할 수 없습니다.

sfunc

각 입력 행에 대해 호출되는 상태 전환 함수의 이름. 정상N-관례 배트맨 토토 함수,sfunc가져 가야N+1 인수, 첫 번째 유형 존재state_data_type및 나머지는 배트맨 토토의 선언 된 입력 데이터 유형과 일치합니다. 함수는 유형 값을 반환해야합니다state_data_type. 이 함수는 현재 상태 값과 현재 입력 데이터 값을 취하고 다음 상태 값을 반환합니다.

순서 세트 (가상 세트 포함) 응집체의 경우, 상태 전환 기능은 직접적인 인수가 아니라 현재 상태 값과 집계 된 인수 만받습니다. 그렇지 않으면 동일합니다.

state_data_type

배트맨 토토 상태 값의 데이터 유형.

state_data_size

집계 상태 값의 대략적인 평균 크기 (바이트). 이 매개 변수가 생략되었거나 0 인 경우 기본 추정치는에 따라 사용됩니다.state_data_type. 플래너는이 값을 사용하여 그룹화 된 배트맨 토토 쿼리에 필요한 메모리를 추정합니다.work_mem; 따라서이 매개 변수의 큰 값은 해시 집계의 사용을 방해합니다.

ffunc

모든 입력 행이 통과 한 후 집계 결과를 계산하기 위해 호출 된 최종 함수의 이름. 정상 집계의 경우이 기능은 유형의 단일 인수를 취해야합니다state_data_type. 배트맨 토토의 반환 데이터 유형은이 함수의 리턴 유형으로 정의됩니다.ffunc지정되지 않으면 결말 상태 값이 배트맨 토토 결과로 사용되며 리턴 유형은입니다.state_data_type.

순서 세트 (가상 세트 포함) 응집체의 경우 최종 기능은 최종 상태 값뿐만 아니라 모든 직접 인수의 값도받습니다..

ifFinalFunc_extra가 지정된 다음 최종 상태 값 및 직접 인수 외에도 최종 함수는 집계의 일반 (집계 된) 인수에 해당하는 추가 널 값을받습니다. 이것은 다형성 집계가 정의 될 때 집계 결과 유형의 올바른 해상도를 허용하는 데 주로 유용합니다.

Initial_Condition

상태 값의 초기 설정. 이것은 데이터 유형에 허용되는 양식의 문자열 상수 여야합니다state_data_type. 지정되지 않으면 상태 값이 NULL에서 시작합니다.

msfunc

이동 응집 모드에서 각 입력 행에 대해 호출되는 전방 상태 전환 함수의 이름. 이것은 첫 번째 인수와 결과가 유형이라는 점을 제외하고는 일반 전환 기능과 똑같습니다.mstate_data_type,state_data_type.

minvfunc

이동 응집 모드에서 사용되는 역 상태 전이 함수의 이름. 이 함수는 동일한 인수와 결과 유형이와 동일합니다.msfunc이지만 값을 추가하는 대신 현재 집계 상태에서 값을 제거하는 데 사용됩니다. 역 전이 함수는 전방 상태 전환 함수와 동일한 엄격성 속성을 가져야합니다.

mstate_data_type

이동 응집 모드를 사용할 때 배트맨 토토 상태 값의 데이터 유형.

mstate_data_size

이동 응집 모드를 사용할 때 집계 상태 값의 대략적인 평균 크기 (바이트). 이것은와 동일하게 작동합니다.state_data_size.

mffunc

이동 응집 모드를 사용할 때 모든 입력 행이 가로 지친 후 집계 결과를 계산하기 위해 호출 된 최종 함수의 이름. 이것은와 동일하게 작동합니다.ffunc, 첫 번째 인수 유형이임을 제외하고는mstate_data_type및 추가 더미 인수는 쓰기로 지정됩니다mfinalfunc_extra. 에 의해 결정된 배트맨 토토 결과 유형mffunc또는mstate_data_type배트맨 토토의 정기 구현에 의해 결정된 것과 일치해야합니다.

minitial_condition

이동 응집 모드를 사용할 때 상태 값의 초기 설정. 이것은와 동일하게 작동합니다.Initial_Condition.

Sort_Operator

a 관련 정렬 연산자Min- 또는max-같은 집계. 이것은 단지 연산자 이름입니다 (아마도 스키마 자격이있을 수 있음).

가상

순서 세트 집계에 대해서만,이 플래그는 집계 인수가 가상 세트 응집체에 대한 요구 사항에 따라 처리되어야 함을 지정합니다. 즉, 마지막 몇 가지 직접 인수는 집계 된 데이터 유형과 일치해야합니다 (.그룹 내) 인수. 그만큼가상플래그는 런타임 동작에 영향을 미치지 않으며, 데이터 유형의 구문 분석 시간 해결 및 집계 인수의 콜로레이션에만 영향을 미치지 않습니다.

의 매개 변수배트맨 토토 생성위의 순서뿐만 아니라 어떤 순서로든 작성할 수 있습니다.

노트

지원 함수 이름을 지정하는 매개 변수에서 필요한 경우 스키마 이름을 쓸 수 있습니다 (예 :sfunc = public.sum. 그러나 인수 유형을 작성하지 마십시오. 지원 기능의 인수 유형은 다른 매개 변수에서 결정됩니다.

집계가 이동 응집 모드를 지원하면 골재가 움직이는 프레임 시작이있는 창의 창 함수로 사용되면 계산 효율을 향상시킵니다 (즉, 프레임 시작 모드는미리 알려지지 않은). 개념적으로, 순방향 전환 함수는 하단에서 창 프레임을 입력 할 때 입력 값을 집계 상태에 추가하고, 역 전이 함수는 프레임을 상단에두면 다시 제거합니다.

이동 응집 모드의 순방향 전환 함수는 새로운 상태 값으로 NULL을 반환 할 수 없습니다. 역 전이 함수가 NULL을 반환하면 역 함수 가이 특정 입력에 대한 상태 계산을 역전시킬 수 없다는 표시로 간주되므로 총 계산은 현재 프레임 시작 위치에 대해 처음부터 다시 작성됩니다.

이동 응집 구현이 제공되지 않으면 배트맨 토토는 여전히 움직이는 프레임과 함께 사용할 수 있지만PostgreSQL프레임의 시작이 움직일 때마다 전체 집계를 재조정합니다. 집계가 이동 응집 모드를 지원하는지 여부에 유의하십시오.PostgreSQL재 계산없이 움직이는 프레임 끝을 처리 할 수 ​​있습니다. 이것은 배트맨 토토 상태에 새로운 값을 계속 추가하여 수행됩니다.

순서 세트 골재의 구문은 허용variadic마지막 직접 매개 변수와 마지막 집계 된 ( 모두에 대해 지정됩니다.그룹 내) 매개 변수. 그러나 현재 구현은의 사용을 제한합니다.variadic두 가지 방법으로. 첫째, 순서 세트 배트맨 토토는 만 사용할 수 있습니다Variadic "Any", 다른 변수 배열 유형이 아닙니다. 둘째, 마지막 직접 매개 변수가 인 경우Variadic "Any", 그러면 집계 된 매개 변수가 하나만있을 수 있으며Variadic "Any". (시스템 카탈로그에 사용 된 표현 에서이 두 매개 변수는 단일로 병합됩니다Variadic "Any"이후PG_PROC하나 이상의 함수를 나타내지 않을 수 있습니다variadic매개 변수.) 집계가 가상 세트 집계 인 경우와 일치하는 직접 인수Variadic "Any"매개 변수는 가상의 것입니다. 앞의 모든 매개 변수는 집계 된 인수와 일치하도록 제한되지 않은 추가 직접 인수를 나타냅니다.

현재 주문 세트 배트맨 토토는 창 함수로 사용할 수 없으므로 이동 응집 모드를 지원할 필요가 없습니다.

참조섹션 35.10.

호환성

배트맨 토토 생성isPostgreSQL언어 확장. SQL 표준은 사용자 정의 배트맨 토토 함수를 제공하지 않습니다.