Иллюстрированный самоучитель по PostgreSQL

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.

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

Внимание
Во избежание недоразумений не пытайтесь создавать обычные функции с такими же именами и типами входных данных, что и у агрегатных функций. При возникновении конфликта агрегатные функции обладают более высоким приоритетом
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.