CREATE AGGREGATE
Определение новой агрегатной функции в базе данных.
Синтаксис:
CREATE AGGREGATE имя (BASETYPE = входной_тип [, SFUNC = функция. STYPE = переходный_тип ] [, FINALFUNC = завершающая_функция ] [, INITCOND = начальное_состояние ])
Параметры:
- имя. Имя создаваемой агрегатной функции.
- входной_тип. Тип входных данных, с которыми работает создаваемая функция. Если агрегатная функция игнорирует входные данные (как, например, функция count()), вместо типа данных указывается строковая константа ANY.
- функция. Имя функции, вызываемой для обработки всех входных данных, отличных от NULL. Обычно такая функция получает два аргумента: первый аргумент относится к типу данных переходный_тип, а второй – к типу данных входной_тип. Если агрегатная функция не анализирует входные данные, она получает только один аргумент типа переходный_тип. Так или иначе, функция должна возвращать значение типа переходный_тип.
- переходный_тип. Промежуточный тип данных агрегатной функции.
- завершающая_функция. Имя итоговой функции, вызываемой для вычисления результата агрегатной функции после обработки всех входных данных. Функция должна получать один аргумент типа переходный_тип. Выходной тип данных агрегатной функции определяется типом возвращаемого значения этой функции. Если параметр FINALFUNC не указан, то последнее переходное значение передается в качестве результата агрегатной функции, а выходной тип данных определяется типом переходный_тип.
- начальное_состояние. Начальное состояние промежуточного значения агрегатной функции. Задается литералом типа переходный_тип. Если параметр начальное_состояние не задан, промежуточное значение инициализируется псевдозначением NULL.
Результаты:
- CREATE. Сообщение выдается при успешном создании агрегатной функции.
- ERROR: AggregateCreate: function "функция(переходпый_тип. входной_тип)" does not exist. Ошибка – заданная функция с двумя параметрами типов переходный_тип и входной_тип не существует.
- ERROR: AggregateCreate: function "функция(переходпый_тип)" does not exist. Ошибка – заданная функция с одним параметром типа переходный_тип не существует. Сообщение выдается только в том случае, если параметр входной_ тип равен ANY.
Описание
Команда CREATE AGGREGATE предназначена для определения новых агрегатных функций в PostgreSQL Самые распространенные агрегатные функции (min(), avg(), max() и т. д.) принадлежат к числу стандартных функций PostgreSQL. За дополнительной информацией о стандартных функциях PostgreSQL обращайтесь к главе 5.
Агрегатные функции характеризуются в первую очередь типом входных данных. Допускается существование двух и более агрегатных функций с одинаковыми именами, вызываемых с разными типами данных (это называется перегрузкой функций).
Внимание
Во избежание недоразумений не пытайтесь создавать обычные функции с такими же именами и типами входных данных, что и у агрегатных функций. При возникновении конфликта агрегатные функции обладают более высоким приоритетом.