postgreSQLでリストアエラー

postgreSQLのリストアで、こんなエラーが出る事があります。

# su - postgres
$ createdb testDB
$ psql -e testDB < testDB.dump
(snip)
ERROR: invalid byte sequence for encoding "UTF8": 0xcbcc
HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".


このエラーの場合、バックアップする為にDumpした時のエンコードと、リストアする時のDBのエンコードが合っていない事が主な原因っぽいです。


バックアップとリストアの手順としては、
■バックアップ

# su - postgres
$ pg_dump DB名 > Dumpファイル名

■リストア

# su - postgres
$ createdb DB名
$ psql -e DB名 < Dumpファイル名

こんな感じです。


ここで、エンコードの絡みが出てくるのです。

今回、CentOS 5.2, postgreSQL8 で createdb した場合、デフォルトでエンコードは UTF8 になりました。
しかし、DumpしたデータのエンコードSQL_ASCII だった為、正常にリストアが出来ない状況でした。


それを回避する為には、リストアする際に、

# su - postgres
$ createdb -E SQL_ASCII DB名
$ psql -e DB名 < Dumpファイル名

と、エンコードSQL_ASCII にしてあげれば、正常にリストアされます。


時々こういった事を忘れるので。。。
忘れないように書いておきます。


でわ。