[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 メーリングリストの案内