如何强制Windows在PostgreSQL中支持不支持的LC_COLLATE和LC_TYPE?


8

我已经重新安装了PostgreSQL9.1.x。不幸的是,我发现OS不支持LC_COLLATE = 'pl_PL.utf8'LC_CTYPE = 'pl_PL.utf8'。我在PostgreSQL文档中读到:

在所有平台上,都可以使用名为default,C和POSIX的排序规则。根据操作系统支持,可能会提供其他归类。

但是,是否可以强迫Windows支持该语言环境呢?我的意思是补丁,插件之类的东西。

Answers:


7

在Windows上,可能已经安装了所需的语言环境,其名称与在Unix上的名称不同

例如,对于Windows XP上的PG9.1,使用默认语言环境French_France.1252且未安装任何其他语言包(我记得),以下数据库创建对我来说似乎工作正常。

CREATE DATABASE pldb
       ENCODING = 'UTF8'
       LC_COLLATE = 'Polish'
       LC_CTYPE = 'Polish'
       TEMPLATE=template0;

另外,通过在新创建的数据库中以UTF8提交此查询,可以快速测试排序顺序:

select * from (values ('z'), ('ź'), ('ż'), ('s'), ('ś'), ('x'), ('y')) as letters order by 1;

似乎输出正确的结果:

小号
ś
X
ý
ž
¼的
ż


嗯...也许你是对的...
marioosh 2012年

1

据我所知,您不能强制Windows版本的PostgreSQL支持Windows不提供的语言环境和排序规则。PostgreSQL使用系统区域设置和排序规则支持。如果系统不支持,则无法使用。有时这是一个令人沮丧的限制,但实际上是这样。您需要选择Windows安装支持的合适的编码和排序规则。

如果您想为OS归类名称起别名并调用它pl_PL.utf8,则可以使用来完成CREATE COLLATION

参见字符集支持归类支持pg_collat​​ion目录表。

您要解决的问题是什么?


按“不”。您的意思是无法在Windows上支持此功能吗?也许我可以安装一些东西使其工作。我需要的是LC_COLLATELC_CTYPE被设置为'pl_PL.utf8'以有效的排序。

@marioosh您需要找出与所需整理规则等效的Windows语言环境。在我看来,这有点像疣。我真的希望Pg至少提供可选的内部排序规则/编码支持,而不是始终依赖于操作系统的支持。答案已通过文档链接更新。
克雷格·林格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.