OSDN Git Service

ドキュメントの記述やGUCパラメータの仕様を本体に合わせて修正。
authorShigeru Hanada <shigeru.hanada@gmail.com>
Thu, 19 Apr 2012 05:05:31 +0000 (14:05 +0900)
committerShigeru Hanada <shigeru.hanada@gmail.com>
Thu, 19 Apr 2012 05:05:31 +0000 (14:05 +0900)
- ログレベル指定のパラメータ名は *_messages
- debug_print* の出力ログレベルは LOG
- その他記述修正

doc/pg_hint_plan-ja.html
expected/prepare-9.1.out
expected/prepare-9.2.out
pg_hint_plan.c
sql/prepare.sql

index b38aa39..30a885e 100644 (file)
@@ -87,7 +87,7 @@ LOAD
 postgres=# </pre>
 
 <h3 id="hint-rule">ヒントの記述方法</h3>
-<p>ヒントはクエリの前のブロックコメント内に、スペース、タブまたは改行のいずれかで区切って記述してください。ヒントの対象は、カッコ内にオブジェクト名または別名(エイリアス)で指定してください。</p>
+<p>ã\83\92ã\83³ã\83\88ã\81¯ã\82¯ã\82¨ã\83ªã\81®å\89\8dã\81®ã\83\96ã\83­ã\83\83ã\82¯ã\82³ã\83¡ã\83³ã\83\88å\86\85ã\81«ã\80\81ã\82¹ã\83\9aã\83¼ã\82¹ã\80\81ã\82¿ã\83\96ã\80\81ã\81¾ã\81\9fã\81¯æ\94¹è¡\8cã\81®ã\81\84ã\81\9aã\82\8cã\81\8bã\81§å\8cºå\88\87ã\81£ã\81¦è¨\98è¿°ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82ã\83\92ã\83³ã\83\88ã\81®å¯¾è±¡ã\81¯ã\80\81ã\82«ã\83\83ã\82³å\86\85ã\81«ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88å\90\8dã\81¾ã\81\9fã\81¯å\88¥å\90\8d\82¨ã\82¤ã\83ªã\82¢ã\82¹)ã\81§æ\8c\87å®\9aã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82</p>
 
 <p>以下の例では、HashJoinとSeqScanヒントにより、pgbench_accountsテーブルに対するSeq Scanの結果をHash Joinする実行計画が選択されています。</p>
 <pre>
@@ -113,7 +113,7 @@ postgres-#   ORDER BY a.aid;
 postgres=# </pre>
 
 <h3 id="hint-group">ヒントのグループ</h3>
-<p>pg_hint_planã\81§ä½¿ã\81\88ã\82\8bã\83\92ã\83³ã\83\88ã\81®ã\82°ã\83«ã\83¼ã\83\97ã\81¯ã\80\81ã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\81¨çµ\90å\90\88æ\96¹å¼\8fã\80\81çµ\90å\90\88é \86åº\8fã\80\81GUCã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\81®4é\80\9aã\82\8aに分けられます。同じグループのヒントを同じオブジェクトに対して指定した場合は、最後に指定したヒントが適用されます。各グループの具体的なヒントは、<a href="hint_list-ja.html">ヒント一覧</a>を参照してください。</p>
+<p>pg_hint_planã\81§ä½¿ã\81\88ã\82\8bã\83\92ã\83³ã\83\88ã\81¯ã\80\81ã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\81¨çµ\90å\90\88æ\96¹å¼\8fã\80\81çµ\90å\90\88é \86åº\8fã\80\81GUCã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\81®4ã\82°ã\83«ã\83¼ã\83\97に分けられます。同じグループのヒントを同じオブジェクトに対して指定した場合は、最後に指定したヒントが適用されます。各グループの具体的なヒントは、<a href="hint_list-ja.html">ヒント一覧</a>を参照してください。</p>
 
 <h4>スキャン方式</h4>
 <p>あるテーブルのスキャン方式を選択するかを指定できるヒントのグループで、「SeqScan」や「IndexScan」などが含まれます</p>
@@ -138,11 +138,11 @@ postgres=# </pre>
 </tr></thead>
 <tbody>
 <tr><td>pg_hint_plan.enable</td>
-  <td>on のとき、pg_hint_planの機能を有効にします。</td><td>on</td></tr>
+  <td>pg_hint_planの機能を有効または無効にします。</td><td>on</td></tr>
 <tr><td>pg_hint_plan.debug_print</td>
-  <td>on のとき、プランナが実行計画を生成するときに用いたヒントを表示します。</td><td>off</td></tr>
-<tr><td>pg_hint_plan.parse_message</td>
-  <td>æ\8c\87å®\9aã\81\97ã\81\9fã\83\92ã\83³ã\83\88ã\81«å¯¾ã\81\97ã\81¦ã\80\81ã\81©ã\81®ã\83¡ã\83\83ã\82»ã\83¼ã\82¸é\9a\8e層ã\82\92表示ã\81\99ã\82\8bã\81\8bã\82\92æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\9c\89å\8a¹ã\81ªå\80¤ã\81¯ã\80\81debug5ã\80\81debug4ã\80\81debug3ã\80\81debug2ã\80\81debug1ã\80\81logã\80\81infoã\80\81noticeã\80\81warningã\81¾ã\81\9fã\81¯errorã\81§ã\81\99。</td><td>info</td></tr>
+  <td>pg_hint_planのデバッグ出力を有効にします。メッセージはLOGメッセージレベルで出力されますので、デフォルトではサーバログに出力され、クライアントには渡されません。</td><td>off</td></tr>
+<tr><td>pg_hint_plan.parse_messages</td>
+  <td>æ\8c\87å®\9aã\81\97ã\81\9fã\83\92ã\83³ã\83\88ã\82\92解é\87\88ã\81§ã\81\8dã\81ªã\81\8bã\81£ã\81\9få ´å\90\88ã\81«ã\80\81ã\81©ã\81®ã\83¡ã\83\83ã\82»ã\83¼ã\82¸é\9a\8e層ã\81§ã\83­ã\82°ã\82\92å\87ºå\8a\9bã\81\99ã\82\8bã\81\8bã\82\92æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\9c\89å\8a¹ã\81ªå\80¤ã\81¯ã\80\81debug5ã\80\81debug4ã\80\81debug3ã\80\81debug2ã\80\81debug1ã\80\81logã\80\81infoã\80\81noticeã\80\81warningã\80\81ã\81¾ã\81\9fã\81¯errorã\81§ã\81\99ã\80\82fatalã\81¨panicã\81¯æ\8c\87å®\9aã\81§ã\81\8dã\81¾ã\81\9bã\82\93。</td><td>info</td></tr>
 </tbody>
 </table>
 
index e30f04e..89f4328 100644 (file)
@@ -1,6 +1,7 @@
 LOAD 'pg_hint_plan';
 SET pg_hint_plan.enable TO on;
 SET pg_hint_plan.debug_print TO true;
+SET client_min_messages TO 'LOG';
 EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id;
                  QUERY PLAN                 
 --------------------------------------------
@@ -26,7 +27,7 @@ EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id
 -- 9.2:PREPAREでヒント句を指定しても、実行計画は制御できない
 /* NestLoop(t1 t2) */
 PREPARE p1 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id;
-INFO:  /*
+LOG:  /*
 NestLoop(t1 t2)
 */
 EXPLAIN (COSTS false) EXECUTE p1;
@@ -43,7 +44,7 @@ EXPLAIN (COSTS false) EXECUTE p1;
 -- 9.2:パラメータがない場合は、1回目のEXPLAINで実行計画が決定する
 /* NestLoop(t1 t2) */
 PREPARE p2 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id;
-INFO:  /*
+LOG:  /*
 NestLoop(t1 t2)
 */
 /* HashJoin(t1 t2) */
@@ -81,7 +82,7 @@ EXPLAIN (COSTS false) EXECUTE p2;
 -- 9.2:5回目のEXPLAINまでヒント句を指定しても、6回目以降は本来の実行計画に戻る
 /* NestLoop(t1 t2) */
 PREPARE p3 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1;
-INFO:  /*
+LOG:  /*
 NestLoop(t1 t2)
 */
 /* HashJoin(t1 t2) */
@@ -173,7 +174,7 @@ EXPLAIN (COSTS false) EXECUTE p3 (10);
 -- 9.2:6回目のEXPLAINまでヒント句を指定すると、7回目以降も実行計画が固定される
 /* NestLoop(t1 t2) */
 PREPARE p4 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1;
-INFO:  /*
+LOG:  /*
 NestLoop(t1 t2)
 */
 /* HashJoin(t1 t2) */
@@ -266,7 +267,7 @@ EXPLAIN (COSTS false) EXECUTE p4 (10);
 -- 9.2:6回目のEXPLAINでヒント句を指定すると、7回目以降も実行計画を制御できる
 /* NestLoop(t1 t2) */
 PREPARE p5 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1;
-INFO:  /*
+LOG:  /*
 NestLoop(t1 t2)
 */
 EXPLAIN (COSTS false) EXECUTE p5 (10);
@@ -356,7 +357,7 @@ EXPLAIN (COSTS false) EXECUTE p5 (10);
 -- 9.2:7回目以降のEXPLAINでヒント句を指定しても、以降も実行計画は制御できない
 /* NestLoop(t1 t2) */
 PREPARE p6 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1;
-INFO:  /*
+LOG:  /*
 NestLoop(t1 t2)
 */
 EXPLAIN (COSTS false) EXECUTE p6 (10);
@@ -445,7 +446,7 @@ EXPLAIN (COSTS false) EXECUTE p6 (10);
 -- 9.2:実行計画が固定されたあと、ANALYZEをすると1回目のEXECUTEで実行計画が固定される
 /* NestLoop(t1 t2) */
 PREPARE p7 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1;
-INFO:  /*
+LOG:  /*
 NestLoop(t1 t2)
 */
 /* HashJoin(t1 t2) */
@@ -585,7 +586,7 @@ EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p7 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
                  QUERY PLAN                 
index 813e790..748c6a5 100644 (file)
@@ -1,6 +1,7 @@
 LOAD 'pg_hint_plan';
 SET pg_hint_plan.enable TO on;
 SET pg_hint_plan.debug_print TO true;
+SET client_min_messages TO 'LOG';
 EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id;
                    QUERY PLAN                    
 -------------------------------------------------
@@ -42,7 +43,7 @@ EXPLAIN (COSTS false) EXECUTE p1;
 PREPARE p2 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id;
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p2;
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -83,7 +84,7 @@ EXPLAIN (COSTS false) EXECUTE p2;
 PREPARE p3 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1;
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p3 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -99,7 +100,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p3 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -115,7 +116,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p3 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -131,7 +132,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p3 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -147,7 +148,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p3 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -200,7 +201,7 @@ EXPLAIN (COSTS false) EXECUTE p3 (10);
 PREPARE p4 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1;
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p4 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -216,7 +217,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p4 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -232,7 +233,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p4 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -248,7 +249,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p4 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -264,7 +265,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p4 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -280,7 +281,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p4 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
                    QUERY PLAN                    
@@ -379,10 +380,10 @@ EXPLAIN (COSTS false) EXECUTE p5 (10);
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p5 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -398,7 +399,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p5 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -414,7 +415,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p5 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -528,7 +529,7 @@ EXPLAIN (COSTS false) EXECUTE p6 (10);
 PREPARE p7 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1;
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p7 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -544,7 +545,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p7 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -560,7 +561,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p7 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -576,7 +577,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p7 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -592,7 +593,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p7 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
              QUERY PLAN             
@@ -608,7 +609,7 @@ HashJoin(t1 t2)
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p7 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
                    QUERY PLAN                    
@@ -697,7 +698,7 @@ EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id
 
 /* HashJoin(t1 t2) */
 EXPLAIN (COSTS false) EXECUTE p7 (10);
-INFO:  /*
+LOG:  /*
 HashJoin(t1 t2)
 */
                    QUERY PLAN                    
index b38316e..b7dc10e 100644 (file)
@@ -56,7 +56,7 @@ PG_MODULE_MAGIC;
 #define HINT_ARRAY_DEFAULT_INITSIZE 8
 
 #define parse_ereport(str, detail) \
-       ereport(pg_hint_plan_parse_message, \
+       ereport(pg_hint_plan_parse_messages, \
                        (errmsg("hint syntax error at or near \"%s\"", (str)), \
                         errdetail detail))
 
@@ -175,9 +175,9 @@ static void set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblE
 /* GUC variables */
 static bool pg_hint_plan_enable = true;
 static bool pg_hint_plan_debug_print = false;
-static int pg_hint_plan_parse_message = INFO;
+static int pg_hint_plan_parse_messages = INFO;
 
-static const struct config_enum_entry parse_message_level_options[] = {
+static const struct config_enum_entry parse_messages_level_options[] = {
        {"debug", DEBUG2, true},
        {"debug5", DEBUG5, false},
        {"debug4", DEBUG4, false},
@@ -257,12 +257,12 @@ _PG_init(void)
                                                         NULL,
                                                         NULL);
 
-       DefineCustomEnumVariable("pg_hint_plan.parse_message",
+       DefineCustomEnumVariable("pg_hint_plan.parse_messages",
                                                         "Messege level of the parse error.",
                                                         NULL,
-                                                        &pg_hint_plan_parse_message,
+                                                        &pg_hint_plan_parse_messages,
                                                         INFO,
-                                                        parse_message_level_options,
+                                                        parse_messages_level_options,
                                                         PGC_USERSET,
                                                         0,
                                                         NULL,
@@ -456,7 +456,7 @@ PlanHintDump(PlanHint *hint)
 
        if (!hint)
        {
-               elog(INFO, "no hint");
+               elog(LOG, "no hint");
                return;
        }
 
@@ -559,7 +559,7 @@ PlanHintDump(PlanHint *hint)
 
        appendStringInfoString(&buf, "*/");
 
-       elog(INFO, "%s", buf.data);
+       elog(LOG, "%s", buf.data);
 
        pfree(buf.data);
 }
@@ -687,7 +687,7 @@ set_config_options(List *options, GucContext context)
                if (result > 0)
                        result = set_config_option(hint->name, hint->value, context,
                                                PGC_S_SESSION, GUC_ACTION_SAVE, true,
-                                               pg_hint_plan_parse_message);
+                                               pg_hint_plan_parse_messages);
        }
 
        return save_nestlevel;
index 89ed91f..e1af461 100644 (file)
@@ -1,6 +1,7 @@
 LOAD 'pg_hint_plan';
 SET pg_hint_plan.enable TO on;
 SET pg_hint_plan.debug_print TO true;
+SET client_min_messages TO 'LOG';
 
 EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id;
 EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > 10;