pgroonga / pgroonga

PGroonga is a PostgreSQL extension to use Groonga as index. PGroonga makes PostgreSQL fast full text search platform for all languages!
https://pgroonga.github.io/
Other
551 stars 23 forks source link

Hard to understand pgroonga.command error message #54

Open okkez opened 7 years ago

okkez commented 7 years ago

未定義のカラムをクエリー内で使用したときに、エラーメッセージがわかりづらく原因を見つけるのに時間がかかってしまいます。 groonga レベルのログには [expr][parse] unknown identifier: <is_private> のように表示されているので、この情報を pgroonga.command にも含めてもらえると、助かります。

kou commented 7 years ago

Please provide SQL to reproduce the case.

okkez commented 7 years ago
create table memos(id integer, content text);
create index pgroonga_content_index on memos using pgroonga (content);
INSERT INTO memos VALUES (1, 'PostgreSQLはリレーショナル・データベース管理システムです。');
INSERT INTO memos VALUES (2, 'Groongaは日本語対応の高速な全文検索エンジンです。');
INSERT INTO memos VALUES (3, 'PGroongaはインデックスとしてGroongaを使うためのPostgreSQLの拡張機能です。');
INSERT INTO memos VALUES (4, 'groongaコマンドがあります。');
select pgroonga.command('select', ARRAY['table', pgroonga.table_name('pgroonga_content_index'), 'match_columns', 'content', 'query', 'hoge', 'filter', 'in_values(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) && contentxxx == ""'])::json;
                                                                                                             command                         
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 [[-63,1503923616.560221,0.006186008453369141,"Syntax error: <in_values(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) && contentxxx",[["yy_syntax_error","grn_ecmascript.lemon",41]]]]

こんな感じで、長いクエリを流し込むとメッセージの後ろの方が切れてしまって表示されません。

2017-08-28 21:33:36.560688|e|27877: [expr][parse] unknown identifier: <contentxxx>
2017-08-28 21:33:36.563504|e|27877: /usr/lib/x86_64-linux-gnu/libgroonga.so.0(grn_expr_parse+0x2a35) [0x7fe5930b5695]
2017-08-28 21:33:36.563548|e|27877: /usr/lib/x86_64-linux-gnu/libgroonga.so.0(+0x34ef0e) [0x7fe593263f0e]
2017-08-28 21:33:36.563565|e|27877: /usr/lib/x86_64-linux-gnu/libgroonga.so.0(+0x34fd7d) [0x7fe593264d7d]
2017-08-28 21:33:36.563580|e|27877: /usr/lib/x86_64-linux-gnu/libgroonga.so.0(+0x351e81) [0x7fe593266e81]
2017-08-28 21:33:36.563594|e|27877: /usr/lib/x86_64-linux-gnu/libgroonga.so.0(grn_proc_call+0xb8) [0x7fe593023e58]
2017-08-28 21:33:36.563609|e|27877: /usr/lib/x86_64-linux-gnu/libgroonga.so.0(grn_command_run+0x78) [0x7fe592fc62a8]
2017-08-28 21:33:36.563623|e|27877: /usr/lib/x86_64-linux-gnu/libgroonga.so.0(grn_expr_exec+0x262) [0x7fe593028412]
2017-08-28 21:33:36.563637|e|27877: /usr/lib/x86_64-linux-gnu/libgroonga.so.0(grn_ctx_qe_exec+0x6cb) [0x7fe592fcb1ab]
2017-08-28 21:33:36.563651|e|27877: /usr/lib/x86_64-linux-gnu/libgroonga.so.0(grn_ctx_send+0x557) [0x7fe592fcbda7]
2017-08-28 21:33:36.563665|e|27877: /usr/lib/postgresql/9.6/lib/pgroonga.so(pgroonga_command+0x62d) [0x7fe593a1491d]
2017-08-28 21:33:36.563708|e|27877: postgres: kenji redmine-3.3 [local] SELECT(+0x2123fc) [0x56157d7533fc]
2017-08-28 21:33:36.563723|e|27877: postgres: kenji redmine-3.3 [local] SELECT(+0x213ec0) [0x56157d754ec0]
2017-08-28 21:33:36.563737|e|27877: postgres: kenji redmine-3.3 [local] SELECT(ExecProject+0x1a2) [0x56157d759352]
2017-08-28 21:33:36.563750|e|27877: postgres: kenji redmine-3.3 [local] SELECT(ExecResult+0x68) [0x56157d76ef18]
2017-08-28 21:33:36.563763|e|27877: postgres: kenji redmine-3.3 [local] SELECT(ExecProcNode+0x290) [0x56157d7523d0]
2017-08-28 21:33:36.563776|e|27877: postgres: kenji redmine-3.3 [local] SELECT(standard_ExecutorRun+0x14e) [0x56157d74e5de]
2017-08-28 21:33:36.563800|e|27877: Syntax error: <in_values(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
,1,1,1,1) && contentxxx| |== "">: Syntax error: <in_values(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
,1,1,1) && contentxxx