Skip to content

53.12.pg_collation#

目录pg_collation描述了可用的排序规则,这些排序规则实质上是从 SQL 名称到操作系统区域类别映射。有关详细信息,请参见第 24.2 节

表 53.12.pg_collation

列类型

描述

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

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克隆的数据库的编码。目前必须手动执行此操作。