首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LC_COLLATE与校勘不同吗?

LC_COLLATE与校勘不同吗?
EN

Database Administration用户
提问于 2021-02-19 09:23:15
回答 1查看 1.3K关注 0票数 2

Windows 7上的Postgres 12

这样做是可行的:

代码语言:javascript
复制
CREATE DATABASE "foo"
    ENCODING 'UTF8'
    LC_COLLATE = 'en-US'
    LC_CTYPE = 'en-US'
    TEMPLATE template0

然后,使用数据库SHOW LC_COLLATE运行foo选择的报表:

但当你跑的时候

代码语言:javascript
复制
SELECT UPPER('kedi' COLLATE "en-US")

它报告说:

代码语言:javascript
复制
ERROR: collation "en-US" for encoding "UTF8" does not exist

两个人不应该接受相同的校对名字吗?

EN

回答 1

Database Administration用户

发布于 2021-02-19 15:17:14

LC_COLLATE是指操作系统中的地区名称,而COLLATE是指pg_catalog.pg_collation中应该存在的排序规则。

pg_catalog.pg_collation最初在创建PostgreSQL实例时(由initdb)填充在模板数据库中。

具体来说,应该由SQL函数pg_import_system_collations()来实现这一点。来自文档 (强调地雷)

pg_import_system_collations ( schema regnamespace )→整数根据它在操作系统中找到的所有区域设置向系统目录pg_collation添加排序规则。这是initdb所使用的;有关详细信息,请参阅23.2.2节。稍后将If附加区域设置安装到操作系统中,可以再次运行此函数以添加新区域设置的排序规则。将跳过与pg_collation中现有条目匹配的区域设置。(但基于操作系统中不再存在的区域设置的排序对象不会被此函数删除。)模式参数通常为pg_catalog,但这不是必需的;排序规则也可以安装到其他模式中。该函数返回它创建的新排序规则对象的数量。

由于某些原因,您的pg_collation中没有pg_collation,而它在操作系统中是有效的,因此您似乎遇到了这样的情况:建议是在需要它的数据库中手动运行pg_import_system_collations()

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/285667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档