[PR] あなたが Kindle で読みたいその本、Kindle に対応したら Twitter でお知らせします。

Amazon RDS for PostgreSQL で照合順序や Ctype を変更する

Posted on

先に結論から書くと、初期に作られるデータベースの照合順序と Ctype は en_US.UTF-8 で固定されているので、削除して作りなおすしかありません。

作りなおす手順

psql コマンドでエンドポイントに接続して、初期状態を確認してみます。 testdb が自分が指定したデータベースです。

$ psql -U rea -h testdb.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com postgres

postgres=> \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | rea      | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 rdsadmin  | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin
 template0 | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin          +
           |          |          |             |             | rdsadmin=CTc/rdsadmin
 template1 | rea      | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/rea               +
           |          |          |             |             | rea=CTc/rea
 testdb    | rea      | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
(5 rows)

先ほども書いたとおり、どちらも en_US.UTF-8 です。日本語環境では C にしておきたいので DROP DATABASE して作りなおします。

postgres=> DROP DATABASE testdb;
DROP DATABASE

postgres=> CREATE DATABASE testdb LC_COLLATE 'C' LC_CTYPE 'C' ENCODING 'UTF8' TEMPLATE template0;
CREATE DATABASE

postgres=> \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | rea      | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 rdsadmin  | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin
 template0 | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin          +
           |          |          |             |             | rdsadmin=CTc/rdsadmin
 template1 | rea      | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/rea               +
           |          |          |             |             | rea=CTc/rea
 testdb    | rea      | UTF8     | C           | C           |
(5 rows)

testdb の照合順序と Ctype が C になりました。

Parameter Groups から変更できるかなと思いましたが、どうもできないようです。