Перейти к основному содержимому

ALTER AGGREGATE

примечание

Эта страница переведена при помощи нейросети GigaChat.

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 на новую схему. Для того чтобы изменить владельца, нужно иметь право 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.

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

CREATE AGGREGATE, DROP AGGREGATE.