CREATE AGGREGATE
CREATE AGGREGATE â ÑоздаÑÑ Ð°Ð³ÑегаÑнÑÑ ÑÑнкÑиÑ
СинÑакÑиÑ
CREATE [ OR REPLACE ] AGGREGATEимÑ( [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_даннÑÑ _аÑгÑменÑа[ , ... ] ) ( SFUNC =ÑÑнкÑиÑ_ÑоÑÑоÑниÑ, STYPE =Ñип_даннÑÑ _ÑоÑÑоÑниÑ[ , SSPACE =ÑазмеÑ_даннÑÑ _ÑоÑÑоÑниÑ] [ , FINALFUNC =ÑÑнкÑиÑ_завеÑÑениÑ] [ , FINALFUNC_EXTRA ] [ , FINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ] [ , COMBINEFUNC =комбиниÑÑÑÑаÑ_ÑÑнкÑиÑ] [ , SERIALFUNC =ÑÑнкÑиÑ_ÑеÑиализаÑии] [ , DESERIALFUNC =ÑÑнкÑиÑ_деÑеÑиализаÑии] [ , INITCOND =наÑалÑное_ÑÑловие] [ , MSFUNC =ÑÑнкÑиÑ_ÑоÑÑоÑниÑ_движ] [ , MINVFUNC =обÑаÑнаÑ_ÑÑнкÑиÑ_движ] [ , MSTYPE =Ñип_даннÑÑ _ÑоÑÑоÑниÑ_движ] [ , MSSPACE =ÑазмеÑ_даннÑÑ _ÑоÑÑоÑниÑ_движ] [ , MFINALFUNC =ÑÑнкÑиÑ_завеÑÑениÑ_движ] [ , MFINALFUNC_EXTRA ] [ , MFINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ] [ , MINITCOND =наÑалÑное_ÑÑловие_движ] [ , SORTOP =опеÑаÑоÑ_ÑоÑÑиÑовки] [ , PARALLEL = { SAFE | RESTRICTED | UNSAFE } ] ) CREATE [ OR REPLACE ] AGGREGATEимÑ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_даннÑÑ _аÑгÑменÑа[ , ... ] ] ORDER BY [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_даннÑÑ _аÑгÑменÑа[ , ... ] ) ( SFUNC =ÑÑнкÑиÑ_ÑоÑÑоÑниÑ, STYPE =Ñип_даннÑÑ _ÑоÑÑоÑниÑ[ , SSPACE =ÑазмеÑ_даннÑÑ _ÑоÑÑоÑниÑ] [ , FINALFUNC =ÑÑнкÑиÑ_завеÑÑениÑ] [ , FINALFUNC_EXTRA ] [ , FINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ] [ , INITCOND =наÑалÑное_ÑÑловие] [ , PARALLEL = { SAFE | RESTRICTED | UNSAFE } ] [ , HYPOTHETICAL ] ) или ÑÑаÑÑй ÑинÑакÑÐ¸Ñ CREATE [ OR REPLACE ] AGGREGATEимÑ( BASETYPE =базовÑй_Ñип, SFUNC =ÑÑнкÑиÑ_ÑоÑÑоÑниÑ, STYPE =Ñип_даннÑÑ _ÑоÑÑоÑниÑ[ , SSPACE =ÑазмеÑ_даннÑÑ _ÑоÑÑоÑниÑ] [ , FINALFUNC =ÑÑнкÑиÑ_завеÑÑениÑ] [ , FINALFUNC_EXTRA ] [ , FINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ] [ , COMBINEFUNC =комбиниÑÑÑÑаÑ_ÑÑнкÑиÑ] [ , SERIALFUNC =ÑÑнкÑиÑ_ÑеÑиализаÑии] [ , DESERIALFUNC =ÑÑнкÑиÑ_деÑеÑиализаÑии] [ , INITCOND =наÑалÑное_ÑÑловие] [ , MSFUNC =ÑÑнкÑиÑ_ÑоÑÑоÑниÑ_движ] [ , MINVFUNC =обÑаÑнаÑ_ÑÑнкÑиÑ_движ] [ , MSTYPE =Ñип_даннÑÑ _ÑоÑÑоÑниÑ_движ] [ , MSSPACE =ÑазмеÑ_даннÑÑ _ÑоÑÑоÑниÑ_движ] [ , MFINALFUNC =ÑÑнкÑиÑ_завеÑÑениÑ_движ] [ , MFINALFUNC_EXTRA ] [ , MFINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ] [ , MINITCOND =наÑалÑное_ÑÑловие_движ] [ , SORTOP =опеÑаÑоÑ_ÑоÑÑиÑовки] )
ÐпиÑание
CREATE AGGREGATE ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð°Ð³ÑегаÑнÑÑ ÑÑнкÑиÑ, а CREATE OR REPLACE AGGREGATE ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð¸Ð»Ð¸ заменÑÐµÑ Ð¾Ð¿Ñеделение Ñже ÑÑÑеÑÑвÑÑÑей агÑегаÑной ÑÑнкÑии. ÐекоÑоÑое колиÑеÑÑво базовÑÑ
и ÑаÑÑо иÑполÑзÑемÑÑ
агÑегаÑнÑÑ
ÑÑнкÑий вклÑÑено в диÑÑÑибÑÑив; они опиÑÐ°Ð½Ñ Ð² Разделе 9.21. Ðо еÑли нÑжно адапÑиÑоваÑÑ Ð¸Ñ
к новÑм Ñипам или ÑоздаÑÑ Ð½ÐµÐ´Ð¾ÑÑаÑÑие агÑегаÑнÑе ÑÑнкÑии, ÑÑо можно ÑделаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE AGGREGATE.
ÐÑи замене ÑÑÑеÑÑвÑÑÑего опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÑÐ¸Ð¿Ñ Ð¸ колиÑеÑÑво непоÑÑедÑÑвеннÑÑ Ð°ÑгÑменÑов, а Ñакже Ñип ÑезÑлÑÑаÑа нелÑзÑ. ÐÑоме Ñого, новое опÑеделение должно бÑÑÑ Ñого же вида (обÑÑнÑй, ÑоÑÑиÑÑÑÑий или гипоÑезиÑÑÑÑий агÑегаÑ), ÑÑо и ÑÑаÑое.
ÐÑли ÑказÑваеÑÑÑ Ð¸Ð¼Ñ ÑÑ
ÐµÐ¼Ñ (напÑимеÑ, CREATE AGGREGATE myschema.myagg ...), агÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ ÑоздаÑÑÑÑ Ð² Ñказанной ÑÑ
еме. РпÑоÑивном ÑлÑÑае она ÑоздаÑÑÑÑ Ð² ÑекÑÑей ÑÑ
еме.
ÐгÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¸Ð´ÐµÐ½ÑиÑиÑиÑÑеÑÑÑ Ð¿Ð¾ имени и Ñипам Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ . Ðве агÑегаÑнÑÑ ÑÑнкÑии в одной ÑÑ ÐµÐ¼Ðµ могÑÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð½Ð¾ имÑ, ÑолÑко еÑли они ÑабоÑаÑÑ Ñ ÑазнÑми Ñипами даннÑÑ . ÐÐ¼Ñ Ð¸ Ñип(Ñ) Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð°Ð³ÑегаÑа не могÑÑ ÑовпадаÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ и Ñипами даннÑÑ Ð»Ñбой дÑÑгой обÑÑной ÑÑнкÑии в Ñой же ÑÑ ÐµÐ¼Ðµ. ÐÑо же пÑавило дейÑÑвÑÐµÑ Ð¿Ñи пеÑегÑÑзке имÑн обÑÑнÑÑ ÑÑнкÑий (Ñм. CREATE FUNCTION).
ÐÑоÑÑÑÑ Ð°Ð³ÑегаÑнÑÑ ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑазÑÑÑ Ð¾Ð´Ð½Ð° или две обÑÑнÑе ÑÑнкÑии: ÑÑнкÑÐ¸Ñ Ð¿ÐµÑеÑ
ода ÑоÑÑоÑÐ½Ð¸Ñ ÑÑнкÑиÑ_ÑоÑÑоÑÐ½Ð¸Ñ Ð¸ необÑзаÑелÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¾ÐºÐ¾Ð½ÑаÑелÑного вÑÑиÑÐ»ÐµÐ½Ð¸Ñ ÑÑнкÑиÑ_завеÑÑениÑ. Ðни иÑполÑзÑÑÑÑÑ ÑледÑÑÑим обÑазом:
ÑÑнкÑиÑ_ÑоÑÑоÑниÑ( внÑÑÑеннее-ÑоÑÑоÑние, ÑледÑÑÑие-знаÑениÑ-даннÑÑ ) ---> ÑледÑÑÑее-внÑÑÑеннее-ÑоÑÑоÑниеÑÑнкÑиÑ_завеÑÑениÑ( внÑÑÑеннее-ÑоÑÑоÑние ) ---> агÑегаÑное_знаÑение
Postgres Pro ÑоздаÑÑ Ð²ÑеменнÑÑ Ð¿ÐµÑеменнÑÑ Ñипа Ñип_даннÑÑ
_ÑоÑÑоÑÐ½Ð¸Ñ Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑекÑÑего внÑÑÑеннего ÑоÑÑоÑÐ½Ð¸Ñ Ð°Ð³ÑегаÑа. ÐаÑем Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ поÑÑÑпаÑÑей ÑÑÑоки вÑÑиÑлÑÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð°ÑгÑменÑов агÑегаÑа и вÑзÑваеÑÑÑ ÑÑнкÑÐ¸Ñ Ð¿ÐµÑеÑ
ода ÑоÑÑоÑÐ½Ð¸Ñ Ñ ÑекÑÑим знаÑением ÑоÑÑоÑÐ½Ð¸Ñ Ð¸ полÑÑеннÑми аÑгÑменÑами; ÑÑа ÑÑнкÑÐ¸Ñ Ð²ÑÑиÑлÑÐµÑ ÑледÑÑÑее внÑÑÑеннее ÑоÑÑоÑние. Ðогда Ñаким обÑазом бÑдÑÑ Ð¾Ð±ÑабоÑÐ°Ð½Ñ Ð²Ñе ÑÑÑоки, вÑзÑваеÑÑÑ Ð·Ð°Ð²ÐµÑÑаÑÑÐ°Ñ ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° вÑÑиÑлиÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемое знаÑение агÑегаÑа. ÐÑли ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¾ÑÑÑÑÑÑвÑеÑ, пÑоÑÑо возвÑаÑаеÑÑÑ ÐºÐ¾Ð½ÐµÑное знаÑение ÑоÑÑоÑниÑ.
ÐгÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑеделиÑÑ Ð½Ð°ÑалÑное ÑÑловие, Ñо еÑÑÑ Ð½Ð°ÑалÑное знаÑение Ð´Ð»Ñ Ð²Ð½ÑÑÑенней пеÑеменной ÑоÑÑоÑниÑ. ÐÑо знаÑение задаÑÑÑÑ Ð¸ ÑоÑ
ÑанÑеÑÑÑ Ð² базе даннÑÑ
в виде ÑÑÑоки Ñипа text, но оно должно бÑÑÑ Ð´Ð¾Ð¿ÑÑÑимÑм внеÑним пÑедÑÑавлением конÑÑанÑÑ Ñипа даннÑÑ
пеÑеменной ÑоÑÑоÑниÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ð°ÑалÑнÑм знаÑением ÑоÑÑоÑÐ½Ð¸Ñ ÑÑиÑаеÑÑÑ NULL.
ÐÑли ÑÑнкÑÐ¸Ñ Ð¿ÐµÑеÑ
ода ÑоÑÑоÑÐ½Ð¸Ñ Ð¾Ð±ÑÑвлена как «strict» (ÑÑÑогаÑ), ÐµÑ Ð½ÐµÐ»ÑÐ·Ñ Ð²ÑзÑваÑÑ Ñ Ð²Ñ
однÑми знаÑениÑми NULL. Ð ÑÑом ÑлÑÑае агÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð²ÑполнÑеÑÑÑ ÑледÑÑÑим обÑазом. СÑÑоки Ñо знаÑениÑми NULL игноÑиÑÑÑÑÑÑ (ÑÑнкÑÐ¸Ñ Ð¿ÐµÑеÑ
ода не вÑзÑваеÑÑÑ Ð¸ пÑедÑдÑÑее знаÑение ÑоÑÑоÑÐ½Ð¸Ñ Ð½Ðµ менÑеÑÑÑ) и еÑли наÑалÑное ÑоÑÑоÑние Ñавно NULL, Ñо в пеÑвой же ÑÑÑоке, в коÑоÑой вÑе вÑ
однÑе знаÑÐµÐ½Ð¸Ñ Ð½Ðµ NULL, пеÑвÑй аÑгÑÐ¼ÐµÐ½Ñ Ð·Ð°Ð¼ÐµÐ½ÑÐµÑ Ð·Ð½Ð°Ñение ÑоÑÑоÑниÑ, а ÑÑнкÑÐ¸Ñ Ð¿ÐµÑеÑ
ода вÑзÑваеÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ поÑледÑÑÑей ÑÑÑоки, в коÑоÑой вÑе вÑ
однÑе знаÑÐµÐ½Ð¸Ñ Ð½Ðµ NULL. ÐÑо поведение Ñдобно Ð´Ð»Ñ ÑеализаÑии ÑакиÑ
агÑегаÑнÑÑ
ÑÑнкÑий, как max. ÐамеÑÑÑе, ÑÑо Ñакое поведение возможно, ÑолÑко еÑли Ñип_даннÑÑ
_ÑоÑÑоÑÐ½Ð¸Ñ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¿ÐµÑвÑм Ñипом_даннÑÑ
_аÑгÑменÑа. ÐÑли же ÑÑи ÑÐ¸Ð¿Ñ ÑазлиÑаÑÑÑÑ, необÑ
одимо задаÑÑ Ð½Ð°ÑалÑное ÑÑловие не NULL или иÑполÑзоваÑÑ Ð½ÐµÑÑÑогÑÑ ÑÑнкÑÐ¸Ñ Ð¿ÐµÑеÑ
ода ÑоÑÑоÑниÑ.
ÐÑли ÑÑнкÑÐ¸Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð° ÑоÑÑоÑÐ½Ð¸Ñ Ð½Ðµ ÑвлÑеÑÑÑ ÑÑÑогой, она вÑзÑваеÑÑÑ Ð±ÐµÐ·ÑÑловно Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ поÑÑÑпаÑÑей ÑÑÑоки и должна Ñама обÑабаÑÑваÑÑ Ð²Ð²Ð¾Ð´Ð¸Ð¼Ñе знаÑÐµÐ½Ð¸Ñ Ð¸ пеÑеменнÑÑ ÑоÑÑоÑниÑ, ÑавнÑе NULL. ÐÑо позволÑÐµÑ ÑазÑабоÑÑÐ¸ÐºÑ Ð°Ð³ÑегаÑной ÑÑнкÑии полноÑÑÑÑ ÑпÑавлÑÑÑ Ñем, как она воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL.
ÐÑли ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑвлена как «strict» (ÑÑÑогаÑ), она не бÑÐ´ÐµÑ Ð²Ñзвана пÑи конеÑном знаÑении ÑоÑÑоÑниÑ, Ñавном NULL; вмеÑÑо ÑÑого авÑомаÑиÑеÑки возвÑаÑаеÑÑÑ ÑезÑлÑÑÐ°Ñ NULL. (РазÑмееÑÑÑ, ÑÑо вполне ноÑмалÑное поведение Ð´Ð»Ñ ÑÑÑогиÑ
ÑÑнкÑий.) Ðогда ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð²ÑзÑваеÑÑÑ, она в лÑбом ÑлÑÑае Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑиÑÑ Ð·Ð½Ð°Ñение NULL. ÐапÑимеÑ, ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ avg возвÑаÑÐ°ÐµÑ NULL, еÑли опÑеделÑеÑ, ÑÑо бÑло обÑабоÑано Ð½Ð¾Ð»Ñ ÑÑÑок.
Ðногда бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ обÑÑвиÑÑ ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÐºÐ°Ðº пÑинимаÑÑÑÑ Ð½Ðµ ÑолÑко ÑоÑÑоÑние, но и дополниÑелÑнÑе паÑамеÑÑÑ, ÑооÑвеÑÑÑвÑÑÑие вÑ
однÑм даннÑм агÑегаÑа. РоÑновном ÑÑо Ð¸Ð¼ÐµÐµÑ ÑмÑÑл Ð´Ð»Ñ Ð¿Ð¾Ð»Ð¸Ð¼Ð¾ÑÑнÑÑ
ÑÑнкÑий завеÑÑениÑ, коÑоÑÑм Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ´Ð¾ÑÑаÑоÑно знаÑÑ Ñип даннÑÑ
ÑолÑко пеÑеменной ÑоÑÑоÑниÑ, ÑÑÐ¾Ð±Ñ Ð²ÑвеÑÑи Ñип ÑезÑлÑÑаÑа. ÐÑи дополниÑелÑнÑе паÑамеÑÑÑ Ð²Ñегда пеÑедаÑÑÑÑ ÐºÐ°Ðº NULL (Ñак ÑÑо ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð½Ðµ должна бÑÑÑ ÑÑÑогой, когда пÑименÑеÑÑÑ FINALFUNC_EXTRA), но в оÑÑалÑном ÑÑо обÑÑнÑе паÑамеÑÑÑ. ФÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑÑниÑÑ ÑакÑиÑеÑкие ÑÐ¸Ð¿Ñ Ð°ÑгÑменÑов в ÑекÑÑем вÑзове, воÑполÑзовавÑиÑÑ ÑиÑÑемнÑм вÑзовом get_fn_expr_argtype.
ÐгÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно поддеÑживаÑÑ Ñежим движÑÑегоÑÑ Ð°Ð³ÑегаÑа, как опиÑано в ÐодÑазделе 36.12.1. ÐÐ»Ñ ÑÑого Ñежима ÑÑебÑÑÑÑÑ Ð¿Ð°ÑамеÑÑÑ MSFUNC, MINVFUNC и MSTYPE, а Ñакже могÑÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ MSSPACE, MFINALFUNC, MFINALFUNC_EXTRA, MFINALFUNC_MODIFY и MINITCOND. Ðа иÑклÑÑением MINVFUNC, ÑÑи паÑамеÑÑÑ ÑабоÑаÑÑ ÐºÐ°Ðº ÑооÑвеÑÑÑвÑÑÑие паÑамеÑÑÑ Ð¿ÑоÑÑого агÑегаÑа без наÑалÑной бÑÐºÐ²Ñ M; они опÑеделÑÑÑ Ð¾ÑделÑнÑÑ ÑеализаÑÐ¸Ñ Ð°Ð³ÑегаÑа, вклÑÑаÑÑÑÑ ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑаÑного пеÑеÑ
ода.
ÐÑли в ÑпиÑок паÑамеÑÑов добавлено Ñказание ORDER BY, ÑоздаÑÑÑÑ Ð¾ÑобÑй Ñипа агÑегаÑа, назÑваемÑй ÑоÑÑиÑÑÑÑим агÑегаÑом; Ñ Ñказанием HYPOTHETICAL ÑоздаÑÑÑÑ Ð³Ð¸Ð¿Ð¾ÑезиÑÑÑÑий агÑегаÑ. ÐÑи агÑегаÑÑ ÑабоÑаÑÑ Ñ Ð³ÑÑппами оÑÑоÑÑиÑованнÑÑ
знаÑений и завиÑÑÑ Ð¾Ñ Ð¿Ð¾ÑÑдка ÑоÑÑиÑовки, поÑÑÐ¾Ð¼Ñ Ð¾Ð¿Ñеделение поÑÑдка ÑоÑÑиÑовки вÑ
однÑÑ
даннÑÑ
ÑвлÑеÑÑÑ Ð½ÐµÐ¾ÑÑемлемой ÑаÑÑÑÑ Ð¸Ñ
вÑзова. ÐÑоме Ñого, они могÑÑ Ð¸Ð¼ÐµÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвеннÑе аÑгÑменÑÑ, коÑоÑÑе вÑÑиÑлÑÑÑÑÑ ÐµÐ´Ð¸Ð½Ð¾Ð¶Ð´Ñ Ð´Ð»Ñ Ð²Ñей пÑоÑедÑÑÑ Ð°Ð³ÑегиÑованиÑ, а не Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ поÑÑÑпаÑÑей ÑÑÑоки. ÐипоÑезиÑÑÑÑие агÑегаÑÑ Ð¿ÑедÑÑавлÑÑÑ Ñобой подклаÑÑ ÑоÑÑиÑÑÑÑиÑ
агÑегаÑов, в коÑоÑÑÑ
непоÑÑедÑÑвеннÑе аÑгÑменÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑовпадаÑÑ, по колиÑеÑÑÐ²Ñ Ð¸ Ñипам даннÑÑ
, Ñ Ð°Ð³ÑегиÑÑемÑми аÑгÑменÑами. ÐÑо позволÑÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑÑиÑ
непоÑÑедÑÑвеннÑÑ
аÑгÑменÑов в Ð½Ð°Ð±Ð¾Ñ Ð°Ð³ÑегиÑÑемÑÑ
ÑÑÑок в каÑеÑÑве дополниÑелÑной «гипоÑеÑиÑеÑкой» ÑÑÑоки.
ÐгÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно поддеÑживаÑÑ ÑаÑÑиÑное агÑегиÑование, как опиÑано в ÐодÑазделе 36.12.4. ÐÐ»Ñ ÑÑого ÑÑебÑеÑÑÑ Ð·Ð°Ð´Ð°ÑÑ Ð¿Ð°ÑамеÑÑ COMBINEFUNC. ÐÑли в каÑеÑÑве Ñипа_даннÑÑ
_ÑоÑÑоÑÐ½Ð¸Ñ Ð²ÑбÑан internal, обÑÑно ÑмеÑÑно Ñакже задаÑÑ SERIALFUNC и DESERIALFUNC, ÑÑÐ¾Ð±Ñ Ð±Ñло возможно паÑаллелÑное агÑегиÑование. ÐамеÑÑÑе, ÑÑо Ð´Ð»Ñ Ð¿Ð°ÑаллелÑного агÑегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð°Ð³ÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ñакже должна бÑÑÑ Ð¿Ð¾Ð¼ÐµÑена как PARALLEL SAFE (безопаÑÐ½Ð°Ñ Ð´Ð»Ñ ÑаÑпаÑаллеливаниÑ).
ÐгÑегаÑÑ, ÑабоÑаÑÑие подобно MIN и MAX, иногда можно ÑопÑимизиÑоваÑÑ, заменив ÑканиÑование вÑеÑ
ÑÑÑок ÑаблиÑÑ Ð¾Ð±ÑаÑением к индекÑÑ. ÐÑли агÑÐµÐ³Ð°Ñ Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð¸Ñ Ñакой опÑимизаÑии, ÑÑо можно ÑказаÑÑ, опÑеделив опеÑаÑÐ¾Ñ ÑоÑÑиÑовки. ÐÑновное ÑÑебование пÑи ÑÑом: агÑÐµÐ³Ð°Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ вÑдаваÑÑ Ð² ÑезÑлÑÑаÑе пеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿Ð¾ поÑÑÐ´ÐºÑ ÑоÑÑиÑовки, Ð·Ð°Ð´Ð°Ð²Ð°ÐµÐ¼Ð¾Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑом; дÑÑгими Ñловами:
SELECT agg(col) FROM tab;
должно бÑÑÑ ÑавнознаÑно:
SELECT col FROM tab ORDER BY col USING sortop LIMIT 1;
ÐополниÑелÑно пÑедполагаеÑÑÑ, ÑÑо агÑÐµÐ³Ð°Ñ Ð¸Ð³Ð½Ð¾ÑиÑÑÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL и возвÑаÑÐ°ÐµÑ NULL, ÑолÑко еÑли ÑÑÑок Ñо знаÑениÑми не NULL не наÑлоÑÑ. ÐбÑÑно опеÑаÑÐ¾Ñ < ÑвлÑеÑÑÑ Ð¿Ð¾Ð´Ñ
одÑÑим опеÑаÑоÑом ÑоÑÑиÑовки Ð´Ð»Ñ MIN, а > â Ð´Ð»Ñ MAX. ÐамеÑÑÑе, ÑÑо обÑаÑение к индекÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð´Ð°ÑÑ ÑÑÑекÑ, ÑолÑко еÑли заданнÑй опеÑаÑÐ¾Ñ ÑеализÑÐµÑ ÑÑÑаÑÐµÐ³Ð¸Ñ Â«Ð¼ÐµÐ½ÑÑе» или «болÑÑе» в клаÑÑе опеÑаÑоÑов индекÑа-B-деÑева.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð°Ð³ÑегаÑнÑÑ ÑÑнкÑиÑ, необÑ
одимо имеÑÑ Ð¿Ñаво USAGE Ð´Ð»Ñ Ñипов аÑгÑменÑов, Ñипа(ов) ÑоÑÑоÑÐ½Ð¸Ñ Ð¸ Ñипа ÑезÑлÑÑаÑа, а Ñакже пÑаво EXECUTE Ð´Ð»Ñ Ð¾Ð¿Ð¾ÑнÑÑ
ÑÑнкÑий.
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ Ñоздаваемой агÑегаÑной ÑÑнкÑии (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹).
Ñежим_аÑгÑменÑаРежим аÑгÑменÑа:
INилиVARIADIC. (ÐгÑегаÑнÑе ÑÑнкÑии не поддеÑживаÑÑ Ð²ÑÑ Ð¾Ð´Ð½Ñе аÑгÑменÑÑ (OUT).) Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑIN. РежимVARIADICÐ¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñказан ÑолÑко поÑледним.имÑ_аÑгÑменÑаÐÐ¼Ñ Ð°ÑгÑменÑа. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¸ÑполÑзÑеÑÑÑ ÑолÑко в ÑелÑÑ Ð´Ð¾ÐºÑменÑиÑованиÑ. ÐÑли опÑÑено, ÑооÑвеÑÑÑвÑÑÑий аÑгÑÐ¼ÐµÐ½Ñ Ð±ÑÐ´ÐµÑ Ð±ÐµÐ·ÑмÑннÑм.
Ñип_даннÑÑ _аÑгÑменÑаТип Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ , Ñ ÐºÐ¾ÑоÑÑм ÑабоÑÐ°ÐµÑ ÑÑа агÑегаÑÐ½Ð°Ñ ÑÑнкÑиÑ. ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð°Ð³ÑегаÑной ÑÑнкÑии без аÑгÑменÑов вÑÑавÑÑе
*вмеÑÑо ÑпиÑка Ñ Ð¾Ð¿ÑеделениÑми аÑгÑменÑов. (ÐÑÐ¸Ð¼ÐµÑ Ñакой агÑегаÑной ÑÑнкÑии:count(*).)базовÑй_ÑипРпÑежнем ÑинÑакÑиÑе
CREATE AGGREGATEÑип Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð·Ð°Ð´Ð°Ð²Ð°Ð»ÑÑ Ð¿Ð°ÑамеÑÑомbasetype, а не запиÑÑвалÑÑ Ð¿Ð¾Ñле имени агÑегаÑа. ÐÑо позволÑло ÑказаÑÑ ÑолÑко один Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¹ паÑамеÑÑ. ЧÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ ÑÑнкÑÐ¸Ñ Ð±ÐµÐ· аÑгÑменÑов, иÑполÑзÑÑ ÑÑÐ¾Ñ ÑинÑакÑиÑ, в каÑеÑÑве знаÑениÑbasetypeнÑжно ÑказаÑÑ"ANY"(не*). СоздаÑÑ ÑоÑÑиÑÑÑÑий агÑÐµÐ³Ð°Ñ ÑÑаÑÑй ÑинÑакÑÐ¸Ñ Ð½Ðµ позволÑл.ÑÑнкÑиÑ_ÑоÑÑоÑниÑÐÐ¼Ñ ÑÑнкÑии пеÑÐµÑ Ð¾Ð´Ð° ÑоÑÑоÑниÑ, вÑзÑваемой Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоки. ÐÐ»Ñ Ð¾Ð±ÑÑнÑÑ Ð°Ð³ÑегаÑнÑÑ ÑÑнкÑий Ñ
NаÑгÑменÑами,ÑÑнкÑиÑ_ÑоÑÑоÑниÑдолжна пÑинимаÑÑN+1 аÑгÑменÑ, пеÑвÑй должен имеÑÑ ÑипÑип_даннÑÑ _ÑоÑÑоÑниÑ, а оÑÑалÑнÑе â ÑÐ¸Ð¿Ñ ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ . ÐозвÑаÑаÑÑ Ð¾Ð½Ð° должна знаÑение ÑипаÑип_даннÑÑ _ÑоÑÑоÑниÑ. ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑекÑÑее знаÑение ÑоÑÑоÑÐ½Ð¸Ñ Ð¸ ÑекÑÑие знаÑÐµÐ½Ð¸Ñ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ , и возвÑаÑÐ°ÐµÑ ÑледÑÑÑее знаÑение ÑоÑÑоÑниÑ.Ð ÑоÑÑиÑÑÑÑÐ¸Ñ (и в Ñом ÑиÑле, гипоÑезиÑÑÑÑÐ¸Ñ ) агÑегаÑÐ°Ñ ÑÑнкÑÐ¸Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð° ÑоÑÑоÑÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑолÑко ÑекÑÑее знаÑение ÑоÑÑоÑÐ½Ð¸Ñ Ð¸ агÑегиÑÑемÑе аÑгÑменÑÑ, без непоÑÑедÑÑвеннÑÑ Ð°ÑгÑменÑов. ÐÑÑÐ³Ð¸Ñ Ð¾ÑлиÑий Ñ Ð½ÐµÑ Ð½ÐµÑ.
Ñип_даннÑÑ _ÑоÑÑоÑниÑТип даннÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ Ð´Ð»Ñ Ð°Ð³ÑегаÑной ÑÑнкÑии.
ÑазмеÑ_даннÑÑ _ÑоÑÑоÑниÑСÑедний ÑÐ°Ð·Ð¼ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ Ð°Ð³ÑегаÑа (в байÑÐ°Ñ ). ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑÑен или Ñавен нÑлÑ, пÑименÑÐµÐ¼Ð°Ñ Ð¾Ñенка по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð¿ÑеделÑеÑÑÑ Ð¿Ð¾
ÑипÑ_даннÑÑ _ÑоÑÑоÑниÑ. ÐланиÑовÑик иÑполÑзÑÐµÑ ÑÑо знаÑение Ð´Ð»Ñ Ð¾ÑÐµÐ½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑÑма памÑÑи, ÑÑебÑемого Ð´Ð»Ñ Ð°Ð³ÑегаÑного запÑоÑа Ñ Ð³ÑÑппиÑовкой.ÑÑнкÑиÑ_завеÑÑениÑÐÐ¼Ñ ÑÑнкÑии завеÑÑениÑ, вÑзÑваемой Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ ÑезÑлÑÑаÑа агÑегаÑной ÑÑнкÑии поÑле обÑабоÑки вÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ ÑÑÑок. ÐÐ»Ñ Ð¾Ð±ÑÑного агÑегаÑа ÑÑа ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° пÑинимаÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑй аÑгÑÐ¼ÐµÐ½Ñ Ñипа
Ñип_даннÑÑ _ÑоÑÑоÑниÑ. ÐозвÑаÑаемÑм Ñипом агÑегаÑа бÑÐ´ÐµÑ Ñип, коÑоÑÑй возвÑаÑÐ°ÐµÑ ÑÑа ÑÑнкÑиÑ. ÐÑлиÑÑнкÑиÑ_завеÑÑениÑне Ñказана, ÑезÑлÑÑаÑом агÑегаÑа бÑÐ´ÐµÑ ÐºÐ¾Ð½ÐµÑное знаÑение ÑоÑÑоÑниÑ, а Ñипом ÑезÑлÑÑаÑа âÑип_даннÑÑ _ÑоÑÑоÑниÑ.Ð ÑоÑÑиÑÑÑÑÐ¸Ñ (и в Ñом ÑиÑле, гипоÑезиÑÑÑÑÐ¸Ñ ) агÑегаÑÐ°Ñ ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð½Ðµ ÑолÑко конеÑное знаÑение ÑоÑÑоÑниÑ, но и знаÑÐµÐ½Ð¸Ñ Ð²ÑÐµÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвеннÑÑ Ð°ÑгÑменÑов.
ÐÑли команда ÑодеÑÐ¶Ð¸Ñ Ñказание
FINALFUNC_EXTRA, Ñо в дополнение к конеÑÐ½Ð¾Ð¼Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ Ð¸ вÑем непоÑÑедÑÑвеннÑм аÑгÑменÑам ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¾ÑнÑе знаÑÐµÐ½Ð¸Ñ NULL, ÑооÑвеÑÑÑвÑÑÑие обÑÑнÑм (агÑегиÑÑемÑм) аÑгÑменÑам агÑегаÑа. ÐÑо в оÑновном полезно Ð´Ð»Ñ Ð¿ÑавилÑного опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñипа ÑезÑлÑÑаÑа пÑи Ñоздании полимоÑÑной агÑегаÑной ÑÑнкÑии.FINALFUNC_MODIFY= {READ_ONLY|SHAREABLE|READ_WRITE}ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑказÑваеÑ, ÑвлÑеÑÑÑ Ð»Ð¸ ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑиÑÑой ÑÑнкÑией, коÑоÑÐ°Ñ Ð½Ðµ изменÑÐµÑ Ñвои аÑгÑменÑÑ. ÐÑо ÑвойÑÑво ÑÑнкÑии пеÑедаÑÑ Ð·Ð½Ð°Ñение
READ_ONLY; два дÑÑÐ³Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ, ÑÑо она Ð¼Ð¾Ð¶ÐµÑ Ð¼ÐµÐ½ÑÑÑ Ð·Ð½Ð°Ñение пеÑÐµÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑоÑÑоÑниÑ. ÐодÑобнее об ÑÑом говоÑиÑÑÑ Ð² Ñазделе ÐамеÑÐ°Ð½Ð¸Ñ Ð½Ð¸Ð¶Ðµ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ Ð·Ð½Ð°ÑениеREAD_ONLY, за иÑклÑÑением ÑоÑÑиÑÑÑÑÐ¸Ñ Ð°Ð³ÑегаÑов (Ð´Ð»Ñ Ð½Ð¸Ñ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ âREAD_WRITE).комбиниÑÑÑÑаÑ_ÑÑнкÑиÑÐополниÑелÑно Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñказана
комбиниÑÑÑÑаÑ_ÑÑнкÑиÑ, ÑÑÐ¾Ð±Ñ Ð°Ð³ÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑживала ÑаÑÑиÑное агÑегиÑование. ÐÑли задаÑÑÑÑ,комбиниÑÑÑÑаÑ_ÑÑнкÑиÑдолжна комбиниÑоваÑÑ Ð´Ð²Ð° знаÑениÑÑипа_даннÑÑ _ÑоÑÑоÑниÑ, ÑодеÑжаÑÐ¸Ñ ÑезÑлÑÑÐ°Ñ Ð°Ð³ÑегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ некоÑоÑÐ¾Ð¼Ñ Ð¿Ð¾Ð´Ð¼Ð½Ð¾Ð¶ÐµÑÑÐ²Ñ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, и вÑÑиÑлÑÑÑ Ð½Ð¾Ð²Ð¾Ðµ знаÑениеÑипа_даннÑÑ _ÑоÑÑоÑниÑ, пÑедÑÑавлÑÑÑее ÑезÑлÑÑÐ°Ñ Ð°Ð³ÑегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ обоим множеÑÑвам даннÑÑ . ÐÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑÑиÑаÑÑ Ñвоего ÑодаÑÑнкÑией_ÑоÑÑоÑниÑ, коÑоÑÐ°Ñ Ð²Ð¼ÐµÑÑо обÑабоÑки оÑделÑной Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоки и вклÑÑÐµÐ½Ð¸Ñ ÐµÑ Ð´Ð°Ð½Ð½ÑÑ Ð² ÑекÑÑее агÑегиÑÑемое ÑоÑÑоÑние вклÑÑÐ°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑое агÑегиÑованное ÑоÑÑоÑние в ÑекÑÑее.УказаннаÑ
комбиниÑÑÑÑаÑ_ÑÑнкÑиÑдолжна бÑÑÑ Ð¾Ð±ÑÑвлена как пÑинимаÑÑÐ°Ñ Ð´Ð²Ð° аÑгÑменÑаÑипа_даннÑÑ _ÑоÑÑоÑниÑи возвÑаÑаÑÑÐ°Ñ Ð·Ð½Ð°ÑениеÑипа_даннÑÑ _ÑоÑÑоÑниÑ. ÐÑа ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑÑвлена «ÑÑÑогой». Ð ÑÑом ÑлÑÑае Ð´Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð²ÑзÑваÑÑÑÑ, когда одно из Ð²Ñ Ð¾Ð´Ð½ÑÑ ÑоÑÑоÑний â NULL; в каÑеÑÑве коÑÑекÑного ÑезÑлÑÑаÑа бÑÐ´ÐµÑ Ð²Ñдано дÑÑгое ÑоÑÑоÑние.ÐÐ»Ñ Ð°Ð³ÑегаÑнÑÑ ÑÑнкÑий, Ñ ÐºÐ¾ÑоÑÑÑ
Ñип_даннÑÑ _ÑоÑÑоÑниÑâinternal,комбиниÑÑÑÑаÑ_ÑÑнкÑиÑне должна бÑÑÑ Â«ÑÑÑогой». ÐÑи ÑÑомкомбиниÑÑÑÑаÑ_ÑÑнкÑиÑдолжна позабоÑиÑÑÑÑ Ð¾ Ñом, ÑÑÐ¾Ð±Ñ ÑоÑÑоÑÐ½Ð¸Ñ NULL обÑабаÑÑвалиÑÑ ÐºÐ¾ÑÑекÑно и возвÑаÑаемое ÑоÑÑоÑние ÑаÑполагалоÑÑ Ð² конÑекÑÑе памÑÑи агÑегиÑованиÑ.ÑÑнкÑиÑ_ÑеÑиализаÑииÐгÑегаÑÐ½Ð°Ñ ÑÑнкÑиÑ, Ñ ÐºÐ¾ÑоÑой
Ñип_даннÑÑ _ÑоÑÑоÑниÑâinternal, Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑвоваÑÑ Ð² паÑаллелÑном агÑегиÑовании, ÑолÑко еÑли Ð´Ð»Ñ Ð½ÐµÑ Ð·Ð°Ð´Ð°Ð½Ð°ÑÑнкÑиÑ_ÑеÑиализаÑии, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑеÑиализоваÑÑ Ð°Ð³ÑегаÑное ÑоÑÑоÑние в знаÑениеbyteaÐ´Ð»Ñ Ð¿ÐµÑедаÑи дÑÑÐ³Ð¾Ð¼Ñ Ð¿ÑоÑеÑÑÑ. ÐÑа ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° пÑинимаÑÑ Ð¾Ð´Ð¸Ð½ аÑгÑÐ¼ÐµÐ½Ñ Ñипаinternalи возвÑаÑаÑÑ Ñипbytea. Также пÑи ÑÑом нÑжно задаÑÑ ÑооÑвеÑÑÑвÑÑÑÑÑÑÑнкÑиÑ_деÑеÑиализаÑии.ÑÑнкÑиÑ_деÑеÑиализаÑииÐеÑеÑиализÑÐµÑ Ñанее ÑеÑиализованное агÑегаÑное ÑоÑÑоÑние обÑаÑно в
Ñип_даннÑÑ _ÑоÑÑоÑниÑ. ÐÑа ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° пÑинимаÑÑ Ð´Ð²Ð° аÑгÑменÑа Ñиповbyteaиinternalи вÑдаваÑÑ ÑезÑлÑÑÐ°Ñ Ñипаinternal. (ÐамеÑание: вÑоÑой аÑгÑÐ¼ÐµÐ½Ñ Ñипаinternalне иÑполÑзÑеÑÑÑ, но ÑÑебÑеÑÑÑ Ð¸Ð· ÑообÑажений ÑипобезопаÑноÑÑи.)наÑалÑное_ÑÑловиеÐаÑалÑное знаÑение пеÑеменной ÑоÑÑоÑниÑ. Ðно должно задаваÑÑÑÑ ÑÑÑоковой конÑÑанÑой в ÑоÑме, пÑигодной Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° в
Ñип_даннÑÑ _ÑоÑÑоÑниÑ. ÐÑли не Ñказано, наÑалÑнÑм знаÑением ÑоÑÑоÑÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ NULL.ÑÑнкÑиÑ_ÑоÑÑоÑниÑ_движÐÐ¼Ñ ÑÑнкÑии пÑÑмого пеÑÐµÑ Ð¾Ð´Ð° ÑоÑÑоÑниÑ, вÑзÑваемой Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоки в Ñежиме движÑÑегоÑÑ Ð°Ð³ÑегаÑа. ÐÑо ÑоÑно ÑÐ°ÐºÐ°Ñ Ð¶Ðµ ÑÑнкÑиÑ, как и обÑÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð°, но ÐµÑ Ð¿ÐµÑвÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¸ ÑезÑлÑÑÐ°Ñ Ð¸Ð¼ÐµÑÑ Ñип
Ñип_даннÑÑ _ÑоÑÑоÑниÑ_движ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлиÑаÑÑÑÑ Ð¾Ñ ÑипаÑип_даннÑÑ _ÑоÑÑоÑниÑ.обÑаÑнаÑ_ÑÑнкÑиÑ_движÐÐ¼Ñ ÑÑнкÑии обÑаÑного пеÑÐµÑ Ð¾Ð´Ð° ÑоÑÑоÑниÑ, пÑименÑемой в Ñежиме движÑÑегоÑÑ Ð°Ð³ÑегаÑа. У ÑÑой ÑÑнкÑии Ñе же ÑÐ¸Ð¿Ñ Ð°ÑгÑменÑа и ÑезÑлÑÑаÑов, ÑÑо и Ñ
ÑÑнкÑии_ÑоÑÑоÑниÑ_движ, но она пÑедназнаÑена не Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ, а Ð´Ð»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¸Ð· ÑекÑÑего ÑоÑÑоÑÐ½Ð¸Ñ Ð°Ð³ÑегаÑа. ФÑнкÑÐ¸Ñ Ð¾Ð±ÑаÑного пеÑÐµÑ Ð¾Ð´Ð° должна имеÑÑ ÑÑ Ð¶Ðµ Ñ Ð°ÑакÑеÑиÑÑÐ¸ÐºÑ ÑÑÑогоÑÑи, ÑÑо и ÑÑнкÑÐ¸Ñ Ð¿ÑÑмого пеÑÐµÑ Ð¾Ð´Ð°.Ñип_даннÑÑ _ÑоÑÑоÑниÑ_движТип даннÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ Ð´Ð»Ñ Ð°Ð³ÑегаÑной ÑÑнкÑии в Ñежиме движÑÑегоÑÑ Ð°Ð³ÑегаÑа.
ÑазмеÑ_даннÑÑ _ÑоÑÑоÑниÑ_движÐÑимеÑнÑй ÑÐ°Ð·Ð¼ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ Ð² Ñежиме движÑÑегоÑÑ Ð°Ð³ÑегаÑа. Ðн Ð¸Ð¼ÐµÐµÑ Ñо же знаÑение, ÑÑо и
ÑазмеÑ_даннÑÑ _ÑоÑÑоÑниÑ.ÑÑнкÑиÑ_завеÑÑениÑ_движÐÐ¼Ñ ÑÑнкÑии завеÑÑениÑ, вÑзÑваемой в Ñежиме движÑÑегоÑÑ Ð°Ð³ÑегаÑа Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ ÑезÑлÑÑаÑа агÑегаÑной ÑÑнкÑии поÑле обÑабоÑки вÑÐµÑ Ð²Ñ Ð¾Ð´Ð½ÑÑ ÑÑÑок. Ðна ÑабоÑÐ°ÐµÑ Ñак же, как
ÑÑнкÑиÑ_завеÑÑениÑ, но ÐµÑ Ð¿ÐµÑвÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¸Ð¼ÐµÐµÑ ÑипÑип_даннÑÑ _ÑоÑÑоÑниÑ_движ, а дополниÑелÑнÑми пÑÑÑÑми аÑгÑменÑами ÑпÑавлÑÐµÑ Ð¿Ð°ÑамеÑÑMFINALFUNC_EXTRA. Тип ÑезÑлÑÑаÑа, коÑоÑÑй опÑеделÑеÑÑÑнкÑиÑ_завеÑÑениÑ_движ, илиÑип_даннÑÑ _ÑоÑÑоÑниÑ_движ, должен ÑовпадаÑÑ Ñ Ñипом ÑезÑлÑÑаÑа обÑÑной ÑеализаÑии агÑегаÑа.MFINALFUNC_MODIFY= {READ_ONLY|SHAREABLE|READ_WRITE}ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾Ð´Ð¾Ð±ÐµÐ½
FINALFUNC_MODIFY, но опиÑÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ ÑÑнкÑии завеÑÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð²Ð¸Ð¶ÑÑегоÑÑ Ð°Ð³ÑегаÑа.наÑалÑное_ÑÑловие_движÐаÑалÑное знаÑение пеÑеменной ÑоÑÑоÑÐ½Ð¸Ñ Ð² Ñежиме движÑÑегоÑÑ Ð°Ð³ÑегаÑа. Ðно пÑименÑеÑÑÑ Ñак же, как
наÑалÑное_ÑÑловие.опеÑаÑоÑ_ÑоÑÑиÑовкиСвÑзаннÑй опеÑаÑÐ¾Ñ ÑоÑÑиÑовки Ð´Ð»Ñ ÑеализаÑии агÑегаÑов, подобнÑÑ
MINилиMAX. ÐдеÑÑ ÑказÑваеÑÑÑ Ð¿ÑоÑÑо Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑа (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹). ÐÑедполагаеÑÑÑ, ÑÑо опеÑаÑÐ¾Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñе же ÑÐ¸Ð¿Ñ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑÑо и агÑÐµÐ³Ð°Ñ (коÑоÑÑй должен бÑÑÑ Ð¾Ð±ÑÑнÑм и имеÑÑ Ð¾Ð´Ð¸Ð½ аÑгÑменÑ).PARALLEL ={SAFE|RESTRICTED|UNSAFE}УказаниÑ
PARALLEL SAFE,PARALLEL RESTRICTEDиPARALLEL UNSAFEимеÑÑ Ñе же знаÑениÑ, ÑÑо и в CREATE FUNCTION. ÐгÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð½Ðµ бÑÐ´ÐµÑ ÑÑиÑаÑÑÑÑ ÑаÑпаÑаллеливаемой, еÑли она Ð¸Ð¼ÐµÐµÑ Ñ Ð°ÑакÑеÑиÑÑикÑPARALLEL UNSAFE(она подÑазÑмеваеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ!) илиPARALLEL RESTRICTED. ÐамеÑÑÑе, ÑÑо планиÑовÑик не обÑаÑÐ°ÐµÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ на допÑÑÑимоÑÑÑ ÑаÑпаÑÐ°Ð»Ð»ÐµÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿Ð¾ÑнÑÑ ÑÑнкÑий агÑегаÑа, а ÑÑиÑÑÐ²Ð°ÐµÑ ÑолÑко Ñ Ð°ÑакÑеÑиÑÑÐ¸ÐºÑ Ñамой агÑегаÑной ÑÑнкÑии.HYPOTHETICALÐÑÐ¾Ñ Ð¿Ñизнак, допÑÑÑимÑй ÑолÑко Ð´Ð»Ñ ÑоÑÑиÑÑÑÑÐ¸Ñ Ð°Ð³ÑегаÑов, ÑказÑваеÑ, ÑÑо агÑегаÑнÑе аÑгÑменÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¾Ð±ÑабаÑÑваÑÑÑÑ ÑоглаÑно ÑÑебованиÑм гипоÑезиÑÑÑÑÐ¸Ñ Ð°Ð³ÑегаÑов: Ñо еÑÑÑ Ð¿Ð¾Ñледние неÑколÑко непоÑÑедÑÑвеннÑÑ Ð°ÑгÑменÑов Ð´Ð¾Ð»Ð¶Ð½Ñ ÑооÑвеÑÑÑвоваÑÑ Ð¿Ð¾ Ñипам агÑегаÑнÑм аÑгÑменÑам (
WITHIN GROUP). ÐÑизнакHYPOTHETICALне влиÑÐµÑ Ð½Ð° поведение во вÑÐµÐ¼Ñ Ð²ÑполнениÑ, он ÑÑиÑÑваеÑÑÑ ÑолÑко пÑи ÑазÑеÑении Ñипов даннÑÑ Ð¸ пÑавил ÑоÑÑиÑовки аÑгÑменÑов.
ÐаÑамеÑÑÑ CREATE AGGREGATE могÑÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑÑÑ Ð² лÑбом поÑÑдке, не обÑзаÑелÑно Ñак, как показано вÑÑе.
ÐамеÑаниÑ
РпаÑамеÑÑаÑ
, опÑеделÑÑÑиÑ
имена вÑпомогаÑелÑнÑÑ
ÑÑнкÑий, пÑи необÑ
одимоÑÑи можно напиÑаÑÑ Ð¸Ð¼Ñ ÑÑ
емÑ, напÑимеÑ: SFUNC = public.sum. Ðднако ÑÐ¸Ð¿Ñ Ð°ÑгÑменÑов Ñам не ÑказÑваÑÑÑÑ â ÑÐ¸Ð¿Ñ Ð°ÑгÑменÑов вÑпомогаÑелÑнÑÑ
ÑÑнкÑий опÑеделÑÑÑÑÑ Ð´ÑÑгими паÑамеÑÑами.
ÐбÑÑно ÑÑнкÑии Postgres Pro Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑно ÑÑнкÑиÑми, не менÑÑÑими Ñвои Ð²Ñ Ð¾Ð´Ð½Ñе знаÑениÑ. Ðднако ÑÑнкÑиÑм агÑегаÑного пеÑÐµÑ Ð¾Ð´Ð°, иÑполÑзÑемÑм в конÑекÑÑе агÑегаÑной ÑÑнкÑии, ÑазÑеÑено дейÑÑвоваÑÑ Ñ Ð¸ÑÑее и изменÑÑÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð½Ñм ÑоÑÑоÑнием на меÑÑе. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð´Ð°ÑÑ Ð·Ð½Ð°ÑиÑелÑнÑй вÑигÑÑÑ Ð² ÑкоÑоÑÑи по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ñозданием новой копии пеÑÐµÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑоÑÑоÑÐ½Ð¸Ñ Ð¿Ñи каждом вÑзове.
ÐодобнÑм обÑазом, Ñ
оÑÑ ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð°Ð³ÑегаÑа обÑÑно не должна изменÑÑÑ Ñвои вÑ
однÑе знаÑениÑ, иногда Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ допÑÑÑиÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ аÑгÑменÑа Ñ Ð¿ÐµÑеÑ
однÑм ÑоÑÑоÑнием. СооÑвеÑÑÑвÑÑÑее поведение должно обознаÑаÑÑÑÑ Ð¿Ð°ÑамеÑÑом FINALFUNC_MODIFY. Ðго знаÑение READ_WRITE показÑваеÑ, ÑÑо ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð´Ð¸ÑиÑиÑÑÐµÑ Ð¿ÐµÑеÑ
одное ÑоÑÑоÑние неопÑеделÑннÑм обÑазом. ÐÑи ÑÑом знаÑении пÑедоÑвÑаÑаеÑÑÑ Ð¸ÑполÑзование агÑегаÑа в каÑеÑÑве оконной ÑÑнкÑии, а Ñакже не допÑÑкаеÑÑÑ Ð¾Ð±Ñединение пеÑеÑ
однÑÑ
ÑоÑÑоÑний пÑи вÑзове агÑегаÑов Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми вÑ
однÑми даннÑми и ÑÑнкÑиÑми пеÑеÑ
ода. ÐнаÑение SHAREABLE ÑказÑваеÑ, ÑÑо ÑÑнкÑÐ¸Ñ Ð¿ÐµÑеÑ
ода нелÑÐ·Ñ Ð¿ÑименÑÑÑ Ð¿Ð¾Ñле ÑÑнкÑии завеÑÑениÑ, но Ñ ÐºÐ¾Ð½ÐµÑнÑм знаÑением ÑоÑÑоÑÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð½ÐµÑколÑко вÑзовов ÑÑнкÑии завеÑÑениÑ. ÐÑи ÑÑом знаÑении пÑедоÑвÑаÑаеÑÑÑ Ð¸ÑполÑзование агÑегаÑа в каÑеÑÑве оконной ÑÑнкÑии, но пеÑеÑ
однÑе ÑоÑÑоÑÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¾Ð±ÑединÑÑÑÑÑ. (То еÑÑÑ Ð¾Ð¿ÑимизаÑÐ¸Ñ Ð² данном ÑлÑÑае ÑоÑÑÐ¾Ð¸Ñ Ð½Ðµ в многокÑаÑном пÑименении одной ÑÑнкÑии завеÑÑениÑ, а в пÑименении ÑазлиÑнÑÑ
ÑÑнкÑий завеÑÑÐµÐ½Ð¸Ñ Ðº Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸ ÑÐ¾Ð¼Ñ Ð¶Ðµ конеÑÐ½Ð¾Ð¼Ñ Ð¿ÐµÑеÑ
Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑоÑÑоÑниÑ. ÐÑо допÑÑкаеÑÑÑ, ÑолÑко еÑли ни одна из ÑÑнкÑий завеÑÑÐµÐ½Ð¸Ñ Ð½Ðµ помеÑена как READ_WRITE.)
ÐÑли агÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñежим движÑÑегоÑÑ Ð°Ð³ÑегаÑа, ÑÑо ÑвелиÑÐ¸Ð²Ð°ÐµÑ ÑÑÑекÑивноÑÑÑ Ð²ÑÑиÑлений, когда она пÑименÑеÑÑÑ Ð² каÑеÑÑве оконной ÑÑнкÑии Ð´Ð»Ñ Ð¾ÐºÐ½Ð° Ñ Ð´Ð²Ð¸Ð¶ÑÑимÑÑ Ð½Ð°Ñалом Ñамки (Ñо еÑÑÑ ÐºÐ¾Ð³Ð´Ð° наÑало опÑеделÑеÑÑÑ Ð½Ðµ как UNBOUNDED PRECEDING). Ðо ÑÑÑи, ÑÑнкÑÐ¸Ñ Ð¿ÑÑмого пеÑеÑ
ода добавлÑÐµÑ Ð²Ñ
однÑе знаÑÐµÐ½Ð¸Ñ Ðº ÑоÑÑоÑÐ½Ð¸Ñ Ð°Ð³ÑегаÑа, когда они поÑÑÑпаÑÑ Ð² ÑÐ°Ð¼ÐºÑ Ð¾ÐºÐ½Ð° ÑнизÑ, а ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑаÑного пеÑеÑ
ода Ñнова вÑÑиÑÐ°ÐµÑ Ð¸Ñ
, когда они покидаÑÑ ÑÐ°Ð¼ÐºÑ ÑвеÑÑ
Ñ. ÐоÑÑÐ¾Ð¼Ñ Ð²ÑÑиÑаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² Ñом же поÑÑдке, в каком добавлÑлиÑÑ. Ðогда Ð±Ñ Ð½Ð¸ вÑзÑвалаÑÑ ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑаÑного пеÑеÑ
ода, она Ñаким обÑазом полÑÑÐ¸Ñ Ð¿ÐµÑвое из добавленнÑÑ
, но еÑÑ Ð½Ðµ ÑдалÑннÑÑ
знаÑений аÑгÑменÑа. ФÑнкÑÐ¸Ñ Ð¾Ð±ÑаÑного пеÑеÑ
ода Ð¼Ð¾Ð¶ÐµÑ ÑаÑÑÑиÑÑваÑÑ Ð½Ð° Ñо, ÑÑо поÑле Ñого, как она ÑÐ´Ð°Ð»Ð¸Ñ ÑамÑе ÑÑаÑÑе даннÑе, в ÑекÑÑем ÑоÑÑоÑнии оÑÑанеÑÑÑ ÐµÑÑ ÐºÐ°Ðº минимÑм одна ÑÑÑока. (Ðогда ÑÑо пÑавило могло Ð±Ñ Ð½Ð°ÑÑÑиÑÑÑÑ, меÑ
анизм оконнÑÑ
ÑÑнкÑий пÑоÑÑо наÑÐ¸Ð½Ð°ÐµÑ Ð°Ð³ÑегиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе заново, а не вÑзÑÐ²Ð°ÐµÑ ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑаÑного пеÑеÑ
ода.)
ФÑнкÑÐ¸Ñ Ð¿ÑÑмого пеÑÐµÑ Ð¾Ð´Ð° Ð´Ð»Ñ Ñежима движÑÑегоÑÑ Ð°Ð³ÑегаÑа не Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ NULL в каÑеÑÑве нового знаÑÐµÐ½Ð¸Ñ ÑоÑÑоÑниÑ. ÐÑли NULL возвÑаÑÐ°ÐµÑ ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑаÑного пеÑÐµÑ Ð¾Ð´Ð°, ÑÑо показÑваеÑ, ÑÑо она не Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизвеÑÑи обÑаÑное вÑÑиÑление Ð´Ð»Ñ ÑÑÐ¸Ñ ÐºÐ¾Ð½ÐºÑеÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ , и ÑÑо вÑÑиÑление агÑегаÑа ÑледÑÐµÑ Ð²ÑполниÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾ Ð¾Ñ Ð½Ð°ÑалÑной позиÑии ÑекÑÑей Ñамки. ÐлагодаÑÑ ÑÑÐ¾Ð¼Ñ ÑоглаÑениÑ, Ñежим движÑÑегоÑÑ Ð°Ð³ÑегаÑа можно иÑполÑзоваÑÑ, даже еÑли иногда возникаÑÑ ÑиÑÑаÑии, в коÑоÑÑÑ Ð¾Ð±ÑаÑнÑй ÑаÑÑÑÑ ÑоÑÑоÑÐ½Ð¸Ñ Ð¿ÑоизводиÑÑ Ð½ÐµÐ¿ÑакÑиÑно.
ÐгÑегаÑнÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ñ Ð´Ð²Ð¸Ð¶ÑÑимиÑÑ Ñамками и без ÑеализаÑии движÑÑегоÑÑ Ð°Ð³ÑегаÑа, но пÑи ÑÑом Postgres Pro бÑÐ´ÐµÑ Ð·Ð°Ð½Ð¾Ð²Ð¾ агÑегиÑоваÑÑ Ð²Ñе даннÑе пÑи каждом пеÑемеÑении наÑала Ñамки. ÐамеÑÑÑе, ÑÑо вне завиÑимоÑÑи Ð¾Ñ Ñого, поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð»Ð¸ агÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ñежим движÑÑегоÑÑ Ð°Ð³ÑегаÑа, Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±Ð¾Ð¹ÑиÑÑ Ð±ÐµÐ· повÑоÑнÑÑ Ð²ÑÑиÑлений пÑи Ñдвиге конÑа Ñамки; новÑе знаÑÐµÐ½Ð¸Ñ Ð¿ÑоÑÑо пÑодолжаÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑÑÑ Ð² ÑоÑÑоÑние агÑегаÑа. Ðменно поÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ð³ÑегаÑа в каÑеÑÑве оконной ÑÑнкÑии ÑÑебÑеÑÑÑ, ÑÑÐ¾Ð±Ñ ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð±Ñла ÑолÑко ÑиÑаÑÑей: она не должна изменÑÑÑ Ð·Ð½Ð°Ñение ÑоÑÑоÑÐ½Ð¸Ñ Ð°Ð³ÑегаÑа, ÑÑÐ¾Ð±Ñ Ð°Ð³ÑегиÑование могло пÑодолжаÑÑÑÑ Ð¸ поÑле полÑÑÐµÐ½Ð¸Ñ ÑезÑлÑÑаÑа Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñа ÑÑÑок в опÑеделÑнной Ñамке.
СинÑакÑÐ¸Ñ ÑоÑÑиÑÑÑÑиÑ
агÑегаÑнÑÑ
ÑÑнкÑий позволÑÐµÑ ÑказаÑÑ VARIADIC и в поÑледнем непоÑÑедÑÑвенном паÑамеÑÑе, и в поÑледнем агÑегаÑном (WITHIN GROUP). Ðднако в ÑекÑÑей ÑеализаÑии на пÑименение VARIADIC накладÑваÑÑÑÑ Ð´Ð²Ð° огÑаниÑениÑ. Ðо-пеÑвÑÑ
, в ÑоÑÑиÑÑÑÑиÑ
агÑегаÑаÑ
можно иÑполÑзоваÑÑ ÑолÑко VARIADIC "any", но не дÑÑгие ÑÐ¸Ð¿Ñ Ð¿ÐµÑеменнÑÑ
маÑÑивов. Ðо-вÑоÑÑÑ
, еÑли поÑледним непоÑÑедÑÑвеннÑм аÑгÑменÑом ÑвлÑеÑÑÑ VARIADIC "any", Ñо допÑÑкаеÑÑÑ ÑолÑко один агÑегаÑнÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¸ ÑÑо Ñоже должен бÑÑÑ VARIADIC "any". (РпÑедÑÑавлении, иÑполÑзÑемом в ÑиÑÑемнÑÑ
каÑалогаÑ
, ÑÑи два паÑамеÑÑа обÑединÑÑÑÑÑ Ð² один ÑÐ»ÐµÐ¼ÐµÐ½Ñ VARIADIC "any", Ñак как в pg_proc нелÑÐ·Ñ Ð¿ÑедÑÑавиÑÑ ÑÑнкÑÐ¸Ñ Ñ Ð½ÐµÑколÑкими паÑамеÑÑами VARIADIC.) ÐÑли агÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ ÑвлÑеÑÑÑ Ð³Ð¸Ð¿Ð¾ÑезиÑÑÑÑей, непоÑÑедÑÑвеннÑе аÑгÑменÑÑ, ÑооÑвеÑÑÑвÑÑÑие паÑамеÑÑÑ VARIADIC "any", бÑдÑÑ Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑкими; лÑбÑе пÑедÑеÑÑвÑÑÑие паÑамеÑÑÑ Ð¿ÑедÑÑавлÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе непоÑÑедÑÑвеннÑе аÑгÑменÑÑ, коÑоÑÑе могÑÑ Ð½Ðµ ÑооÑвеÑÑÑвоваÑÑ Ð°Ð³ÑегаÑнÑм.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑоÑÑиÑÑÑÑие агÑегаÑнÑе ÑÑнкÑии не поддеÑживаÑÑ Ñежим движÑÑегоÑÑ Ð°Ð³ÑегаÑа, Ñак как Ð¸Ñ Ð½ÐµÐ»ÑÐ·Ñ Ð¿ÑименÑÑÑ Ð² каÑеÑÑве оконнÑÑ ÑÑнкÑий.
ЧаÑÑиÑное (в Ñом ÑиÑле, паÑаллелÑное) агÑегиÑование в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ поддеÑживаеÑÑÑ Ð´Ð»Ñ ÑоÑÑиÑÑÑÑиÑ
агÑегаÑнÑÑ
ÑÑнкÑий. Также оно никогда не бÑÐ´ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð´Ð»Ñ Ð°Ð³ÑегаÑнÑÑ
вÑзовов Ñ Ð¿ÑедложениÑми DISTINCT или ORDER BY, Ñак как они по пÑиÑоде Ñвоей не могÑÑ Ð±ÑÑÑ ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ Ñ ÑаÑÑиÑнÑм агÑегиÑованием.
ÐÑимеÑÑ
См. Раздел 36.12.
СовмеÑÑимоÑÑÑ
ÐпеÑаÑÐ¾Ñ CREATE AGGREGATE ÑвлÑеÑÑÑ ÑзÑковÑм ÑаÑÑиÑением Postgres Pro. Ð ÑÑандаÑÑе SQL не пÑедÑÑмоÑÑено Ñоздание полÑзоваÑелÑÑкиÑ
агÑегаÑнÑÑ
ÑÑнкÑий.