51.12. pg_collation

目录pg_collation描述了可用的归类,它们实际上是从 SQL 名称到 os 语言环境类别的 Map。有关更多信息,请参见Section 23.2

表 51.12. pg_collation

NameTypeReferencesDescription
oidoid 行标识符(隐藏属性;必须显式选择)
collnamename 排序规则名称(每个名称空间和编码唯一)
collnamespaceoidpg_namespace.oid包含该排序规则的名称空间的 OID
collowneroidpg_authid.oid排序规则的所有者
collproviderchar 排序规则的提供程序:d =数据库默认值,c = libc,i = icu
collencodingint4 排序规则适用的编码,如果适用于任何编码,则为-1
collcollatename LC_COLLATE(用于此整理对象)
collctypename LC_CTYPE(用于此整理对象)
collversiontext 排序规则的提供程序特定的版本。在创建归类时记录此内容,然后在使用归类时对其进行检查,以检测归类定义中可能导致数据损坏的更改。

请注意,此目录上的唯一键是(collnamecollencodingcollnamespace)而不仅仅是(collnamecollnamespace)。 PostgreSQL 通常会忽略所有不具有collencoding不等于当前数据库编码或-1 的归类,并且禁止创建与collencoding = -1 相同名称的新条目。因此,使用合格的 SQL 名称(* schema . name *)来标识排序规则就足够了,即使根据目录定义这不是唯一的。用这种方式定义目录的原因是 initdb 在集群初始化时用系统上所有可用语言环境的条目来填充它,因此它必须能够保存集群中可能使用过的所有编码的条目。

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