pg_collation
目录pg_collation
描述了可用的排序规则,其本质是从一个SQL名字到操作系统locale分类的映射。更多信息参见第 23.2 节。
表 51.12. pg_collation
的列
名称 | 类型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行标识符(隐藏属性,必须被显式选择才会显示) | |
collname | name | 排序规则名字(在每一个名字空间和编码中唯一) | |
collnamespace | oid |
| 包含该排序规则的名字空间的OID |
collowner | oid |
| 排序规则的拥有者 |
collprovider | char | 排序规则的提供者:d = 数据库默认,
c = libc, i = icu | |
collencoding | int4 | 该排序规则可应用的编码,-1表示它可用于任何编码 | |
collcollate | name | 该排序规则对象的LC_COLLATE | |
collctype | name | 该排序规则对象的LC_CTYPE | |
collversion | text | 排序规则的提供程序特定版本。这是在创建排序规则时记录的, 然后在使用排序规则时进行检查,以检测排序规则定义中可能导致数据损坏的更改。 |
注意在这个目录中的唯一键是(collname
、
collencoding
、 collnamespace
), 不仅仅是(collname
,collnamespace
)。
所有collencoding
不等于当前数据库编码或-1的编码规则通常都会被PostgreSQL忽略,且禁止创建和collencoding
= -1的项重名的项。因此使用一个受限的SQL名字(schema
.name
)来标识一个排序规则是足够的,即使这根据目录定义是不唯一的。以这种方式定义这个目录的原因是initdb会在集簇初始化时使用系统上所有可用的locale填充这个目录,所以它必须能够为所有可能在集簇中使用的编码保持项。
在template0
数据库中,创建与数据库编码不匹配的编码是有用的,因为它们可以匹配后面从template0
克隆的数据库的编码。这在目前必须手动完成。