[pgsql-jp: 28783] Re: 空文字列を含むテーブルの\copy/pg_dump が失敗する
Tatsuo Ishii
t-ishii @ sra.co.jp
2003年 1月 26日 (日) 20:03:51 JST
石井です.
> 新しくUNICODEデータベースを作ってみて
> test=# create table t1(t text);
> test=# insert into t1 values('');
> test=# \copy t1 to /tmp/aaa;
> としてみても再現しました。
> euc-jpデータベースの場合再現しませんでした。
もしかしてクライアント側のエンコーディングをUNICODE以外にしていますか?
> > 何か特別な要因があるかもしれないのでバックエンドが落ちたときのバック
> > トレースを見せていただけませんか?
>
> すみません、バックトレースの見方がわかりません。
> よろしければ教えていただけませんか?
見方と言うか,まあ地道にソースコードと照らし合わせるだけなんですけどね:-)
その原因が結果わかるかもしれないし,わからないかもしれません.
念のためにバックとレースの取り方を説明しておきます.
まずPostgreSQLを-gオプション付でコンパイル,インストールしておきます.
configureからやるなら--enable-debugを付けますが,すでにコンパイル済の
ソースツリーが残っているのなら,configureをやり直さなくても,
src/Makefile.globalの
CFLAGS = -O2
を
CFLAGS = -g
に変更し,make cleanしてからmakeしなおせばよいです.インストールが終わっ
たら,psqlで問題のデータベースに接続してからpsコマンドでバックエンドプ
ロセスを探します.
20632 ? S 0:00 postgres: ユーザ名 データベース名 [local] idle
のような行が見つかるはずですから,
cd ソースをコンパイルしたディレクトリ/src/backend
してから
gdb ./postgres プロセス番号
でバックエンドプロセスにアタッチできます.後は,gdbから
cont
を入力してバックエンドプロセスの実行を再開し,psqlから問題のSQL文を入
力します.もしバックエンドが落ちる現象が再現できればgdbに制御が移って
いるはずですから,そこで
where
と入力してバックトレースを取ります.
--
Tatsuo Ishii
pgsql-jp メーリングリストの案内