ALTER AGGREGATE

Изменяет определение агрегатной функции

Синтаксис

ALTER AGGREGATE <name> ( <aggregate_signature> )  RENAME TO <new_name>

ALTER AGGREGATE <name> ( <aggregate_signature> )
                 OWNER TO { <new_owner> | CURRENT_USER | SESSION_USER }

ALTER AGGREGATE <name> ( <aggregate_signature> ) SET SCHEMA <new_schema>

where <aggregate_signature> is:

* |
[ <argmode> ] [ <argname> ] <argtype> [ , ... ] |
[ [ <argmode> ] [ <argname> ] <argtype> [ , ... ] ] ORDER BY [ <argmode> ] [ <argname> ] <argtype> [ , ... ]

Описание

ALTER AGGREGATE изменяет определение агрегатной функции.

Чтобы использовать ALTER AGGREGATE, вы должны быть владельцем агрегатной функции. Чтобы изменить схему агрегатной функции, вы также должны иметь привилегию CREATE в новой схеме. Чтобы изменить владельца, вы также должны быть прямым или косвенным членом новой роли-владельца, и эта роль должна обладать привилегией CREATE в схеме агрегатной функции. (Эти ограничения обеспечивают то, что изменение владельца не позволяет сделать ничего такого, что нельзя было бы сделать путём удаления и повторного создания агрегатной функции. Однако суперпользователь может изменить владельца любой агрегатной функции.)

Параметры

Рекомендуемый способ ссылки на агрегатную функцию упорядоченного набора — указать ORDER BY между спецификациями прямых и агрегируемых аргументов, аналогично CREATE AGGREGATE. Тем не менее, можно также опустить ORDER BY и просто объединить прямые и агрегируемые аргументы в один список. В этой краткой форме, если VARIADIC "any" использовался как в списке прямых, так и в списке агрегируемых аргументов, VARIADIC "any" следует указывать только один раз.

Замечания

  • name
    • Имя (опционально с указанием схемы) существующей агрегатной функции.
  • argmode
    • Режим аргумента: IN или VARIADIC. Если не указано, по умолчанию используется IN.
  • argname
    • Имя аргумента. Обратите внимание, что ALTER AGGREGATE фактически не учитывает имена аргументов, поскольку для определения идентичности агрегатной функции требуются только типы данных аргументов.
  • argtype
    • Тип входных данных, с которым работает агрегатная функция. Чтобы сослаться на агрегатную функцию без аргументов, используйте * вместо списка спецификаций аргументов. Чтобы сослаться на агрегатную функцию упорядоченного набора, укажите ORDER BY между спецификациями прямых и агрегируемых аргументов.
  • new_name
    • Новое имя агрегатной функции.
  • new_owner
    • Новый владелец агрегатной функции.
  • new_schema
    • Новая схема для агрегатной функции.

Примеры

Переименовать агрегатную функцию myavg для типа integer в my_average:

ALTER AGGREGATE myavg(integer) RENAME TO my_average;

Изменить владельца агрегатной функции myavg для типа integer на joe:

ALTER AGGREGATE myavg(integer) OWNER TO joe;

Переместить агрегатную функцию упорядоченного набора mypercentile с прямым аргументом типа float8 и агрегируемым аргументом типа integer в схему myschema:

ALTER AGGREGATE mypercentile(float8 ORDER BY integer) SET SCHEMA myschema;

Также будет работать следующий вариант:

ALTER AGGREGATE mypercentile(float8, integer) SET SCHEMA myschema;

Совместимость

Оператор ALTER AGGREGATE отсутствует в стандарте SQL.

Смотрите также

CREATE AGGREGATE, DROP AGGREGATE