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
.