Начало работы
Подключение
Тесты производительности
Развёртывание
Использование данных
Загрузка данных
Миграция данных
Запрос данных
Управление кластерами
Обновление
Глобальное обслуживание
Масштабирование
Мониторинг
Безопасность
Лучшие практики
Технические принципы
Типы данных
Хранилище
Исполняющий движок
Потоковая обработка (Domino)
MARS3 Индексы
Расширения
Расширенные функции
Расширенный запрос
Федеративные запросы
Grafana
Резервное копирование и восстановление
Аварийное восстановление
Руководство
Настройка производительности
Устранение неполадок
Инструменты
Параметры конфигурации
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.