#はじめに
RDS for PostgreSQL 作成後に、デフォルトのCollate
とCtype
はen_US.UTF-8
になっていますが、en_US.UTF-8
をja_JP.UTF-8
に変更することが本記事の主旨です。
ちなみに、今回使用しているEC2とRDSの情報は下記となります。
・EC2: Amazon Linux 2
・RDS for PostgreSQLエンジンバージョン:12.6
#作業手順
1.postgresql接続ミドルウェアをインストールします
※バージョンはRDS postgresqlに準じてインストールすること
$ sudo amazon-linux-extras install epel -y
$ sudo amazon-linux-extras install postgresql12
2.dbtest
DBの現状確認
下記ご覧のように、現在dbtest
のCollate
とCtype
はen_US.UTF-8
になっています。
dbtest=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+-------------+-------------+-----------------------------
dbtest | XXXXXXXXXXX | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | XXXXXXXXXXX | 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 | XXXXXXXXXXX | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/XXXXXXXXXXX +
| | | | | XXXXXXXXXXX=CTc/XXXXXXXXXXX
(5 rows)
3.dbtest
にテスト用のデータをインポートします
dbtest=> CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);
CREATE TABLE
dbtest=> INSERT INTO user_tbl(name, signup_date) VALUES('田中', '2021-07-26');
INSERT 0 1
dbtest=> INSERT INTO user_tbl(name, signup_date) VALUES('鈴木', '2021-07-26');
INSERT 0 1
dbtest=> INSERT INTO user_tbl(name, signup_date) VALUES('太郎', '2021-07-26');
INSERT 0 1
dbtest=> SELECT * FROM user_tbl;
name | signup_date
------+-------------
田中 | 2021-07-26
鈴木 | 2021-07-26
太郎 | 2021-07-26
(3 rows)
4.dbtest
DBのDumpファイルをエクスポートします
[root@ip-XXX-XXX-XXX-XXX ~]# pg_dump -h <RDSエンドポイント> -U<RDSユーザネーム> <DB名> > /tmp/db_bk.dump
5.Dumpファイルがエクスポートされるかどうかを確認します
[root@ip-XXX-XXX-XXX-XXX ~]# cd /tmp
[root@ip-XXX-XXX-XXX-XXX tmp]# ll db_bk.dump
-rw-r--r-- 1 root root 1213 Jul 26 09:35 db_bk.dump
6.dbtest
からpostgres
へ移動
dbtest=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+-------------+-------------+-----------------------------
dbtest | XXXXXXXXXXX | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | XXXXXXXXXXX | 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 | XXXXXXXXXXX | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/XXXXXXXXXXX +
| | | | | XXXXXXXXXXX=CTc/XXXXXXXXXXX
(5 rows)
dbtest=> \c postgres
Password:
psql (12.7, server 12.6)
SSL connection (protocol: TLSv1.2, cipher: XXXX-XXXX-XXXX-XXXX-XXXX, bits: 256, compression: off)
You are now connected to database "postgres" as user "XXXXXXXX".
postgres=>
7.既存のdbtest
を削除します
postgres=> DROP DATABASE dbtest;
DROP DATABASE
postgres=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+-------------+-------------+-----------------------------
postgres | XXXXXXXXXXX | 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 | XXXXXXXXXXX | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/XXXXXXXXXXX +
| | | | | XXXXXXXXXXX=CTc/XXXXXXXXXXX
(4 rows)
postgres=>
8.dbtest
を再作成します。
下記ご覧のように、Collate
とCtype
はja_JP.UTF-8
に変更しました。
postgres=> CREATE DATABASE dbtest LC_COLLATE 'ja_JP.UTF-8' LC_CTYPE 'ja_JP.UTF-8' ENCODING 'UTF8' TEMPLATE template0;
CREATE DATABASE
postgres=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+-------------+-------------+-----------------------------
dbtest | XXXXXXXXXXX | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | XXXXXXXXXXX | 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 | XXXXXXXXXXX | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/XXXXXXXXXXX +
| | | | | XXXXXXXXXXX=CTc/XXXXXXXXXXX
(5 rows)
9.バックアップしたDumpファイルを上記新規作成されたdbtest
へインポートします
[root@ip-XXX-XXX-XXX-XXX ~]# psql --host=<エンドポイント> --username=<ユーザネーム> --password --dbname=<DB名> < /tmp/db_bk.dump
Password:
SET
SET
SET
SET
SET
set_config
------------
(1 row)
SET
SET
SET
SET
SET
SET
CREATE TABLE
ALTER TABLE
COPY 3
REVOKE
REVOKE
GRANT
GRANT
10.確認
dbtest=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+-------------+-------------+-----------------------------
dbtest | XXXXXXXXXXX | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | XXXXXXXXXXX | 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 | XXXXXXXXXXX | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/XXXXXXXXXXX +
| | | | | XXXXXXXXXXX=CTc/XXXXXXXXXXX
(5 rows)
dbtest=> \d
List of relations
Schema | Name | Type | Owner
--------+----------+-------+-------------
public | user_tbl | table | XXXXXXXXXXX
(1 row)
dbtest=> select * from user_tbl;
name | signup_date
------+-------------
田中 | 2021-07-26
鈴木 | 2021-07-26
太郎 | 2021-07-26
(3 rows)
#参考資料