범퍼카 토토 함수포스트그레SQL다음으로 정의됩니다상태 값그리고상태 전환 함수. 즉, 집계는 각 연속 입력 행이 처리될 때 업데이트되는 상태 값을 사용하여 작동합니다. 새로운 범퍼카 토토 함수를 정의하려면 상태 값의 데이터 유형, 상태의 초기 값 및 상태 전이 함수를 선택합니다. 상태 전환 함수는 이전 상태 값과 현재 행에 대한 집계의 입력 값을 사용하고 새 상태 값을 반환합니다. 갑최종 기능또한 원하는 집계 결과가 실행 상태 값에 보관되어야 하는 데이터와 다른 경우에도 지정할 수 있습니다. 최종 함수는 종료 상태 값을 취하고 집계 결과로 원하는 것을 반환합니다. 원칙적으로 전환 및 최종 함수는 집계 컨텍스트 외부에서도 사용할 수 있는 일반 함수일 뿐입니다. (실제로는 집계의 일부로 호출될 때만 작동할 수 있는 특수한 전환 함수를 만드는 것이 성능상의 이유로 도움이 되는 경우가 많습니다.)
따라서 집계 사용자에게 표시되는 인수 및 결과 데이터 유형 외에도 인수 및 결과 유형과 다를 수 있는 내부 상태 값 데이터 유형이 있습니다.
최종 함수를 사용하지 않는 범퍼카 토토를 정의하는 경우 각 행의 열 값에 대한 실행 함수를 계산하는 범퍼카 토토가 있습니다.합계이러한 범퍼카 토토의 예입니다.합계0에서 시작하여 항상 현재 행의 값을 누계에 추가합니다. 예를 들어, 다음을 만들고 싶다면합복소수에 대한 데이터 유형에 대해 작업하려면 해당 데이터 유형에 대한 덧셈 함수만 필요합니다. 집계 정의는 다음과 같습니다.
CREATE AGGREGATE 합계(복합)
(
sfunc = complex_add,
유형 = 복합,
initcond = '(0,0)'
);
다음과 같이 사용할 수 있습니다:
test_complex에서 SELECT sum(a); 합계 ----------- (34,53.9)
(우리는 함수 오버로드에 의존하고 있습니다. 이름이 지정된 범퍼카 토토가 두 개 이상 있습니다.합계하지만포스트그레SQL어떤 종류의 합계가 유형의 열에 적용되는지 알아낼 수 있습니다.복잡한.)
위의 정의합계null이 아닌 입력 값이 없으면 0(초기 상태 값)을 반환합니다. 아마도 우리는 이 경우 대신 null을 반환하고 싶을 것입니다. SQL 표준에서는 다음과 같이 예상합니다.합그렇게 행동해요. 간단히를 생략하여 이 작업을 수행할 수 있습니다.initcond문구, 초기 상태 값이 null이 되도록 합니다. 일반적으로 이는 다음을 의미합니다.sfunc널 상태 값 입력을 확인해야 합니다. 하지만합계그리고 다음과 같은 다른 간단한 집계최대그리고분, null이 아닌 첫 번째 입력 값을 상태 변수에 삽입한 다음 null이 아닌 두 번째 입력 값에서 전환 함수 적용을 시작하면 충분합니다.PostgreSQL초기 상태 값이 null이고 전환 함수가 표시되면 자동으로 수행됩니다.“엄격”(즉, null 입력에 대해 호출되지 않음).
a에 대한 또 다른 기본 동작“엄격”전환 함수는 null 입력 값이 발생할 때마다 이전 상태 값이 변경되지 않고 유지된다는 것입니다. 따라서 null 값은 무시됩니다. null 입력에 대해 다른 동작이 필요한 경우 전환 함수를 엄격하게 선언하지 마세요. 대신 null 입력을 테스트하고 필요한 모든 작업을 수행하도록 코딩하세요.
평균(평균)은 집계의 더 복잡한 예입니다. 여기에는 입력 합계와 입력 개수의 두 가지 실행 상태가 필요합니다. 최종 결과는 이러한 수량을 나누어 얻습니다. 평균은 일반적으로 배열을 상태 값으로 사용하여 구현됩니다. 예를 들어, 다음의 내장 구현은평균(float8)다음과 같습니다:
총 평균 생성(float8)
(
sfunc = float8_accum,
유형 = float8[],
최종 기능 = float8_avg,
initcond = '0,0,0'
);
float8_accum에는 2개의 요소가 아닌 3개의 요소로 구성된 배열이 필요합니다. 왜냐하면 제곱합과 입력의 합 및 개수를 누적하기 때문입니다. 이는 다른 범퍼카 토토에도 사용할 수 있도록 하기 위한 것입니다.평균.
SQL의 범퍼카 토토 함수 호출 허용독특그리고주문 기준집계의 전환 함수에 어떤 행이 어떤 순서로 제공되는지 제어하는 옵션입니다. 이러한 옵션은 배후에서 구현되며 집합체의 지원 기능과 관련이 없습니다.
자세한 내용은 다음을 참조하세요.집합 생성명령.
범퍼카 토토 함수는 선택적으로 지원할 수 있음이동-범퍼카 토토 모드, 프레임 시작점이 이동하는 창 내에서 범퍼카 토토 함수를 훨씬 더 빠르게 실행할 수 있습니다. (참조4800 |6000 배트맨 토토0 |4800 |6000 배트맨 토토0 |6000 배트맨 토토0 |_4800 |6000 배트맨 토토0 |6000 배트맨 토토0 |4800 |500 배트맨 토토0 |4800 |6000 배트맨 토토0 |6000 배트맨 토토0 |4800 |4800 |500 배트맨 토토0 배트맨 토토0 배트맨 토토0 배트맨 토토그리고섹션 4.2.8범퍼카 토토 함수를 창 함수로 사용하는 방법에 대한 정보.) 기본 아이디어는 일반“앞으로”전환 함수, 집계는 다음을 제공합니다.역전이 함수- 창 프레임을 종료할 때 집계의 실행 상태 값에서 행을 제거할 수 있습니다. 예를 들어합18170_18648
역전이 함수에는 현재 상태 값과 현재 상태에 포함된 가장 이른 행의 집계 입력 값이 전달됩니다. 주어진 입력 행이 집계된 적이 없고 그 뒤에 오는 행만 집계된 경우 상태 값이 무엇이었을지 재구성해야 합니다. 이를 위해서는 때때로 순방향 전환 기능이 일반 집계 모드에 필요한 것보다 더 많은 상태를 유지해야 합니다. 따라서 이동 집계 모드는 일반 모드와 완전히 별개의 구현을 사용합니다. 자체 상태 데이터 유형, 자체 순방향 전환 기능 및 필요한 경우 자체 최종 기능이 있습니다. 추가 상태가 필요하지 않은 경우 일반 모드의 데이터 유형 및 기능과 동일할 수 있습니다.
예를 들어, 우리는 다음을 확장할 수 있습니다.합다음과 같은 이동 집계 모드를 지원하기 위해 위에 제공된 집계:
CREATE AGGREGATE 합계(복합)
(
sfunc = complex_add,
유형 = 복합,
initcond = '(0,0)',
msfunc = complex_add,
minvfunc = complex_sub,
mstype = 복합,
minitcond = '(0,0)'
);
이름이 다음으로 시작하는 매개변수m이동 집계 구현을 정의합니다. 역전이 함수 제외minvfunc, 이는가 없는 일반 범퍼카 토토 매개변수에 해당합니다.m.
이동 집계 모드의 순방향 전환 기능은 새 상태 값으로 null을 반환하는 것이 허용되지 않습니다. 역전이 함수가 null을 반환하는 경우 이는 역함수가 이 특정 입력에 대한 상태 계산을 되돌릴 수 없다는 표시로 간주되므로 현재 프레임 시작 위치에 대한 집계 계산이 처음부터 다시 실행됩니다. 이 규칙을 사용하면 실행 상태 값을 되돌릴 수 없는 드문 경우가 있는 상황에서 이동 집계 모드를 사용할 수 있습니다. 역전이 함수는 다음과 같습니다.“펀트”이러한 경우에 대해서는 대부분의 경우에 작동할 수 있는 한 여전히 앞서 나갈 수 있습니다. 예를 들어, 부동 소수점 숫자로 작업하는 집계는 다음과 같은 경우 펀트를 선택할 수 있습니다.NaN(숫자 아님) 입력이 실행 상태 값에서 제거되어야 합니다.
이동 집계 지원 함수를 작성할 때 역전이 함수가 올바른 상태 값을 정확하게 재구성할 수 있는지 확인하는 것이 중요합니다. 그렇지 않으면 이동 집계 모드 사용 여부에 따라 사용자가 볼 수 있는 결과의 차이가 있을 수 있습니다. 처음에는 역전이 함수를 추가하는 것이 쉬워 보이지만 이 요구 사항을 충족할 수 없는 집계의 예는 다음과 같습니다.합계이상float4또는float8입력. 순진한 선언합계(아마도float8)
집계 unsafe_sum 생성(float8)
(
유형 = float8,
sfunc = float8pl,
mstype = float8,
msfunc = float8pl,
minvfunc = float8mi
);
그러나 이 집계는 역전이 기능이 없을 때와는 완전히 다른 결과를 제공할 수 있습니다. 예를 들어 다음을 고려하세요.
선택
unsafe_sum(x) OVER (현재 행과 다음 1행 사이의 n 행 순서)
FROM(값(1, 1.0e20::float8),
(2, 1.0::float8)) AS v (n,x);
이 쿼리는 다음을 반환합니다.0다음의 예상 답변이 아닌 두 번째 결과로1. 원인은 부동 소수점 값의 정밀도가 제한되어 있기 때문입니다. 추가1에1e20결과는1e20다시, 그리고 빼기1e20그 결과0, 아님1. 이는 일반적으로 부동 소수점 연산의 제한 사항이지 다음의 제한 사항이 아닙니다.PostgreSQL.
범퍼카 토토 함수는 다형성 상태 전환 함수 또는 최종 함수를 사용할 수 있으므로 동일한 함수를 사용하여 여러 집계를 구현할 수 있습니다. 참조섹션 37.2.5다형성 함수에 대한 설명입니다. 한 단계 더 나아가 범퍼카 토토 함수 자체를 다형성 입력 유형 및 상태 유형으로 지정할 수 있으므로 단일 집계 정의가 여러 입력 데이터 유형에 제공될 수 있습니다. 다음은 다형성 집계의 예입니다.
CREATE AGGREGATE array_accum (모든 요소)
(
sfunc = array_append,
유형 = 모든 배열,
initcond = ''
);
여기서 주어진 집계 호출에 대한 실제 상태 유형은 실제 입력 유형을 요소로 갖는 배열 유형입니다. 집계의 동작은 모든 입력을 해당 유형의 배열로 연결하는 것입니다. (참고: 내장 집계array_agg이 정의보다 더 나은 성능으로 유사한 기능을 제공합니다.)
다음은 두 가지 서로 다른 실제 데이터 유형을 인수로 사용하는 출력입니다.
SELECT attrelid::regclass, array_accum(attname)
pg_attribute에서
attnum 0 AND attrelid = 'pg_tablespace'::regclass가 있는 곳
GROUP BY 아트렐리드;
아트렐리드 | array_accum
-------------+----------------------------
pg_테이블스페이스 | spcname,spcowner,spcacl,scpoptions
일반적으로 위의 예에서와 같이 다형성 결과 유형을 갖는 범퍼카 토토 함수는 다형성 상태 유형을 갖습니다. 그렇지 않으면 최종 함수를 현명하게 선언할 수 없기 때문에 이것이 필요합니다. 다형성 결과 유형은 있어야 하지만 다형성 인수 유형은 없어야 합니다.함수 생성호출에서 결과 유형을 추론할 수 없다는 이유로 거부합니다. 하지만 다형성 상태 유형을 사용하는 것이 불편할 때도 있습니다. 가장 일반적인 경우는 집계 지원 함수가 C로 작성되고 상태 유형이 다음과 같이 선언되어야 하는 경우입니다.내부왜냐하면 그것에 상응하는 SQL 수준이 없기 때문입니다. 이 경우를 해결하기 위해 최종 함수를 extra를 취하는 것으로 선언할 수 있습니다.“더미”집계의 입력 인수와 일치하는 인수. 최종 함수가 호출될 때 특정 값을 사용할 수 없으므로 이러한 더미 인수는 항상 null 값으로 전달됩니다. 유일한 용도는 다형성 최종 함수의 결과 유형이 집계의 입력 유형에 연결되도록 허용하는 것입니다. 예를 들어 내장 집계의 정의는 다음과 같습니다.array_agg다음과 동일함
CREATE FUNCTION array_agg_transfn(내부, anynonarray)
내부 반환 ...;
함수 생성 array_agg_finalfn(내부, anynonarray)
모든 배열을 반환합니다 ...;
CREATE AGGREGATE array_agg (anynonarray)
(
sfunc = array_agg_transfn,
유형 = 내부,
finalfunc = array_agg_finalfn,
finalfunc_extra
);
여기는finalfunc_extra옵션은 최종 함수가 상태 값 외에도 집계의 입력 인수에 해당하는 추가 더미 인수를 받도록 지정합니다. 추가anynonarray인수는 다음의 선언을 허용합니다.array_agg_finalfn유효합니다.
범퍼카 토토 함수는 마지막 인수를 다음과 같이 선언하여 다양한 수의 인수를 허용하도록 만들 수 있습니다.VARIADIC배열, 일반 함수와 거의 같은 방식으로; 참조섹션 37.5.5. 범퍼카 토토의 전이 함수는 마지막 인수와 동일한 배열 유형을 가져야 합니다. 일반적으로 전환 함수도 표시됩니다.VARIADIC, 그러나 이는 반드시 필요한 것은 아닙니다.
Variadic 집계는 다음과 관련하여 쉽게 오용됩니다.주문 기준옵션(참조섹션 4.2.7), 파서는 그러한 조합에 잘못된 수의 실제 인수가 제공되었는지 여부를 알 수 없기 때문입니다. 의 오른쪽에 있는 모든 항목은주문 기준은 범퍼카 토토에 대한 인수가 아닌 정렬 키입니다. 예를 들어,
SELECT myaggregate(a ORDER BY a, b, c) FROM ...
파서는 이것을 단일 범퍼카 토토 함수 인수와 세 개의 정렬 키로 간주합니다. 그러나 사용자가 의도했을 수도 있습니다.
SELECT myaggregate(a, b, c ORDER BY a) FROM ...
만약myaggregate가변적이므로 이 두 호출 모두 완벽하게 유효할 수 있습니다.
같은 이유로 동일한 이름과 다른 개수의 일반 인수를 사용하여 범퍼카 토토 함수를 생성하기 전에 다시 한 번 생각하는 것이 현명합니다.
지금까지 우리가 설명한 집계는 다음과 같습니다.“정상”범퍼카 토토.PostgreSQL또한 지원합니다순서 집합 범퍼카 토토는 두 가지 주요 측면에서 일반 집계와 다릅니다. 첫째, 입력 행당 한 번씩 평가되는 일반 집계 인수 외에도 순서 집합 범퍼카 토토는 다음을 가질 수 있습니다.“직접”집계 작업당 한 번만 평가되는 인수입니다. 둘째, 일반 집계 인수의 구문은 해당 인수에 대한 정렬 순서를 명시적으로 지정합니다. 순서 집합 범퍼카 토토는 일반적으로 특정 행 순서(예: 순위 또는 백분위수)에 따라 계산을 구현하는 데 사용되므로 정렬 순서는 모든 호출의 필수 측면입니다. 예를 들어, 다음과 같은 내장 정의가 있습니다.백분위수_디스크다음과 동일합니다:
CREATE FUNCTION order_set_transition(내부, 모든 요소)
내부 반환 ...;
함수 생성 백분위수_disc_final(내부, float8, 모든 요소)
모든 요소를 반환합니다 ...;
CREATE AGGREGATE 백분위수_디스크(float8 ORDER BY 모든 요소)
(
sfunc = 주문_세트_전환,
유형 = 내부,
finalfunc = 백분위수_디스크_최종,
finalfunc_extra
);
이 집계에는 다음이 소요됩니다.float8직접 인수(백분위수) 및 정렬 가능한 모든 데이터 유형이 될 수 있는 집계된 입력입니다. 다음과 같이 중간 가계 소득을 구하는 데 사용될 수 있습니다.
가계에서 그룹(소득 기준 순서) 내에서 백분위수_디스크(0.5)를 선택합니다.
백분위수_디스크
-----------------
50489
여기,0.5은 직접적인 주장입니다. 백분위수 비율이 행에 따라 달라지는 값인 것은 의미가 없습니다.
일반 집계의 경우와 달리 순서 집합 범퍼카 토토의 입력 행 정렬은 다음과 같습니다.아님은밀히 수행되지만 집계 지원 기능의 책임입니다. 일반적인 구현 접근 방식은 a에 대한 참조를 유지하는 것입니다.“튜플정렬”집계의 상태 값에 개체를 추가하고, 들어오는 행을 해당 개체에 공급한 다음 정렬을 완료하고 최종 함수에서 데이터를 읽습니다. 이 설계를 통해 최종 함수는 추가 주입과 같은 특수 작업을 수행할 수 있습니다.“가설적”행을 정렬할 데이터에 추가합니다. 일반 집계는 종종 다음으로 작성된 지원 함수로 구현될 수 있습니다.PL/pgSQL또는 다른 PL 언어인 순서 집합 범퍼카 토토는 일반적으로 상태 값을 SQL 데이터 유형으로 정의할 수 없기 때문에 C로 작성해야 합니다. (위의 예에서는 state 값이 type으로 선언되어 있음에 유의하세요.내부— 일반적인 경우입니다.) 또한 최종 함수가 정렬을 수행하므로 나중에 다시 전환 함수를 실행하여 입력 행을 계속 추가하는 것은 불가능합니다. 이는 최종 기능이 다음과 같지 않음을 의미합니다.읽기_전용; 에서 선언되어야 합니다.집합 생성asREAD_WRITE또는공유 가능이미 정렬된 상태를 활용하기 위한 추가 최종 함수 호출이 가능한 경우.
순서 집합 범퍼카 토토에 대한 상태 전환 함수는 현재 상태 값과 각 행의 집계된 입력 값을 수신하고 업데이트된 상태 값을 반환합니다. 이는 일반 집계의 정의와 동일하지만 직접 인수(있는 경우)가 제공되지 않습니다. 최종 함수는 마지막 상태 값, 직접 인수 값(있는 경우) 및 (iffinalfunc_extra이 지정됨) 범퍼카 토토된 입력에 해당하는 null 값입니다. 일반 범퍼카 토토와 마찬가지로,finalfunc_extra집합이 다형성인 경우에만 정말 유용합니다. 그런 다음 최종 함수의 결과 유형을 집계의 입력 유형에 연결하려면 추가 더미 인수가 필요합니다.
현재 순서 집합 범퍼카 토토는 창 함수로 사용할 수 없으므로 이동 집계 모드를 지원할 필요가 없습니다.
선택적으로 범퍼카 토토 함수가 지원할 수 있음부분 범퍼카 토토. 부분 범퍼카 토토의 개념은 입력 데이터의 다양한 하위 집합에 대해 집계의 상태 전환 기능을 독립적으로 실행한 다음 해당 하위 집합에서 발생하는 상태 값을 결합하여 단일 작업에서 모든 입력을 검색한 결과와 동일한 상태 값을 생성하는 것입니다. 이 모드는 서로 다른 작업자 프로세스가 테이블의 서로 다른 부분을 스캔하도록 하여 병렬 집계에 사용할 수 있습니다. 각 작업자는 부분적인 상태 값을 생성하고, 마지막에는 해당 상태 값이 결합되어 최종 상태 값을 생성합니다. (향후 이 모드는 로컬 및 원격 테이블에 대한 집계 결합과 같은 목적으로 사용될 수도 있지만 아직 구현되지 않았습니다.)
부분 범퍼카 토토를 지원하려면 집계 정의가 다음을 제공해야 합니다.결합 함수은 집계 상태 유형의 두 값(입력 행의 두 하위 집합에 대한 집계 결과를 나타냄)을 취하고 상태 유형의 새 값을 생성하여 해당 행 집합의 조합에 대해 집계한 후의 상태를 나타냅니다. 두 세트의 입력 행의 상대적 순서는 지정되지 않았습니다. 이는 입력 행 순서에 민감한 집계에 대해 유용한 결합 함수를 정의하는 것이 일반적으로 불가능하다는 것을 의미합니다.
간단한 예로,최대그리고MIN결합 함수를 전환 함수로 사용되는 동일한 2개 중 큼 또는 2개 미만 비교 함수로 지정하여 집계가 부분 범퍼카 토토를 지원하도록 만들 수 있습니다.합계집계에는 결합 기능과 같은 추가 기능이 필요합니다. (이 역시 상태 값이 입력 데이터 유형보다 넓지 않은 한 전환 함수와 동일합니다.)
결합 함수는 두 번째 인수로 기본 입력 유형이 아닌 상태 유형의 값을 취하는 전환 함수와 매우 유사하게 취급됩니다. 특히 null 값과 엄격한 함수를 처리하는 규칙은 유사합니다. 또한 집계 정의가 null이 아닌 값을 지정하는 경우initcond, 이는 각 부분 범퍼카 토토 실행의 초기 상태로 사용될 뿐만 아니라 각 부분 결과를 해당 상태로 결합하기 위해 호출되는 결합 함수의 초기 상태로도 사용된다는 점을 명심하세요.
집계의 상태 유형이 다음과 같이 선언된 경우내부, 결과가 집계 상태 값에 대한 올바른 메모리 컨텍스트에 할당되는 것은 결합 함수의 책임입니다. 이는 특히 첫 번째 입력이 다음과 같을 때를 의미합니다.NULL단순히 두 번째 입력을 반환하는 것은 유효하지 않습니다. 해당 값은 잘못된 컨텍스트에 있고 수명이 충분하지 않기 때문입니다.
집계의 상태 유형이 다음과 같이 선언된 경우내부, 일반적으로 집계 정의가 다음을 제공하는 것도 적절합니다.직렬화 함수그리고역직렬화 함수, 이러한 상태 값을 한 프로세스에서 다른 프로세스로 복사할 수 있습니다. 이러한 기능이 없으면 병렬 집계를 수행할 수 없으며 로컬/원격 집계와 같은 향후 애플리케이션도 작동하지 않을 수 있습니다.
직렬화 함수는 유형의 단일 인수를 취해야 합니다.내부그리고 다음 유형의 결과를 반환합니다.바이테아은 단일 바이트 덩어리로 패키징된 상태 값을 나타냅니다. 반대로 역직렬화 함수는 해당 변환을 되돌립니다. 두 가지 유형의 인수를 취해야 합니다.바이테아그리고내부, 유형의 결과를 반환합니다.내부. (두 번째 인수는 사용되지 않으며 항상 0이지만 유형 안전성을 위해 필요합니다.) 역직렬화 함수의 결과는 결합 함수의 결과와 달리 오래 지속되지 않으므로 단순히 현재 메모리 컨텍스트에 할당되어야 합니다.
또한 주목할 만한 점은 범퍼카 토토가 병렬로 실행되려면 범퍼카 토토 자체가 표시되어야 한다는 것입니다.병렬 안전. 지원 기능의 병렬 안전 표시는 참조되지 않습니다.
C로 작성된 함수는 다음을 호출하여 집계 지원 함수로 호출되고 있음을 감지할 수 있습니다.AggCheckCallContext, 예:
if (AggCheckCallContext(fcinfo, NULL))
이를 확인하는 한 가지 이유는 이것이 true인 경우 첫 번째 입력이 임시 상태 값이어야 하므로 새 복사본을 할당하는 대신 안전하게 내부에서 수정할 수 있다는 것입니다. 참조int8inc()예를 들어. (집계 전환 함수는 항상 전환 값을 내부에서 수정할 수 있지만, 집계 최종 함수는 일반적으로 그렇게 하는 것이 권장되지 않습니다. 그렇게 하는 경우 집계를 생성할 때 동작을 선언해야 합니다. 참조집합 생성자세한 내용은.)
다음의 두 번째 인수AggCheckCallContext은 집계 상태 값이 유지되는 메모리 컨텍스트를 검색하는 데 사용될 수 있습니다. 이는 다음을 사용하려는 전환 함수에 유용합니다.“확장”객체(참조섹션 37.13.1)를 상태 값으로 사용합니다. 첫 번째 호출에서 전환 함수는 메모리 컨텍스트가 집계 상태 컨텍스트의 하위인 확장된 개체를 반환해야 하며, 이후 호출에서는 동일한 확장된 개체를 계속 반환해야 합니다. 참조array_append()예를 들어. (array_append()은 내장 집계의 전환 함수는 아니지만 사용자 정의 집계의 전환 함수로 사용될 때 효율적으로 작동하도록 작성되었습니다.)
C로 작성된 함수를 집계하는 데 사용할 수 있는 또 다른 지원 루틴은AggGetAggref, 이는Aggref집계 호출을 정의하는 구문 분석 노드입니다. 이는 주로 순서 집합 범퍼카 토토에 유용하며, 이는 다음의 하위 구조를 검사할 수 있습니다.Aggref노드에서 어떤 정렬 순서를 구현해야 하는지 알아보세요. 예는 다음에서 찾을 수 있습니다.orderedsetaggs.c에서포스트그레SQL소스 코드.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.