Windows 7上的Postgres 12
这样做是可行的:
CREATE DATABASE "foo"
ENCODING 'UTF8'
LC_COLLATE = 'en-US'
LC_CTYPE = 'en-US'
TEMPLATE template0然后,使用数据库SHOW LC_COLLATE运行foo选择的报表:

但当你跑的时候
SELECT UPPER('kedi' COLLATE "en-US")它报告说:
ERROR: collation "en-US" for encoding "UTF8" does not exist两个人不应该接受相同的校对名字吗?
发布于 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()。
https://dba.stackexchange.com/questions/285667
复制相似问题