pg_collation
Каталог pg_collation
описывает доступные колации, которые по сути являются отображениями имени SQL на категории локали операционной системы.
Столбец | Тип данных | Описание |
---|---|---|
oid | oid | Идентификатор строки |
collname | name | Имя колляции (уникальное для пространства имен и кодировки) |
collnamespace | oid (ссылается на pg_namespace.oid) | OID пространства имен, содержащего данную коллизию |
collowner | oid (ссылается на pg_authid.oid) | Владелец колляции |
collprovider | char | Поставщик кодировки: d = база данных по умолчанию, c = libc, i = icu |
collisdeterministic | bool | Является ли свертка детерминированной? |
collencoding | int4 | Кодировка, в которой применяется коллизия, или -1, если она работает в любой кодировке |
collcollate | text | LC_COLLATE для данного объекта collation |
collctype | text | LC_CTYPE для данного объекта collation |
colliculocale | colliculocale Идентификатор локали ICU для данного объекта collation | |
collversion | text | Версия свертки для конкретного поставщика. Она записывается при создании свертки и затем проверяется при ее использовании, чтобы обнаружить изменения в определении свертки, которые могут привести к повреждению данных. |
Обратите внимание, что уникальным ключом этого каталога является (collname
, collencoding
, collnamespace
), а не просто (collname
, collnamespace
). PostgreSQL обычно игнорирует все collations
, у которых collencoding
не равен либо кодировке текущей базы данных, либо -1, и создание новых записей с тем же именем, что и запись с collencoding = -1
, запрещено. Поэтому для идентификации колляции достаточно использовать квалифицированное SQL-имя (schema.name), даже если оно не является уникальным в соответствии с определением каталога. Причина такого определения каталога заключается в том, что initdb заполняет его при инициализации кластера записями для всех локалей, доступных в системе, поэтому он должен быть способен содержать записи для всех кодировок, которые могут когда-либо использоваться в кластере.
В базе данных template0
может быть полезно создавать коллизии, кодировка которых не совпадает с кодировкой базы данных, поскольку они могут совпадать с кодировками баз данных, позднее клонированных из template0
. В настоящее время это приходится делать вручную.