ruby-on-rails - 为 Rails 项目指定 Postgresql DB 默认排序规则

标签 ruby-on-rails postgresql ruby-on-rails-4

我有一个 Rails 4.2+ 和 Postgres 9.4 项目,我需要更改 Postgres 在查询中排序项目的方式。默认设置似乎忽略了空格,我需要一个考虑空格的策略。在 psql 中运行 \l 后,我看到数据库将 Collat​​e 设置为 en_US.UTF-8Ctype设置为 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/

相关文章:

ruby-on-rails - accept_nested_attributes_for :allow_destroy, :_destroy 不工作

python - PostgreSQL FDW 扩展 Multicorn - "Error in python: ImportError"

ruby-on-rails - Rails 4 中如何使用 attr_accessible?

javascript - 如何在 Rails 应用程序中安装 jQuery UI?

ruby-on-rails - 在 Rails collection_select 中使用短日期时间

ruby-on-rails - has_one 和belongs_to 与同一张表的关联

ruby-on-rails - 用于查找关联大学电子邮件地址的 Gem

performance - 是否值得将日期拆分并存储为 yyyy、mm、dd、dow 以用于将来的 GROUP BY 聚合?

json - PostgreSQL : Append element in json array objects

ruby-on-rails - 如何添加具有额外列的多对多记录