ALTER AGGREGATE — изменение определения агрегатной функции
ALTER AGGREGATEname(aggregate_signature) RENAME TOnew_nameALTER AGGREGATEname(aggregate_signature) OWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER AGGREGATEname(aggregate_signature) SET SCHEMAnew_schemaгдеaggregate_signatureимеет следующий вид: * | [argmode] [argname]argtype[ , ... ] | [ [argmode] [argname]argtype[ , ... ] ] ORDER BY [argmode] [argname]argtype[ , ... ]
ALTER AGGREGATE изменяет определение агрегатной функции.
Чтобы выполнить команду ALTER AGGREGATE, вы должны быть владельцем агрегатной функции.
Для изменения схемы агрегатной функции необходимо также иметь
привилегию CREATE в новой схеме.
Для изменения владельца вы должны иметь возможность выполнить SET ROLE для
новой владеющей роли, и эта роль должна иметь привилегию CREATE
в схеме агрегатной функции.
(Эти ограничения гарантируют, что изменение
владельца не позволяет сделать ничего, чего нельзя было бы сделать удалением и повторным созданием
агрегатной функции. Однако суперпользователь может изменить владельца любой
агрегатной функции в любом случае.)
nameИмя (возможно, дополненное схемой) существующей агрегатной функции.
argmode
Режим аргумента: IN или VARIADIC.
Если опущен, по умолчанию используется IN.
argname
Имя аргумента.
Обратите внимание, что команда ALTER AGGREGATE фактически не учитывает
имена аргументов, так как для определения идентификатора агрегатной функции
необходимы только типы данных аргументов.
argtype
Входной тип данных, над которым работает агрегатная функция.
Для ссылки на агрегатную функцию без аргументов напишите *
вместо списка спецификаций аргументов.
Для ссылки на упорядоченную агрегатную функцию напишите
ORDER BY между спецификациями прямых и агрегируемых аргументов.
new_nameНовое имя агрегатной функции.
new_ownerНовый владелец агрегатной функции.
new_schemaНовая схема для агрегатной функции.
Рекомендуемый синтаксис для ссылки на упорядоченную агрегатную функцию
— написать 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.