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