結論から書くと調べた範囲ではムリっぽいです。

環境


  • AWS RDS for PostgreSQL 10.3

現状確認


まず、現在のデータベースの状態を見てみます。

1
2
3
4
5
6
7
8
9
10
postgres=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+----------------------
postgres | postgres | 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 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres

と、まあ、デフォルトでこんな感じになってます。

テンプレートの変更を試みる


前回やった通りの手順でtemplate1の変更を試みます。

1
2
postgres=> UPDATE pg_database SET datistemplate = false where datname = 'template1';
ERROR: permission denied for relation pg_database

権限がないと怒られてしまいます。Ownerがrdsadminなので、こいつで接続すれば…と思うのですが、残念ながらこのユーザは使えないようです。

指定して作成する


仕方がないのでCREATE DATABASEの際に指定することにしました。この時にtemplate1だとエラーが発生します。

1
2
3
postgres=> CREATE DATABASE testdb LC_COLLATE 'ja_JP.UTF-8' LC_CTYPE 'ja_JP.UTF-8' ENCODING 'UTF8' TEMPLATE template1;
ERROR: new collation (ja_JP.UTF-8) is incompatible with the collation of the template database (en_US.UTF-8)
HINT: Use the same collation as in the template database, or use template0 as template.

のでtemplate0を指定して作成します。

1
2
postgres=> CREATE DATABASE testdb LC_COLLATE 'ja_JP.UTF-8' LC_CTYPE 'ja_JP.UTF-8' ENCODING 'UTF8' TEMPLATE template0;
CREATE DATABASE

RDSの場合はこうするしかないみたいですね。