ALTER AGGREGATE

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


Синтаксис

ALTER AGGREGATE имя ( сигнатура_агрегата ) RENAME TO новое_имя
ALTER AGGREGATE имя ( сигнатура_агрегата )
                OWNER TO { новый_владелец | CURRENT_USER | SESSION_USER }
ALTER AGGREGATE имя ( сигнатура_агрегата ) SET SCHEMA новая_схема

Где сигнатура_агрегата:

* |
[ режим_аргумента ] [ имя_аргумента ] тип_аргумента [ , ... ] |
[ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [ , ... ] ] ORDER BY [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [ , ... ]

Описание

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

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


Параметры

имя

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

режим_аргумента

Режим аргумента: IN или VARIADIC. Если этот параметр не указан, значением по умолчанию является IN.

имя_аргумента

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

тип_аргумента

Тип входных данных, с которыми работает агрегатная функция. Чтобы сослаться на агрегатную функцию без аргументов, вместо списка определений аргументов напишите *. Чтобы сослаться на сортирующую агрегатную функцию, напишите ORDER BY между указаниями непосредственных и агрегируемых аргументов.

новое_имя

Новое имя агрегатной функции.

новый_владелец

Новый владелец агрегатной функции.

новая_схема

Новая схема для агрегатной функции.


Примечания

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


Примеры

Переименование агрегатной функции 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;

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

В стандарте SQL нет команды ALTER AGGREGATE.


См. также

CREATE AGGREGATE, DROP AGGREGATE