kousa****@nttda*****
kousa****@nttda*****
2008年 1月 18日 (金) 17:06:34 JST
幸坂です。こんにちは。 ご報告ありがとうございます。 > = ひとつめ = Ludia1.4.0では、配列の要素にnullが含まれていると、 配列型インデックスが正常に動作しません。 (次のバージョンではnullにも対応する予定です。) iname,oname,wordのいずれかに、nullが含まれていませんか? > = ふたつめ = ludia.max_n_sort_resultはどうなっていますか? READMEに記述されているように、ludia.max_n_sort_resultを -1に設定すると、スコアの取得ができません。 > CREATE TABLE names (id1 text, id2 text, iname text, oname テーブル名として使っているnamesはPostgreSQLの予約語なので、 避けた方が良いですね。 > -----Original Message----- > From: ludia****@lists***** > [mailto:ludia****@lists*****] On Behalf > Of ASARI Takashi > Sent: Friday, January 18, 2008 7:14 AM > To: ludia****@lists***** > Subject: [Ludia-users 179]配列の検索で server process was > terminated by signal 11 > > おはようございます。浅利といいます。 > > PostgreSQL 8.2.5 + Ludia 1.4.0 で、配列型インデックスを使っています。 > おおむね次のような CREATE 文のテーブルとインデックスを作っています。 > 割とどうでもいいケースですが、望まない挙動がありましたのでご報告します。 > > CREATE TABLE names (id1 text, id2 text, iname text, oname > text, word text) > ALTER TABLE names ADD PRIMARY KEY (id1, id2) > CREATE INDEX fulltxt_idx ON names USING > fulltexta((array[iname, oname, word])) > > = ひとつめ = > > このテーブルに対して、次のような SQL 文は正常に実行されます。 > > SELECT * FROM names WHERE array[iname, oname, word] @@ ? > > 一方、次のような SQL 文を実行すると、 > > SELECT * FROM names WHERE array[oname, iname, word] @@ ? > > 次のようなエラーが出て接続が切れてしまいます。 > > server closed the connection unexpectedly > This probably means the server terminated abnormally > before or while processing the request. > The connection to the server was lost. Attempting reset: Failed. > > サーバのログには以下のようなログが残されていました。 > > DEBUG: pgsenna2: logger_info_set. > DEBUG: pgsenna2: pgs2contain 5094823 -1 > LOG: server process (PID 28477) was terminated by signal 11 > LOG: terminating any other active server processes > > ludia.enable_seqscan = off で (おそらく正しく) エラーを返しました。 > > ERROR: pgsenna2: sequencial scan disabled > > > = ふたつめ = > > 次の文の ? を適当な名前 ('山田' など) に置き換えたものは正常に結果を返しま す。 > > SELECT > pgs2contain(iname, ?), > pgs2contain(oname, ?), > pgs2contain(word, ?), > pgs2getscore(ctid) AS score > FROM names > WHERE array[iname, oname, word] @@ ? > ORDER BY score DESC LIMIT 1 > > 一方、次の文は '山田', '中津川', '佐藤' で成功し、 '古川', '菅原' で成功し ませんでした。 > 上記と同様、エラーが出て接続が切れてしまいます。 > > SELECT > pgs2contain(oname, ?), > pgs2contain(iname, ?), > pgs2contain(word, ?), > pgs2getscore(ctid) AS score > FROM names > WHERE array[iname, oname, word] @@ ? > ORDER BY score DESC LIMIT 1 > > pgs2getscore() を使わないようにすると、エラーはなくなります。 > また、こちらは ludia.enable_seqscan = off は影響しませんでした。 > REINDEX を試してみましたが、依然エラーは出ています。 > ( もしかするとエラーが起こるクエリには変化があったかもしれません。 ) > > > 以上二点、原因が同じかどうかわかりませんが。それにレアケースと思いますが。 > 何かのお役に立てば幸いです。よろしくお願いいたします。 > > -- > ASARI Takashi @ Todai Fink Team > http://fink.sodan.ecc.u-tokyo.ac.jp/ > > _______________________________________________ > Ludia-users mailing list > Ludia****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/ludia-users >