LoginSignup
0
0

More than 1 year has passed since last update.

【PostgreSQL】RDS (AWS) で 既存の DB を C ロケールで作り直す方法

Posted at

はじめに

AWS で RDS の DB を作成すると、デフォルトで作成できる DB の環境は、"lc_collate" と "lc_ctype" が C になってない。(GUI でポチポチ作成した場合)
その為、名前 (カナ) 列とかを昇順ソートすると思い通りのソートにならない!!
C ロケール DB の作成方法と、すでにデータがある場合のデータ移行コマンド (ダンプとリストア) を記載します。
※既存の DB のロケールを C にしたいと思いますが、できないようです……

下記の環境を想定しています

- RDS(AWS)
- PostgreSQL 13
- ssh 接続で RDS を操作

もくじ

  • ロケール状態確認
  • PostgreSQL インストール
  • RDS 接続確認
  • ダンプ
  • DB 作成
  • リストア
  • リネーム

ロケール状態確認

現在の状態を確認するコマンド
うちの DB に限って…と思ったときに a5mk2 とかで実行
lc_ctype や lc_collate は何になっていますか…

SELECT name, setting, context FROM pg_settings WHERE name LIKE 'lc%';

PostgreSQL インストール

ここからが本題
インストール前にこちらを実行

sudo apt-get update

SQL コマンドを使うために、PostgreSQL をインストール

sudo apt-get install -y postgresql-13

RDS 接続確認

psql \
   --host=RDSで作成したPostgreSQLのDNS名 \
   --port=RDSで作成したPostgreSQLポート番号 \
   --username=RDSで作成したPostgreSQLのユーザー名 \
   --dbname=RDSで作成したPostgreSQLのDB名

ダンプ

デフォルトの DB にデータが入ってて、移行させたい場合、ダンプを取得する
※今現在いる場所に出力されます
 場所の確認するコマンド pwd
 実行する際は、psql から切断しておいてください。コマンドは ¥q

pg_dump \
   --host=RDSで作成したPostgreSQLのDNS名 \
   --port=RDSで作成したPostgreSQLポート番号 \
   --username=RDSで作成したPostgreSQLのユーザー名 \
   --dbname=RDSで作成したPostgreSQLのDB名 \
   > my_dump.pgdump

DB 作成

C ロケールのデータベース作成
※実行する際は、RDS 接続確認 の psql 接続をしてください

create database 新しく作るDB名 lc_collate='C' lc_ctype='C' template template0;

リストア

新しく作成した DB に、旧 DB のデータを反映させる
※ダンプを取得した場所で実行してください
 実行する際は、psql から切断しておいてください

psql \
   --host=RDSで作成したPostgreSQLのDNS名 \
   --port=RDSで作成したPostgreSQLポート番号 \
   --username=RDSで作成したPostgreSQLのユーザー名 \
   --dbname=新しく作ったDB名 \
   < my_dump.pgdump

リネーム

旧 DB 名がベストだった場合
新 DB 名を "旧DB名2" とかでとりあえず作成した方へ

まずは旧 DB を削除するコマンド

DROP DATABASE 旧DB名;

そしてリネーム

ALTER DATABASE 新DB名 RENAME TO 旧DB名;

おわりに

実装してテストして最終段階の時にあれ?ソートおかしくない?
ってなることありますよね…
……普通もっと早く気づきますかね…

参考文献

ロケール(国際化と地域化)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0