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