Postgresql 中文操作指南
53.12. pg_collation #
目录 _pg_collation_描述了可用的排序规则,它们本质上是从 SQL 名称到操作系统语言环境类别的映射。有关详细信息,请参见 Section 24.2。
Table 53.12. pg_collation Columns
Column Type Description |
oid oid Row identifier |
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 克隆的数据库编码。当前,这必须手动完成。