젠 토토 : 문서 : 9.6 : 젠 토토 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.6 : 토토 방법 만들기 | 토토 사이트 순위 PostgreSQL : 문서 : 9.6 : SQL 명령 | PostgreSQL : 문서 : 9.6 : 토토 베이 생성 |
범퍼카 토토 생성이름([Argmode] [argname]arg_data_type[, ...]) (
sfunc =sfunc,
stype =state_data_type[, sspace =state_data_size]
[, finalfunc =ffunc]
[, finalfunc_extra]
[, combineFunc =CombineFunc]
[, serialfunc =SerialFunc]
[, deserialfunc =deserialfunc]
[, initcond =Initial_Condition]
[, msfunc =msfunc]
[, minvfunc =minvfunc]
[, mstype =mstate_data_type]
[, msspace =mstate_data_size]
[, mfinalfunc =mffunc]
[, mfinalfunc_extra]
[, minitcond =minitial_condition]
[, sortop =Sort_Operator]
[, Parallel = Safe | 제한 | 안전하지 않은]
))
범퍼카 토토 생성이름([[argmode] [argname]arg_data_type[, ...]]
[ 주문Argmode] [argname]arg_data_type[, ...]) (
sfunc =sfunc,
stype =state_data_type[, sspace =state_data_size]
[, finalfunc =ffunc]
[, finalfunc_extra]
[, initcond =Initial_Condition]
[, Parallel = Safe | 제한 | 안전하지 않은]
[, 가상]
)또는 기존 구문범퍼카 토토 생성이름(
BaseType =base_type,
sfunc =sfunc,
stype =state_data_type[, sspace =state_data_size]
[, finalfunc =ffunc]
[, finalfunc_extra]
[, combineFunc =CombineFunc]
[, serialfunc =SerialFunc]
[, deserialfunc =deserialfunc]
[, initcond =Initial_Condition]
[, msfunc =msfunc]
[, minvfunc =minvfunc]
[, mstype =MSTATE_DATA_TYPE]
[, msspace =MSTATE_DATA_SIZE]
[, mfinalfunc =mffunc]
[, mfinalfunc_extra]
[, minitcond =minitial_condition]
[, sortop =Sort_Operator]
)
범퍼카 토토 생성새로운 범퍼카 토토 함수를 정의합니다. 일부 기본적이고 일반적으로 사용되는 범퍼카 토토 함수는 분포에 포함됩니다. 그들은에 문서화되어 있습니다.PostgreSQL : 문서 : 9.6 : 와이즈 토토 함수. 새 유형을 정의하거나 아직 제공되지 않은 범퍼카 토토 함수가 필요한 경우범퍼카 토토 생성원하는 기능을 제공하는 데 사용할 수 있습니다.
스키마 이름이 제공되는 경우 (예 :범퍼카 토토 생성 myschema.myagg ...) 그러면 집계 함수가 지정된 스키마에서 생성됩니다. 그렇지 않으면 현재 스키마에서 생성됩니다.
집계 함수는 이름 및 입력 데이터 유형으로 식별됩니다. 동일한 스키마의 두 집계는 다른 입력 유형에서 작동하는 경우 동일한 이름을 가질 수 있습니다. 집계의 이름 및 입력 데이터 유형은 동일한 스키마의 모든 일반 기능의 이름 및 입력 데이터 유형과도 구별되어야합니다. 이 동작은 일반 기능 이름의 과부하와 동일합니다 (참조PostgreSQL : 문서 : 9.6 : 사설 토토 사이트 만들기).
15434_15536sfunc및 선택적 최종 계산 함수ffunc. 이들은 다음과 같이 사용됩니다.
sfunc(내부 상태, 차세대 값) --- 다음 내부 상태ffunc(내부 상태) --- 범퍼카 토토 값
PostgreSQL데이터 유형의 임시 변수 생성Stype집계의 현재 내부 상태를 유지합니다. 각 입력 행에서, 집계 인수 값 (들)이 계산되고 상태 전환 함수는 현재 상태 값과 새로운 인수 값으로 호출되어 새로운 내부 상태 값을 계산합니다. 모든 행이 처리 된 후에는 최종 기능이 한 번 호출되어 집계의 반환 값을 계산합니다. 최종 기능이 없으면 종료 상태 값이 as- as. 반환됩니다.
범퍼카 토토 함수는 초기 조건, 즉 내부 상태 값의 초기 값을 제공 할 수 있습니다. 이것은 데이터베이스에 유형 값으로 지정되고 저장됩니다텍스트, 그러나 상태 값 데이터 유형의 상수를 유효한 외부 표현이어야합니다. 공급되지 않으면 상태 가치가 널에서 시작됩니다.
상태 전환 함수가 선언 된 경우"엄격한", 널 입력으로 호출 할 수 없습니다. 이러한 전환 기능을 사용하면 집계 실행이 다음과 같이 동작합니다. 널 입력 값이있는 행은 무시됩니다 (함수는 호출되지 않고 이전 상태 값이 유지됨). 초기 상태 값이 NULL 인 경우 All-Nonnull 입력 값이있는 첫 번째 행에서 첫 번째 인수 값은 상태 값을 대체하고 각 후속 행에서 All-Nonnull 입력 값으로 전환 함수가 호출됩니다. 이것은와 같은 집계를 구현하는 데 편리합니다.max
. 이 동작은에만 사용할 수 있습니다.state_data_type첫 번째와 동일합니다arg_data_type. 이러한 유형이 다르면 초기 조건이 아닌 초기 조건을 제공하거나 NAMPLEST 전환 기능을 사용해야합니다.
상태 전환 함수가 엄격하지 않으면 각 입력 행에서 무조건적으로 호출되며 널 입력 및 널 상태 값 자체를 처리해야합니다. 이를 통해 골재 저자는 범퍼카 토토의 널 값 처리를 완전히 제어 할 수 있습니다.
최종 함수가 선언 된 경우"엄격한", 결말 상태 값이 null 일 때 호출되지 않습니다. 대신 널 결과가 자동으로 반환됩니다. (물론 이것은 엄격한 함수의 정상적인 동작 일뿐입니다.) 어쨌든 최종 함수는 널 값을 반환 할 수있는 옵션이 있습니다. 예를 들어,의 최종 기능avg
입력 행이 0 인 것을 볼 때 NULL을 반환합니다.
때로는 상태 값뿐만 아니라 범퍼카 토토의 입력 값에 해당하는 추가 매개 변수를 취하는 것으로 최종 기능을 선언하는 것이 유용합니다. 이를 수행하는 주된 이유는 최종 기능이 다형성이고 상태 값의 데이터 유형이 결과 유형을 고정하기에 부적절한 경우입니다. 이 추가 매개 변수는 항상 널로 전달됩니다 (따라서 최종 기능이이 엄격하지 않아야합니다.FinalFunc_extra옵션이 사용됩니다) 그러나 그럼에도 불구하고 유효한 매개 변수입니다. 최종 기능은 예를 들어를 사용할 수 있습니다.get_fn_expr_argtype
현재 통화에서 실제 인수 유형을 식별하려면.
집계가 선택적으로 지원할 수 있습니다이동 모드, 설명대로섹션 36.10.1. 이를 위해서는 지정해야합니다.msfunc, minvfunc및mstype19488_19522MSSPACE, mfinalfunc, mfinalfunc_extra및Minitcond매개 변수. 을 제외하고minvfunc,이 매개 변수는 해당 단순 응집 매개 변수없이처럼 작동합니다.M; 역 전이 함수를 포함하는 범퍼카 토토의 별도의 구현을 정의합니다.
구문주문 by매개 변수 목록에서 at이라는 특수 유형의 범퍼카 토토를 만듭니다.주문 세트 범퍼카 토토; 또는 if가상지정된 다음 A가상 세트 집계생성되었습니다. 이러한 범퍼카 토토는 정렬 된 값의 그룹에 걸쳐 순서 의존적 방식으로 작동하므로 입력 정렬 순서의 사양은 통화의 필수 부분입니다. 또한, 그들은 가질 수 있습니다Direct인수는 입력 행 당 한 번이 아닌 집계 당 한 번만 평가되는 인수입니다. 가상 세트 골재는 순서대로 인수 열의 숫자 및 데이터 유형에 맞는 직접 인수 중 일부가 필요한 순서 세트 집계의 서브 클래스입니다. 이를 통해 해당 직접 인수의 값은 추가로 집계 입력 행 모음에 추가 될 수 있습니다."가상"행.
집계가 선택적으로 지원할 수 있습니다부분 범퍼카 토토, 설명대로섹션 36.10.4. 이를 위해서는 지정해야합니다.CombineFunc매개 변수. 인 경우state_data_typeis내부, 일반적으로를 제공하는 것도 적절합니다SerialFunc및deserialfunc병렬 응집이 가능하도록 매개 변수. 골재도 표시되어야합니다Parallel Safe병렬 범퍼카 토토를 활성화하려면
좋아하는 범퍼카 토토Min
또는max
모든 입력 행을 스캔하는 대신 인덱스를 살펴보면 때때로 최적화 할 수 있습니다. 이 범퍼카 토토가 그렇게 최적화 될 수 있다면 A를 지정하여 표시하십시오.정렬 연산자. 기본 요구 사항은 범퍼카 토토가 연산자가 유도 한 정렬 순서에서 첫 번째 요소를 산출해야한다는 것입니다. 다시 말해서:
탭에서 Agg (col)를 선택하십시오.
:와 동일해야합니다.
COL에서 COL에서 COL을 선택하여 COL Sortop Limit 1;
추가 가정은 범퍼카 토토가 널 입력을 무시하고 널 입력이없는 경우에만 널 결과를 전달한다는 것입니다. 일반적으로 데이터 유형<연산자는 적절한 정렬 연산자입니다Min
및적절한 정렬 연산자입니다max
. 지정된 연산자가가 아니라면 최적화는 실제로 적용되지 않습니다.""보다 작습니다.또는""보다 큰 "B-Tree Index Operator Class의 전략 멤버.
범퍼카 토토 함수를 만들 수 있으려면usage인수 유형, 상태 유형 및 반환 유형에 대한 권한 및execute지원 기능에 대한 특권.
생성 할 범퍼카 토토 함수의 이름 (선택적으로 스키마 자격).
인수의 모드 :in또는variadic. (집계 함수는 지원하지 않습니다out인수.) 생략하면 기본값은입니다.in. 마지막 인수 만 표시 될 수 있습니다variadic.
인수의 이름. 이것은 현재 문서화 목적에만 유용합니다. 생략하면 인수의 이름이 없습니다.
이 범퍼카 토토 기능이 작동하는 입력 데이터 유형. 제로 학습 범퍼카 토토 함수를 만들려면 쓰기*인수 사양 목록 대신. (그러한 범퍼카 토토의 예는count (*)
.)
Old Syntax for에서범퍼카 토토 생성, 입력 데이터 유형은 a에 의해 지정됩니다.BaseType집계 이름 옆에 쓰여지지 않고 매개 변수입니다. 이 구문은 하나의 입력 매개 변수 만 허용합니다. 이 구문으로 제로 관점 집계 함수를 정의하려면를 지정하십시오.BaseTypeas"Any"(아님*). 주문 세트 범퍼카 토토는 이전 구문으로 정의 할 수 없습니다.
각 입력 행에 대해 호출되는 상태 전환 함수의 이름. 정상n-관례 범퍼카 토토 함수,sfunc가져 가야합니다n+1 인수, 첫 번째 유형의 존재state_data_type그리고 범퍼카 토토의 선언 된 입력 데이터 유형과 일치하는 나머지. 함수는 유형 값을 반환해야합니다state_data_type. 이 함수는 현재 상태 값과 현재 입력 데이터 값을 취하고 다음 상태 값을 반환합니다.
순서 세트 (가상 세트 포함) 집계의 경우, 상태 전이 함수는 직접적인 인수가 아니라 현재 상태 값과 집계 된 인수 만받습니다. 그렇지 않으면 동일합니다.
범퍼카 토토 상태 값의 데이터 유형.
집계 상태 값의 대략 평균 크기 (바이트). 이 매개 변수가 생략되었거나 0 인 경우 기본 추정치는에 따라 사용됩니다.state_data_type. 플래너는이 값을 사용하여 그룹화 된 범퍼카 토토 쿼리에 필요한 메모리를 추정합니다. 플래너는 해시 테이블이 적합한 것으로 추정되는 경우에만 해당 쿼리에 해시 범퍼카 토토를 사용하는 것을 고려합니다.work_mem; 따라서이 매개 변수의 큰 값은 해시 집계의 사용을 방해합니다.
모든 입력 행이 통과 한 후 집계 결과를 계산하기 위해 호출 된 최종 함수의 이름. 정상 집계의 경우이 기능은 유형의 단일 인수를 취해야합니다state_data_type. 범퍼카 토토의 반환 데이터 유형은이 함수의 리턴 유형으로 정의됩니다. 만약에ffunc지정되지 않으면 종료 상태 값이 범퍼카 토토 결과로 사용되며 리턴 유형은입니다.state_data_type.
순서 세트 (가상 세트 포함) 응집체의 경우 최종 기능은 최종 상태 값뿐만 아니라 모든 직접 인수의 값도받습니다..
ifFinalFunc_extra가 지정된 다음 최종 상태 값 및 직접 인수 외에도 최종 함수는 집계의 일반 (집계 된) 인수에 해당하는 추가 널 값을받습니다. 이것은 다형성 집계가 정의 될 때 집계 결과 유형의 올바른 해상도를 허용하는 데 주로 유용합니다.
theCombineFunc함수는 부분 범퍼카 토토를지지하도록 선택적으로 지정 될 수 있습니다. 제공된 경우CombineFunc두 가지를 결합해야합니다state_data_type값, 각각 입력 값의 일부 하위 집합에 대한 범퍼카 토토 결과를 포함하여 새로운 생성state_data_type이것은 두 입력 세트를 범퍼카 토토 한 결과를 나타냅니다. 이 기능은로 생각할 수 있습니다.sfunc, 개별 입력 행에 작용하여 실행중인 범퍼카 토토 상태에 추가하는 대신 다른 범퍼카 토토 상태를 실행 상태에 추가합니다..
theCombineFuncstate_data_type그리고 값을 반환state_data_type. 선택적 으로이 함수는 일 수 있습니다."엄격한". 이 경우 입력 상태 중 하나가 NULL 일 때 함수는 호출되지 않습니다. 다른 상태는 올바른 결과로 간주됩니다.
범퍼카 토토 함수의 경우state_data_typeis내부, TheCombineFunc엄격하지 않아야합니다. 이 경우CombineFunc널 상태가 올바르게 처리되고 반환되는 상태가 집계 메모리 컨텍스트에 올바르게 저장되어 있는지 확인해야합니다.
범퍼카 토토 함수의state_data_typeis내부만있는 경우에만 병렬 범퍼카 토토에 참여할 수 있습니다SerialFunc함수, 범퍼카 토토 상태를 A로 직렬화해야합니다BYTEA다른 프로세스로의 전송 가치. 이 기능은 유형의 단일 인수를 취해야합니다내부및 리턴 유형BYTEA. 해당deserialfunc도 필요합니다.
이전에 직렬화 된 집계 상태를 다시 제외하고state_data_type. 이 기능은 유형의 두 가지 인수를 취해야합니다BYTEAand내부, 유형의 결과를 생성내부. (참고 : 두 번째,내부인수는 사용되지 않지만 유형 안전 이유에는 필요합니다.)
상태 값의 초기 설정. 이것은 데이터 유형에 허용되는 양식의 문자열 상수 여야합니다state_data_type. 지정되지 않으면 상태 값이 NULL에서 시작합니다.
이동 응집 모드에서 각 입력 행에 대해 호출되는 전방 상태 전환 함수의 이름. 이것은 첫 번째 인수와 결과가 유형이라는 점을 제외하고는 일반 전환 기능과 똑같습니다.MSTATE_DATA_TYPE,state_data_type.
이동 응집 모드에서 사용되는 역 상태 전이 함수의 이름. 이 함수는 동일한 인수와 결과 유형이와 동일합니다.msfunc이지만 값을 추가하는 대신 현재 집계 상태에서 값을 제거하는 데 사용됩니다. 역 전이 함수는 전방 상태 전환 함수와 동일한 엄격성 속성을 가져야합니다.
이동 응집 모드를 사용할 때 범퍼카 토토 상태 값의 데이터 유형.
이동 응집 모드를 사용할 때 집계 상태 값의 평균 크기 (바이트). 이것은와 동일하게 작동합니다.state_data_size.
움직이는 입력 모드를 사용할 때 모든 입력 행이 트래버스 된 후 집계 결과를 계산하기 위해 호출 된 최종 함수의 이름. 이것은와 동일하게 작동합니다.ffunc, 첫 번째 인수 유형이임을 제외하고mstate_data_type및 추가 더미 인수는 쓰기로 지정됩니다mfinalfunc_extra. 에 의해 결정된 범퍼카 토토 결과 유형mffunc또는MSTATE_DATA_TYPE범퍼카 토토의 정기 구현에 의해 결정된 것과 일치해야합니다.
이동 응집 모드를 사용할 때 상태 값의 초기 설정. 이것은와 동일하게 작동합니다.Initial_Condition.
a 관련 정렬 연산자Min
- 또는max
-같은 집계. 이것은 단지 연산자 이름입니다 (아마도 스키마 자격이있을 수 있음). 연산자는 집계와 동일한 입력 데이터 유형을 가지고 있다고 가정합니다 (단일 연계 정상 집계 여야합니다).
의 의미병렬 금고, 병렬 제한및병렬 불안한와 동일합니다PostgreSQL : 문서 : 9.6 : 사설 토토 사이트 만들기. 표시된 경우 병렬화를 위해 집계가 고려되지 않습니다병렬 불안한(기본값입니다!) 또는병렬 제한. 골재 지원 함수의 평행 안전 표시는 플래너가 문의하지 않고 집계 자체의 표시 만 참조합니다..
순서 세트 집계에 대해서만,이 플래그는 집계 인수가 가상 세트 응집체에 대한 요구 사항에 따라 처리되어야 함을 지정합니다. 즉, 마지막 몇 가지 직접 인수는 집계 된 데이터 유형과 일치해야합니다 (.그룹 내) 인수. 그만큼가상플래그는 런타임 동작에 영향을 미치지 않으며, 데이터 유형의 구문 분석 시간 해결 및 골재의 인수의 콜라이트에만 영향을 미치지 않습니다..
의 매개 변수범퍼카 토토 생성위에 표시된 순서뿐만 아니라 어떤 순서로든 작성할 수 있습니다.
지원 함수 이름을 지정하는 매개 변수에서 필요한 경우 스키마 이름을 쓸 수 있습니다 (예 :sfunc = public.sum. 그러나 인수 유형을 작성하지 마십시오. 지원 기능의 인수 유형은 다른 매개 변수에서 결정됩니다.
집계가 이동 응집 모드를 지원하면 골재가 움직이는 프레임 시작이있는 창의 창 함수로 사용되면 계산 효율을 향상시킵니다 (즉, 프레임 시작 모드는미리 알려지지 않은). 개념적으로, 순방향 전환 함수는 하단에서 창 프레임을 입력 할 때 입력 값을 집계 상태에 추가하고, 역 전이 함수는 프레임을 상단에두면 다시 제거합니다. 따라서 값이 제거되면 항상 추가 된 순서로 항상 제거됩니다. 역전 전이 함수가 호출 될 때마다 가장 빨리 추가되었지만 아직 제거되지 않은 인수 값이 수신됩니다. 역 전이 함수는 가장 오래된 행을 제거한 후 적어도 하나의 행이 현재 상태에 남아 있다고 가정 할 수 있습니다. (그렇지 않은 경우, 윈도우 함수 메커니즘은 역전 전이 함수를 사용하기보다는 단순히 새로운 집계를 시작합니다.)
이동 응집 모드의 순방향 전환 함수는 NULL을 새 상태 값으로 반환 할 수 없습니다. 역 전이 함수가 NULL을 반환하면 역 함수 가이 특정 입력에 대한 상태 계산을 역전시킬 수 없다는 표시로 간주되므로 총 계산은 현재 프레임 시작 위치에 대해 처음부터 다시 작성됩니다. 이 협약은 실행중인 상태 값을 뒤집어 놓는 데 실용적이지 않은 일부 드문 경우가있는 상황에서 이동 모드를 사용할 수 있습니다.
이동 응집 구현이 제공되지 않으면 범퍼카 토토는 여전히 움직이는 프레임과 함께 사용할 수 있지만PostgreSQL프레임의 시작이 움직일 때마다 전체 집계를 재조정합니다. 집계가 이동 응집 모드를 지원하는지 여부에 유의하십시오.PostgreSQL재 계산없이 움직이는 프레임 끝을 처리 할 수 있습니다. 이것은 범퍼카 토토 상태에 새로운 값을 계속 추가하여 수행됩니다. 최종 함수는 골재의 상태 값을 손상시키지 않기 때문에 한 세트의 프레임 경계에 대해 범퍼카 토토 결과 값이 얻어진 후에도 범퍼카 토토가 계속 될 수 있다고 가정합니다..
순서 세트 집계의 구문이 허용variadic마지막 직접 매개 변수와 마지막 집계 된 ( 모두에 대해 지정됩니다.그룹 내) 매개 변수. 그러나 현재 구현은의 사용을 제한합니다.variadic두 가지 방법으로. 첫째, 순서 세트 범퍼카 토토는 만 사용할 수 있습니다Variadic "Any", 다른 변수 배열 유형이 아닙니다. 둘째, 마지막 직접 매개 변수가 인 경우Variadic "Any", 그러면 집계 된 매개 변수가 하나만있을 수 있으며Variadic "Any". (시스템 카탈로그에 사용 된 표현 에서이 두 매개 변수는 단일로 병합됩니다Variadic "Any"이후PG_PROC하나 이상의 함수를 나타내지 않을 수 있습니다variadic매개 변수.) 집계가 가상 세트 집계 인 경우와 일치하는 직접 인수.Variadic "Any"매개 변수는 가상의 것입니다. 앞의 모든 매개 변수는 집계 된 인수와 일치하도록 제한되지 않은 추가 직접 인수를 나타냅니다.
현재 순서 세트 집계는 창 함수로 사용할 수 없으므로 이동 응집 모드를 지원할 필요가 없습니다..
부분적 (병렬 포함) 집계는 현재 순서 세트 집계에 대해 지원되지 않습니다. 또한 포함의 집계 통화에는 결코 사용되지 않습니다.별개의또는주문 by조항, 부분적 범퍼카 토토 중에 의미를 뒷받침 할 수 없기 때문에.