PostgreSQLのDBエンコードを変更

昨日のエントリでsqlalchemyで接続すると、文字エンコードが当該DBのclient_encodeになってしまう件をかきました。
悪いのはSQL_ASCIIで作成したDBにUTF8のデータを突っ込んでたから。というわけで、UTF8に変換してみました。

まずダンプする

まずpg_dumpで当該DBをダンプ。

$ /usr/local/pgsql/bin/pg_dump hogedb > hogedb.dmp

UTF8で別DBを作成

$ /usr/local/pgsql/bin/createdb -E utf8 hogedb_utf8

先ほどダンプしたファイルからclient_encodingの行を取り除く

エディタかなにかで

SET client_encoding = 'SQL_ASCII';

この行をとりのぞく。でかくてviでは無理ならsedgrepでもできる。

nkf文字コード変換して新しいDBへ投入

$ nkf --oc=UTF-8 hogedb.dmp  | /usr/local/pgsql/bin/psql hogedb_utf8 -f -