[pgsql-jp: 38480] Re: invalid byte sequence for encoding "EUC_JP": 0xa488

haward99 @ yahoo.co.jp haward99 @ yahoo.co.jp
2007年 6月 8日 (金) 17:15:36 JST


渡辺です。

--- Tatsuo Ishii <ishii @ sraoss.co.jp> wrote:
> > > <<<疑問点その1.>>>
> > > 新旧両方のDBサーバのpostgresql.confにおいて
> > >
> > >   log_min_error_statement = error
> > >
> > > を設定して、エラーを起こしたSQL文をログ記録するようにしている
> > > はずなのですが、上記エラーメッセージを吐いた際の
> > > 該当のSQL文がログに記録されませんでした。なぜ?
> > 
> > とりあえずこちらだけ。
> > 
> > これは、ダンプしたファイルを読み込むクライアントプログラム
> > (たぶんpsql)がログを出力しなかったということでしょうか。
> > 
> > だとすれば、サーバ側のログには出力されているかもしれません。
> 
> エンコーディングチェックに引っ掛かった場合には,SQL文はログされません.

ログされてほしいなあ。。。

> > 0xa487、0xa488、というシーケンスを含むレコードをSELECTする、
> > またはpg_dumpしたテキストファイルからgrepかなにかで探し出すのに
> > うまい方法はないでしょうか?
> 
> pg_dump出力を16進ダンプするとかでしょうか.
> 
> 後はたしか昔MLに投稿したことがあるstrtohexという関数を8.1側に仕込んで,
> SELECTすることができると思います.
> SELECT * FROM foo WHERE strtohex(bar) ~ 'a487';
> のような感じ.

ftp://ftp.sra.co.jp/pub/cmd/postgres/strtohex/strtohex-1.0.tar.gz 
ですね。
さっそく使ってみたら、見事、おかしな文字の入ったレコードを発見できました。
そのレコードを正しく編集して再度pg_dumpし、
新サーバでpsqlから食わせてみたところ、
今度はすんなり全てINSERTされていったようです。
どうもありがとうございました!






pgsql-jp メーリングリストの案内