订购不同机器上的Postgres实例之间的差异(相同的区域设置)

时间:2012-11-13 22:33:14

标签: postgresql locale postgresql-9.1

我有两个Postgres 9.1实例:一个本地,通过OS X上的Postgres.app安装,一个远程,在Heroku上。我确保两台机器上lc_collate都是en_US.UTF-8,但两者之间仍然看到不同的行为。

在我的本地实例上,SELECT 'i' > 'N'返回t,而远程返回f。鉴于我已经在两个系统上都检查了lc_*,我看到的区别是什么?

1 个答案:

答案 0 :(得分:7)

从Unicode的角度来看,案例排序是一种定制。 摘录自http://www.unicode.org/reports/tr10

  

案件订购。一些词典和作者之前整理大写字母   小写,而其他人使用反向,所以需要优先   定制的。有时,案件订购是由   政府,如丹麦。通常它只是一个定制或用户   偏好。

Mac OS X只是具有与Heroku使用的操作系统不同的案例排序。在Mac OS X上:

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

产生

  <磷>氮
  我

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

  


  N

这与PostgreSQL没有任何关系,除了它使用操作系统进行整理,因此不同操作系统影响数据库之间存在这些不幸的差异。

PostgreSQL 10和ICU

从版本10开始,对于使用collations provided by the ICU library编译的服务器,PostgreSQL可能会使用ICU。这些排序规则可以跨操作系统进行一致排序。