あるときPostgreSQLのpg_restoreに失敗していることに気がついた。
ここら当たりがあるとすれば、PostgreSQL7.4.X から PostgreSQL8.3.X にアップデートしたぐらい。
pg_restoreでリストア失敗していると思われるテーブルをまずplain形式で出力。
そのままSQLで流すと下記のエラーが発生した。
invalid byte sequence for encoding "EUC_JP":
このキーワードでググると下記のWebページにたどり着いた。
http://ml.postgresql.jp/pipermail/pgsql-jp/2007-June/021718.html
> おそらく、ver8.1.4以降で厳格化されたエスケープ文字の取り扱いに
> ひっかかったのかな?と推測しております。
これか!
・PostgreSQL 8.1.3から8.1.4の変更点:
http://www.sraoss.co.jp/PostgreSQL/8.1.4/changes.html
#おそらく半角カナのところで失敗していると思われる。
#PHPでpg_escape_string()関数を使っているので気がつかなかった。
で、文字をエスケープしてpg_dumpするオプションでもあるのかなあ?と思って探したが無い。
社内からのみのアクセスのシステムとはいえ、backslash_quoteの設定をいじるのは、あまりにも気持ち悪いので避けたい。
まあ結論は「Shift_JISは使うな」なんだが、既に動いてしまっているシステムをいじるわけにもいかない。
結局スマートな解決方法が見いだせず。
0 件のコメント:
コメントを投稿