ALTER AGGREGATE
ALTER AGGREGATE — изменить определение агрегатной функции
Синтаксис
ALTER AGGREGATEимя
(сигнатура_агр_функции
) RENAME TOновое_имя
ALTER AGGREGATEимя
(сигнатура_агр_функции
) OWNER TO {новый_владелец
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER AGGREGATEимя
(сигнатура_агр_функции
) SET SCHEMAновая_схема
Здесьсигнатура_агр_функции
: * | [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ] | [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ] ] ORDER BY [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ]
Описание
ALTER AGGREGATE
изменяет определение агрегатной функции.
Выполнить ALTER AGGREGATE
может только владелец соответствующей агрегатной функции. Чтобы сменить схему агрегатной функции, необходимо также иметь право CREATE
в новой схеме. Чтобы сменить владельца, необходимо иметь право SET ROLE
для новой роли-владельца, а эта роль должна иметь право 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;
Совместимость
Оператор ALTER AGGREGATE
отсутствует в стандарте SQL.