Aurora PostgreSQLでは、デフォルトの照合順序(言語のロケール)とタイムゾーンの設定が日本での利用に最適化されていません。デフォルトでは、以下のようになっています。バージョンは、9.6.9です。
sample=> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+------------+----------+-------------+-------------+--------------------------- postgres | masteruser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin sample | masteruser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin + | | | | | rdsadmin=CTc/rdsadmin template1 | masteruser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/masteruser + | | | | | masteruser=CTc/masteruser
sample=> show timezone; TimeZone ---------- UTC (1 row)
これを日本で利用する場合にあわせて最適化します。
DB Cluster Parametergroupを、以下の値に変更します。
パラメータ名 | デフォルト値 | 設定値 |
---|---|---|
lc_monetary | ja_JP.UTF-8 | |
lc_numeric | ja_JP.UTF-8 | |
lc_time | ja_JP.UTF-8 | |
timezone | UTC | Asia/Tokyo |
datestyle | iso, ymd |
各ロケール設定値の意味は下記の通りです。
- LC_COLLATE
- 文字列の並び換え順
- LC_CTYPE
- 文字の分類(文字とはどんなもの?大文字小文字を区別しない?)
- LC_MESSAGES
- メッセージの言語
- LC_MONETARY
- 通貨書式
- LC_NUMERIC
- 数字の書式
- LC_TIME
- 日付と時刻の書式
メッセージは英文の方が検索しやすいので、上の例では変更していません。下記は公式のマニュアル。
datestyle
の値はデフォルトでは、 iso, myd
となっています。ISO書式になっているから問題ないけど、より正しい iso, ymd
に変更しておきます。
LC_COLLATE
と LC_CTYPE
の値は、パラメターグループからは変更できません。DB作成時の指定しなければならないので、DBを作り直す必要があります。以下のCREATE DBコマンドにて、DBを作成してください。
postgres=> create database sample owner 'masteruser' encoding 'UTF8' lc_collate 'ja_JP.UTF-8' lc_ctype 'ja_JP.UTF-8' template 'template0'; CREATE DATABASE
下記は、参考となるAWS Forumの投稿です。
https://forums.aws.amazon.com/thread.jspa?threadID=228524
最後に確認してみます。
postgres=> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+------------+----------+-------------+-------------+--------------------------- postgres | masteruser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin sample | masteruser | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin + | | | | | rdsadmin=CTc/rdsadmin template1 | masteruser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/masteruser + | | | | | masteruser=CTc/masteruser (5 rows)
show timezone; TimeZone ------------ Asia/Tokyo (1 row)
ちゃんと変更できましたね。