2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1

51.12. pg_collation #

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

表 51.12. pg_collation

列 类型

描述

oid oid

行标识符

collname name

排序规则名称(每个命名空间和编码唯一)

collnamespace oid (引用 pg_namespace.oid)

包含此排序规则的命名空间的 OID

collowner oid (引用 pg_authid.oid)

排序规则的所有者

collprovider char

排序规则提供程序:d = 数据库默认值,b = 内置,c = libc,i = icu

collisdeterministic bool

排序规则是否确定性?

collencoding int4

排序规则适用的编码,或 -1 如果它适用于任何编码

collcollate text

此排序规则对象的 LC_COLLATE。如果提供程序不是 libc,则 collcollateNULL,而 colllocale 用于代替。

collctype text

此排序规则对象的 LC_CTYPE。如果提供程序不是 libc,则 collctypeNULL,而 colllocale 用于代替。

colllocale text

此排序规则对象的排序规则提供程序区域设置名称。如果提供程序是 libc,则 colllocaleNULLcollcollatecollctype 用于代替。

collicurules text

此排序规则对象的 ICU 排序规则

collversion text

排序规则的提供程序特定版本。在创建排序规则时记录此版本,然后在使用时进行检查,以检测排序规则定义中的更改,这些更改可能导致数据损坏。


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

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

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步说明,请使用此表单报告文档问题。