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