[pgsql-jp: 38464] invalid byte sequence for encoding "EUC_JP": 0xa488
haward99 @ yahoo.co.jp
haward99 @ yahoo.co.jp
2007年 6月 7日 (木) 17:41:01 JST
渡辺と申します。
Postgresqlサーバーのバージョンアップがらみで手詰まっております。
ver8.1.2上のあるテーブルだけをpg_dumpして、
別サーバのver8.2.4上のDBに流し込もうとしたところ、
以下のエラーが発生しました。
(新旧両方のサーバの文字コードは全てEUC-JPで固めてある)
ERROR: invalid byte sequence for encoding "EUC_JP": 0xa488
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".
ERROR: invalid byte sequence for encoding "EUC_JP": 0xa487
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".
おそらく、ver8.1.4以降で厳格化されたエスケープ文字の取り扱いに
ひっかかったのかな?と推測しております。(違うかな)
<<<疑問点その1.>>>
新旧両方のDBサーバのpostgresql.confにおいて
log_min_error_statement = error
を設定して、エラーを起こしたSQL文をログ記録するようにしている
はずなのですが、上記エラーメッセージを吐いた際の
該当のSQL文がログに記録されませんでした。なぜ?
ちなみに、旧サーバでpg_dumpする際には
pg_dump --attribute-inserts
とすることで、INSERT文形式でダンプしてます。
<<<疑問点というか相談その2.>>>
おかしな文字が入っているレコードは大した量ではなさそうなので、
旧サーバ上で該当のレコードの中身を削除or正しく編集してしまおうかと
思っておりますが、ログにSQL文が吐かれないので
どのレコードなのかをつかめず苦慮してます。
(このテーブルのレコードは20万件以上あるので)
0xa487、0xa488、というシーケンスを含むレコードをSELECTする、
またはpg_dumpしたテキストファイルからgrepかなにかで探し出すのに
うまい方法はないでしょうか?
pgsql-jp メーリングリストの案内