古いPostgresだと機種依存文字はSJISで持ってるのが原因で、リストアできてもエラーが出たり、取り込めても文字化けしてたり手間かかりました。
#前提条件
- Windows環境
- 旧環境:PostgresSQL 8.4
- 新環境:PostgresSQL 10.18
- 旧環境のデータべースの文字エンコーディング:EUC-JP
#試してみたこと
- ECU_JPのまま移行 → 機種依存文字が文字化け
- SJISに変換して移行 →
createdb --locale=C --encoding=sjis --template=template0 hogehog
が失敗 - SJIS指定で出力したdmpファイルをUTF-8に変換してpsqlでリストア → 機種依存が変換できないとのエラー
#成功した手順
結局UTF-8で移行することになりました。
旧環境でdumpを取る
pg_dump -E SJIS -v --inserts [対象のデータベース] > [出力ファイルパス]
-EスイッチでSJISを指定して出力(文字化けを防ぐ)
###出力ファイルを編集する
- 出力ファイルを開く
- 一行目に
\encoding UTF8;
を追加 -
SET client_encoding = 'SJIS';
という記述があった場合SET client_encoding = 'UTF-8';
に変更 - 文字エンコーディングをUTF-8に変更して保存
###新環境でデータべースを作成
createdb --locale=C --encoding=UTF8 --template=template0 [データベース名]
###ダンプファイルからデータをリストア
psql -f [dmpファイルパス] [データベース名]