我有一个 Rails 4.2+ 和 Postgres 9.4 项目,我需要更改 Postgres 在查询中排序项目的方式。默认设置似乎忽略了空格,我需要一个考虑空格的策略。在 psql 中运行 \l
后,我看到数据库将 Collate
设置为 en_US.UTF-8
和 Ctype
设置为 en_US.UTF-8
。
15 年 12 月 30 日下午 4:14 更新
我有以下事件,其名称列的名称如下:
Code1A East
Code1A West
Code1 AEast
Code1 AWest
当我在 Rails 中执行以下查询时
Activity.order(name: :asc)
我希望按以下顺序返回事件列表。
Code1 AEast
Code1 AWest
Code1A East
Code1A West
甚至可能
Code1A East
Code1A West
Code1 AEast
Code1 AWest
相反我得到
Code1A East
Code1 AEast
Code1A West
Code1 AWest
它似乎忽略了名称中的空格。我在下面的评论中指出,通过将以下内容添加到 database.yml,我能够让 Rails 应用程序创建具有特定排序规则的数据库
development:
...other keys...
encoding: utf8
collation: sv_SE.UTF-8
ctype: sv_SE.UTF-8
template: template0
但我不知道哪种归类设置会选择“更好”的排序顺序。
最佳答案
Postgres 上的排序规则设置由服务器决定,而不是您与它的连接,per the Postgres docs ,因此没有办法让它只是 database.yml
中的一个设置。要永久更改该值,您需要永久修改您的服务器。
但是,您可以通过几种方式在每个查询的基础上强制使用不同的排序规则:
SELECT * FROM things ORDER BY name COLLATE "C" ASC;
将使用 C
排序规则,这可能是您正在寻找的,并实现与以下相同的结果:
SELECT * FROM things ORDER BY name USING ~<~;
(有关实际示例,请参阅 this SQLfiddle)
希望对您有所帮助!
关于ruby-on-rails - 为 Rails 项目指定 Postgresql DB 默认排序规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536846/