Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Изменяет определение сортировки.
ALTER COLLATION <name> REFRESH VERSION
ALTER COLLATION <name> RENAME TO <new_name>
ALTER COLLATION <name> OWNER TO { <new_owner> | CURRENT_USER | SESSION_USER }
ALTER COLLATION <name> SET SCHEMA <new_schema>
Оператор ALTER COLLATION изменяет определение сортировки.
Чтобы использовать ALTER COLLATION, вы должны быть владельцем соответствующей сортировки. Чтобы изменить владельца, вы также должны быть прямым или косвенным членом новой роли-владельца, и эта роль должна обладать привилегией CREATE в схеме, которой принадлежит сортировка. (Эти ограничения гарантируют, что изменение владельца не позволяет выполнить ничего такого, что нельзя было бы сделать путём удаления и повторного создания сортировки. Однако суперпользователь может изменить владельца любой сортировки.)
При использовании сортировок, предоставляемых библиотекой ICU, конкретная для ICU версия компаратора записывается в системный каталог при создании объекта сортировки. При использовании сортировки текущая версия сравнивается с сохранённой, и при несоответствии выводится предупреждение, например:
WARNING: collation "xx-x-icu" has version mismatch
DETAIL: The collation in the database was created using version 1.2.3.4, but the operating system provides version 2.3.4.5.
HINT: Rebuild all objects affected by this collation and run ALTER COLLATION pg_catalog."xx-x-icu" REFRESH VERSION, or build PostgreSQL with the right library version.
Изменение определений сортировки может привести к повреждению индексов и другим проблемам, поскольку система базы данных полагается на определённый порядок сортировки хранимых объектов. Как правило, этого следует избегать, но в некоторых случаях это допустимо, например при использовании pg_upgrade для обновления до двоичных файлов сервера, связанных с более новой версией ICU. В этом случае все объекты, зависящие от сортировки, должны быть перестроены, например с помощью команды REINDEX. После этого версию сортировки можно обновить с помощью команды ALTER COLLATION ... REFRESH VERSION. Это приведёт к обновлению системного каталога, в котором будет зафиксирована текущая версия компаратора, и устранению предупреждения. Обратите внимание, что данная команда фактически не проверяет, были ли все затронутые объекты корректно перестроены.
Следующий запрос можно использовать для поиска всех сортировок в текущей базе данных, требующих обновления, а также объектов, которые от них зависят:
SELECT pg_describe_object(refclassid, refobjid, refobjsubid) AS "Collation",
pg_describe_object(classid, objid, objsubid) AS "Object"
FROM pg_depend d JOIN pg_collation c
ON refclassid = 'pg_collation'::regclass AND refobjid = c.oid
WHERE c.collversion <> pg_collation_actual_version(c.oid)
ORDER BY 1, 2;
Переименование сортировки de_DE в german:
ALTER COLLATION "de_DE" RENAME TO german;
Изменение владельца сортировки en_US на joe:
ALTER COLLATION "en_US" OWNER TO joe;
В стандарте SQL отсутствует оператор ALTER COLLATION.