PostgreSQLのデータベースをWindows (SJIS)からUbuntu (UTF8)に移植する方法
この記事のまとめ:
- Windowsで作成した文字コードがSJISのPostgreSQLのデータベースをUbuntuのUTF8のデータベースに移植した流れを記載しています。
背景:
当初、自宅にあるWindows PCでPostgreSQLを動かしていたのですが、どこの環境でもデータベースにアクセスできるようにした方が利便性が高かったので、Ubuntuが動くVPSに移植しようとしたところ、文字コードの問題にぶち当たってしまったのでとりあえず対処した作業手順を載せておきます。
はじめに:本記事での表記について
コマンドについて説明する機会が多々ありますが、それぞれどのターミナル上で実行しているかを区別するために文頭の記号ごとにそれぞれ下記を意味しています。
作業した流れ
おそらく回りくどいやり方をやっていると思いますので飽くまで参考としてご覧ください。
作業の流れは下記の通りです。
pg_dumpall
コマンドでWindows上のPostgreSQLのすべての情報をダンプpg_restore
コマンドでダンプしたファイルをUbuntu上にリストアpg_dump
コマンドで文字コードを変更したいデータベースを一時退避dropdb
コマンドで対象のデータベースを削除(データベース名を変更して退避してから不要になったら削除するのがよいかも)createdb
コマンドで文字コードを変更して再度データベースを作成psql
コマンドで退避していたデータベースのダンプファイルを読み込む
1. Windows上のPostgreSQLのすべての情報をダンプ
移植元のWindows上のPostgreSQLのデータベースのファイルからユーザー情報まですべてをコピー元からダンプします。
2. ダンプしたファイルをUbuntu上にリストア
移植先のUbuntu上のダンプしたファイルをコピーし、PostgreSQLにリストアします。(PostgreSQLは既にインストールした状態で実施してください)
ここで念のためデータベースのリストを確認しておきます。
3. 文字コードを変更したいデータベースを一時退避
文字コードを変更したいデータベースのみをダンプして一時退避します。
4. 対象のデータベースを削除
文字コードを変更したいデータベースを一度削除します。(同じデータベース名で文字コードを変更したい場合のみ削除、もしくはデータベース名を変更するなどして不要なタイミングで削除すればよいです)
5. 文字コードを変更して再度データベースを作成
文字コードをUTF8としてデータベースを作成しますが、通常データベースを作成する際はtemplate1
という空のデータベースをコピーして新しいデータベースを作るのだが、このデータベースがUTF8以外の文字コードで作成されたいた場合、エラーとなります。その際は、template0
を使用してデータベースを作成すると解決できます。なお、データベースの作成はデータベースを作成する権限があるスーパーユーザーでしかできないため、そのユーザーにスイッチしておくか、そのユーザーとして作成する必要があります。
データベースを確認するとEncodingがUTF8になっているはずです。
6. 退避していたデータベースのダンプファイルを読み込む
3.でダンプしておいたファイルを読み込みます。実行後にresult.log
ファイルに特にエラーなど出ていなければ成功です。
参考
本記事を作成するにあたって下記のページを参考にさせていただきました。
- https://everyday-growth.com/?p=104
- http://blog.netandfield.com/shar/2012/04/dbtemplate0.html
- https://qiita.com/rice_american/items/ceae28dad13c3977e3a8
- https://qiita.com/saba1024/items/f1da6e4aa0837259cff4
今回は以上です。 最後まで読んでいただき、ありがとうございます。
コメント
コメントを投稿