51.2. pg_aggregate #

В каталоге pg_aggregate хранится информация об агрегатных функциях. Агрегатная функция — это такая функция, которая работает с множеством значений (обычно, с содержимым одного столбца всех строк, удовлетворяющих условию запроса) и возвращает одно значение, вычисленное по этому множеству. Типичные агрегатные функции — sum, count и max. Все записи в pg_aggregate представляют собой дополнение записей в pg_proc. Запись в pg_proc определяет имя агрегатной функции, типы входных и выходных данных, а также другие свойства, подобные имеющимся у обычных функций.

Таблица 51.2. Столбцы pg_aggregate

Тип столбца

Описание

aggfnoid regproc (ссылается на pg_proc.oid)

OID агрегатной функции в pg_proc

aggkind char

Тип агрегатной функции: n — обычная («normal»), o — сортирующая («ordered-set») или h — гипотезирующая («hypothetical-set»)

aggnumdirectargs int2

Число непосредственных (не агрегируемых) аргументов для сортирующей или гипотезирующей агрегатной функции (переменный массив аргументов считается одним аргументом). Если равняется pronargs, агрегатная функция должна принимать переменный массив и этот массив описывает как агрегатные аргументы, так и окончательные непосредственные аргументы. Всегда равно нулю для обычных агрегатных функций.

aggtransfn regproc (ссылается на pg_proc.oid)

Функция перехода

aggfinalfn regproc (ссылается на pg_proc.oid)

Функция завершения (ноль, если её нет)

aggcombinefn regproc (ссылается на pg_proc.oid)

Комбинирующая функция (ноль, если её нет)

aggserialfn regproc (ссылается на pg_proc.oid)

Функция сериализации (ноль, если её нет)

aggdeserialfn regproc (ссылается на pg_proc.oid)

Функция десериализации (ноль, если её нет)

aggmtransfn regproc (ссылается на pg_proc.oid)

Функция прямого перехода для режима движущегося агрегата (ноль, если её нет)

aggminvtransfn regproc (ссылается на pg_proc.oid)

Функция обратного перехода для режима движущегося агрегата (ноль, если её нет)

aggmfinalfn regproc (ссылается на pg_proc.oid)

Функция завершения для режима движущегося агрегата (ноль, если её нет)

aggfinalextra bool

Со значением True в aggfinalfn передаются дополнительные фиктивные аргументы

aggmfinalextra bool

Со значением True в aggmfinalfn передаются дополнительные фиктивные аргументы

aggfinalmodify char

Признак модифицирования переходного состояния функцией aggfinalfn: r, если состояние только читается; s, если функцию aggtransfn нельзя применять после aggfinalfn; и w, если состояние перезаписывается

aggmfinalmodify char

Аналогично aggfinalmodify, но для aggmfinalfn

aggsortop oid (ссылается на pg_operator.oid)

Связанный оператор сортировки (ноль, если его нет)

aggtranstype oid (ссылается на pg_type.oid)

Тип данных внутреннего состояния (перехода) агрегатной функции

aggtransspace int4

Приблизительный средний размер (в байтах) данных состояния перехода, либо ноль для выбора значения по умолчанию

aggmtranstype oid (ссылается на pg_type.oid)

Тип данных внутреннего состояния (перехода) для агрегатной функции в режиме движущегося агрегата (ноль в случае отсутствия)

aggmtransspace int4

Приблизительный средний размер (в байтах) данных состояния перехода для режима движущегося агрегата, либо ноль для выбора значения по умолчанию

agginitval text

Начальное значение для состояния перехода. Это текстовое поле, содержащее значение в виде внешнего строкового представления. Если это поле содержит NULL, начальным значением состояния перехода будет NULL.

aggminitval text

Начальное значение для состояния перехода в режиме движущегося агрегата. Это текстовое поле, содержащее значение в виде внешнего строкового представления. Если это поле содержит NULL, начальным значением состояния перехода будет NULL.


Новые агрегатные функции создаются командой CREATE AGGREGATE. За дополнительными сведениями о разработке агрегатных функций, значении функций перехода и т. д. обратитесь к Разделу 36.12.