Rails + PostgreSQL でデータベースの表示順をいい感じにする

今作っているサービスで日本語のソートがおかしかったので調べていたところ、PostgreSQL 10のICUコレーションを使うと日本語を普通にソートでき、更に文字順序までカスタマイズできるという記事を見つけた。

やってみようと思い、

config/database.yml に以下のように追記してみたが駄目だった

collation: ja-x-icu
ctype: ja-x-icu
ERROR:  invalid locale name: "ja-x-icu"
STATEMENT:  CREATE DATABASE "develop" ENCODING = 'UTF-8' LC_COLLATE = 'ja-x-icu' LC_CTYPE = 'ja-x-icu'

2018/7 月時点でも CREATE DATABASE では未だにサポートされていないっぽい。

調べたところ、 Active Record の migrate 時にカラムに対して振ればいける

create_table :user do |t|
  t.string :name,      collation: 'ja-x-icu'
  t.text   :address,   collation: 'ja-x-icu'
end

忘れがちな PostgreSQL の SQL

-- collate を確認
SHOW LC_COLLATE;

-- 使える collate を確認
SELECT * FROM pg_collation;

“`

参考