历史版本。 PostgreSQL 12 已结束支持。 2024-11-21. 请参阅 当前版本手册.
51.12. pg_collation #
目录 pg_collation 描述可用的排序规则,其本质上是从 SQL 名字到操作系统区域设置类别的映射。更多信息参见第 23.2 节。
表 51.12. pg_collation 列
| 名称 | 类型 | 引用 | 描述 |
|---|---|---|---|
oid | oid | 行标识符 | |
collname | name | 排序规则名称(在每个名字空间与编码的组合内唯一) | |
collnamespace | oid | | 包含该排序规则的名字空间的 OID |
collowner | oid | | 排序规则的拥有者 |
collprovider | char |
排序规则提供程序:d = 数据库默认值,c = libc,i = icu
| |
collisdeterministic | bool | 排序规则是确定性的吗? | |
collencoding | int4 | 该排序规则可应用的编码,或以-1 表示它可用于任何编码 | |
collcollate | name |
此排序规则对象的 LC_COLLATE
| |
collctype | name |
此排序规则对象的 LC_CTYPE
| |
collversion | text | 提供程序特有的排序规则版本。它会在创建排序规则时记录下来,并在使用时接受检查,以检测可能导致数据损坏的排序规则定义更改。 |
注意在这个目录中的唯一键是(collname、collencoding、collnamespace),不仅仅是(collname、collnamespace)。PostgreSQL 通常会忽略所有 collencoding 既不等于当前数据库编码、也不等于 -1 的排序规则,并且禁止创建与 collencoding = -1 的项同名的新项。因此,使用限定的 SQL 名字(schema.name)来标识一个排序规则已经足够,即使按目录定义它并不唯一。之所以将该目录定义成这样,是因为 initdb 在集簇初始化时会用系统上所有可用的区域设置填充它,因此它必须能够容纳集簇中未来可能使用到的所有编码的项。
在 template0 数据库中,创建与数据库编码不匹配的排序规则可能很有用,因为它们可以匹配之后从 template0 克隆出的数据库的编码。目前这必须手工完成。