53.12. 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. В настоящее время это приходится делать вручную.