半角カナでソートする要件を実装した際に、アよりオが先に来てしまう事象にハマった。原因は、Postgresのロケールがen-USだったことにより、期待する照合順序にならなかった。
ロケールを確認
deliba::DATABASE=> SHOW LC_COLLATE;
lc_collate
-------------
en_US.UTF-8
(1 行)
deliba::DATABASE=> SHOW LC_CTYPE;
lc_ctype
-------------
en_US.UTF-8
(1 行)
order by にCOLLATE オプションを追加
SELECT *
FROM your_table
ORDER BY kana_column COLLATE "ja_JP.utf8";