PostgreSQLのencodingをEUC_JPからUTF8に変更する
- EUC_JPで作ったdatabaseから普通にpg_dumpする。ここではencoding指定とかしない。
-
UTF8指定されたdatabaseを新規に作って、そこにロードする。文字コード変換はnkfに任せる。ダンプに書いてあるset client_encoding指定は「UTF8」と書き直すかあるいは潔く削除。nkfの入力コード指定にEUC-JPではなくeucJP-msを指定するところもポイント。
cat olddatabase-dump.txt \ | grep -v "SET client_encoding = 'EUC_JP';" \ | nkf --ic=eucJP-ms --oc=UTF-8 \ | psql -d newdatabase -f -なお、ラージオブジェクトどうすんのとか言われても俺は知らない。
pg_dumpコマンドにはエンコーディングを変換する機能もあるんだぜ、みたいな話もあるけれど、そんなお上品な方法が特殊な文字に対応していないことによるエラーとたわむれているようなヒマは無いし、DBの中に妙な機種依存文字やら波線(波ダッシュ)やらバックスラッシュ(半角エンマーク)やらがゴロゴロ入っているのも俺のせいじゃない!助けて小人さん!という現場の方におすすめ。
see also:
-
PostgreSQLを高速化する16のポイント
(2009/2)

コメントする
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)