Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 不同计算机上Postgres实例之间的排序差异(相同区域设置)_Postgresql_Locale_Postgresql 9.1 - Fatal编程技术网

Postgresql 不同计算机上Postgres实例之间的排序差异(相同区域设置)

Postgresql 不同计算机上Postgres实例之间的排序差异(相同区域设置),postgresql,locale,postgresql-9.1,Postgresql,Locale,Postgresql 9.1,我有两个Postgres9.1实例:一个是本地的,通过OSX上的Postgres.app安装,另一个是远程的,安装在Heroku上。我已经确保两台机器上的lc_collate都是en_US.UTF-8,但我仍然看到这两台机器的行为有所不同 在我的本地实例上,选择'i'>'N'返回t,而远程选择它返回f。考虑到我已经检查了两个系统上的lc*,我看到的差异是什么?从Unicode的角度来看,案例排序是一种定制。 摘录自: 案例排序。一些词典和作者在出版前对大写字母进行校对 小写,而其他人则使用相反的

我有两个Postgres9.1实例:一个是本地的,通过OSX上的Postgres.app安装,另一个是远程的,安装在Heroku上。我已经确保两台机器上的lc_collate都是en_US.UTF-8,但我仍然看到这两台机器的行为有所不同


在我的本地实例上,选择'i'>'N'返回t,而远程选择它返回f。考虑到我已经检查了两个系统上的lc*,我看到的差异是什么?

从Unicode的角度来看,案例排序是一种定制。 摘录自:

案例排序。一些词典和作者在出版前对大写字母进行校对 小写,而其他人则使用相反的形式,因此需要使用首选项 可定制的。有时,案例排序是由 政府,如丹麦。通常它只是一个定制或用户 偏好

Mac OS X的大小写顺序与Heroku使用的操作系统不同。在Mac OS X上:

$ LC_CTYPE=en_US.UTF-8 sort << EOF
> i
> N
> EOF
产生:

N 我

Ubuntu 12.04上完全相同的命令和相同的数据产生:

我 N

这与PostgreSQL无关,只是它使用操作系统进行排序,因此不同操作系统之间的这些不幸差异会影响数据库

PostgreSQL 10和ICU
从版本10开始,PostgreSQL可用于编译为的服务器。这些排序规则可以跨操作系统进行一致的排序。

但是选择'i'>'n'和'i'>'n'都会按预期进行,对吗?是的,选择'i'>'n'和选择'i'>'n'在所有情况下都是错误的。另外,如果我将排序规则指定为C或POSIX,我会获得一致的行为,但不是用collation en_US。所以你是说其中一个是区分大小写的,而另一个不是。你看过lc_ctype设置了吗?您可以使用show X查看psql中的X设置。是的,两台机器上的所有6个lc_*设置都设置为en_US.UTF-8。感谢您的清晰解释-这也是我发现的。考虑到en_US.UTF-8在不同的操作系统中是不同的,是否有一个标准的实践来确保跨系统的通用排序?@jredburn唉,没有什么可靠的。这是一个真正的痛苦,我希望将ICU整合到PostgreSQL的休眠提议能够继续进行的原因之一,正如这里提到的:我不知道一个通用的解决方案。作为OS X上的一个本地解决方案,也许可以生成您自己的区域设置see localedef以匹配来自glibc?的heroku的en_US.utf-8版本。从postgres 11更新。en-US-x-icu和en-US-u-va-posix-x-icu都出现在我的pg_排序表中,在Ubuntu 18.04和macOS Mojave上。安装时我不需要做任何特殊的事情。将它们应用于现有列是另一个问题。。。谈到这一点,但单独改变所有栏目听起来并不有趣。