Postgresql 中文操作指南

53.12. pg_collation #

目录 _pg_collation_描述了可用的排序规则,它们本质上是从 SQL 名称到操作系统语言环境类别的映射。有关详细信息,请参见 Section 24.2

Table 53.12. pg_collation Columns

Column Type

Description

oid oid

Row identifier

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 针对此校对对象

collctype text LC_CTYPE 针对此校对对象

colliculocale text 此校对对象的 ICU 区域 ID

collicurules text 此校对对象的 ICU 校对规则

collversion text 校对的特定于提供程序的版本。这在创建校对时记录下来,然后在使用时检查,以检测校对定义中可能导致数据损坏的更改。

请注意此目录的唯一键为 (collname, collencoding, collnamespace),而不仅仅是 (collname, collnamespace)。PostgreSQL 通常忽略所有 collencoding 无论是等于当前数据库的编码还是 -1 的排序,而创建具有与 collencoding = -1 的条目相同名称的新条目的行为是不允许的。因此,即使这在目录定义中不是唯一,使用合格的 SQL 名称 (schema.name) 来标识排序也足够了。之所以如此定义目录,原因是 initdb 会在群集初始化时使用系统上所有区域设置的条目将其填入,因此它必须能够保存群集中可能使用的所有编码。

template0 数据库中,创建编码与数据库编码不匹配的排序可能很有用,因为它们可以匹配从 template0 克隆的数据库编码。当前,这必须手动完成。