49.2. pg_aggregate

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

Таблица 49.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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

aggtransspace int4

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

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

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

aggmtransspace int4

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

agginitval text

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

aggminitval text

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


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