ALTER COLLATION

Изменяет определение сортировки.

Синтаксис

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

Параметры

  • name
    • Имя существующей сортировки (при необходимости — с указанием схемы).
  • new_name
    • Новое имя сортировки.
  • new_owner
    • Новый владелец сортировки.
  • new_schema
    • Новая схема для сортировки.
  • REFRESH VERSION
    • Обновляет версию сортировки. См. раздел «Замечания» ниже.

Замечания

При использовании сортировок, предоставляемых библиотекой 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.

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

CREATE COLLATION, DROP COLLATION