ALTER AGGREGATE#

ALTER AGGREGATE

ALTER AGGREGATE

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

Синтаксис

ALTER AGGREGATE name ( aggregate_signature ) RENAME TO new_name
ALTER AGGREGATE name ( aggregate_signature )
                OWNER TO { new_owner | CURRENT_ROLE | 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 на схеме агрегатной функции. (Эти ограничения обеспечивают, что изменение владельца не делает ничего, что вы не могли бы сделать, удалив и создав агрегатную функцию заново. Однако суперпользователь может изменить владельца любой агрегатной функции в любом случае).

Параметры

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.