2 SET pg_hint_plan.enable_hint TO on;
3 SET pg_hint_plan.debug_print TO on;
4 SET client_min_messages TO LOG;
5 SET search_path TO public;
8 ---- No.A-2-1 uninstall
11 CREATE EXTENSION pg_hint_plan;
13 DROP EXTENSION pg_hint_plan;
15 CREATE SCHEMA other_schema;
16 CREATE EXTENSION pg_hint_plan SCHEMA other_schema;
17 ERROR: extension "pg_hint_plan" must be installed in schema "hint_plan"
18 CREATE EXTENSION pg_hint_plan;
19 DROP SCHEMA other_schema;
21 ---- No. A-5-1 comment pattern
25 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
41 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
43 ------------------------------
44 Index Scan using t1_i1 on t1
50 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
52 ------------------------------
53 Index Scan using t1_i1 on t1
59 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
61 ------------------------------
62 Index Scan using t1_i1 on t1
67 /* /*+SeqScan(t1)*/ */
68 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
70 ------------------------------
71 Index Scan using t1_i1 on t1
76 ---- No. A-5-2 hint position
79 EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 = 1;
81 -----------------------------------
82 Index Only Scan using t1_i1 on t1
87 EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 = 1;
102 EXPLAIN (COSTS false) SELECT c1, c2 AS c_2 /*+SeqScan(t1)*/ FROM s1.t1 WHERE t1.c1 = 1;
117 EXPLAIN (COSTS false) SELECT c1 AS "c1"/*+SeqScan(t1)*/ FROM s1.t1 WHERE t1.c1 = 1;
119 -----------------------------------
120 Index Only Scan using t1_i1 on t1
125 EXPLAIN (COSTS false) SELECT * /*+SeqScan(t1)*/ FROM s1.t1 WHERE t1.c1 = 1;
127 ------------------------------
128 Index Scan using t1_i1 on t1
133 ---- No. A-6-1 hint's table definition
135 SET pg_hint_plan.enable_hint_table TO on;
138 Table "hint_plan.hints"
139 Column | Type | Collation | Nullable | Default
140 -------------------+---------+-----------+----------+---------------------------------------------
141 id | integer | | not null | nextval('hint_plan.hints_id_seq'::regclass)
142 norm_query_string | text | | not null |
143 application_name | text | | not null |
144 hints | text | | not null |
146 "hints_pkey" PRIMARY KEY, btree (id)
147 "hints_norm_and_app" UNIQUE, btree (norm_query_string, application_name)
150 ---- No. A-6-2 search condition
152 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
154 ------------------------------
155 Index Scan using t1_i1 on t1
160 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints)
162 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
165 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
180 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints)
182 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
185 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
199 TRUNCATE hint_plan.hints;
201 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints)
203 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
204 'dummy_application_name',
207 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
209 ------------------------------
210 Index Scan using t1_i1 on t1
214 TRUNCATE hint_plan.hints;
216 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints)
218 'EXPLAIN (COSTS false) SELECT * FROM s1.t1;',
222 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
224 ------------------------------
225 Index Scan using t1_i1 on t1
229 TRUNCATE hint_plan.hints;
231 ---- No. A-6-3 number of constant
234 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints)
236 'EXPLAIN (COSTS false) SELECT c1 FROM s1.t1;',
240 EXPLAIN (COSTS false) SELECT c1 FROM s1.t1;
253 TRUNCATE hint_plan.hints;
255 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints)
257 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
261 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
275 TRUNCATE hint_plan.hints;
277 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints)
279 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ? OR t1.c1 = ?;',
283 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 OR t1.c1 = 0;
292 ----------------------------------
294 Filter: ((c1 = 1) OR (c1 = 0))
297 TRUNCATE hint_plan.hints;
298 SET pg_hint_plan.enable_hint_table TO off;
300 ---- No. A-7-2 hint delimiter
302 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
304 ------------------------------
305 Index Scan using t1_i1 on t1
316 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
317 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
320 Set(enable_bitmapscan off)
321 Set(enable_indexscan off)
333 /*+ Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
334 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
337 Set(enable_bitmapscan off)
338 Set(enable_indexscan off)
350 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off") */
351 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
354 Set(enable_bitmapscan off)
355 Set(enable_indexscan off)
367 /*+ Set (enable_indexscan"off") Set (enable_bitmapscan"off")*/
368 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
371 Set(enable_bitmapscan off)
372 Set(enable_indexscan off)
384 /*+Set ( enable_indexscan"off")Set ( enable_bitmapscan"off")*/
385 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
388 Set(enable_bitmapscan off)
389 Set(enable_indexscan off)
401 /*+Set(enable_indexscan"off" ) Set(enable_bitmapscan"off" ) */
402 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
405 Set(enable_bitmapscan off)
406 Set(enable_indexscan off)
418 /*+Set( enable_indexscan "off" )Set( enable_bitmapscan "off" )*/
419 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
422 Set(enable_bitmapscan off)
423 Set(enable_indexscan off)
435 /*+ Set ( enable_indexscan "off" ) Set ( enable_bitmapscan "off" ) */
436 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
439 Set(enable_bitmapscan off)
440 Set(enable_indexscan off)
452 /*+ Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
453 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
456 Set(enable_bitmapscan off)
457 Set(enable_indexscan off)
469 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off") */
470 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
473 Set(enable_bitmapscan off)
474 Set(enable_indexscan off)
486 /*+ Set (enable_indexscan"off") Set (enable_bitmapscan"off")*/
487 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
490 Set(enable_bitmapscan off)
491 Set(enable_indexscan off)
503 /*+Set ( enable_indexscan"off")Set ( enable_bitmapscan"off")*/
504 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
507 Set(enable_bitmapscan off)
508 Set(enable_indexscan off)
520 /*+Set(enable_indexscan"off" ) Set(enable_bitmapscan"off" ) */
521 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
524 Set(enable_bitmapscan off)
525 Set(enable_indexscan off)
537 /*+Set( enable_indexscan "off" )Set( enable_bitmapscan "off" )*/
538 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
541 Set(enable_bitmapscan off)
542 Set(enable_indexscan off)
554 /*+ Set ( enable_indexscan "off" ) Set ( enable_bitmapscan "off" ) */
555 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
558 Set(enable_bitmapscan off)
559 Set(enable_indexscan off)
572 Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
573 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
576 Set(enable_bitmapscan off)
577 Set(enable_indexscan off)
589 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")
591 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
594 Set(enable_bitmapscan off)
595 Set(enable_indexscan off)
609 (enable_indexscan"off")
611 (enable_bitmapscan"off")*/
612 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
615 Set(enable_bitmapscan off)
616 Set(enable_indexscan off)
630 enable_indexscan"off")Set
632 enable_bitmapscan"off")*/
633 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
636 Set(enable_bitmapscan off)
637 Set(enable_indexscan off)
649 /*+Set(enable_indexscan"off"
651 Set(enable_bitmapscan"off"
654 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
657 Set(enable_bitmapscan off)
658 Set(enable_indexscan off)
677 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
680 Set(enable_bitmapscan off)
681 Set(enable_indexscan off)
705 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
708 Set(enable_bitmapscan off)
709 Set(enable_indexscan off)
722 Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
723 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
726 Set(enable_bitmapscan off)
727 Set(enable_indexscan off)
739 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")
741 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
744 Set(enable_bitmapscan off)
745 Set(enable_indexscan off)
759 (enable_indexscan"off")
761 (enable_bitmapscan"off")*/
762 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
765 Set(enable_bitmapscan off)
766 Set(enable_indexscan off)
780 enable_indexscan"off")Set
782 enable_bitmapscan"off")*/
783 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
786 Set(enable_bitmapscan off)
787 Set(enable_indexscan off)
799 /*+Set(enable_indexscan"off"
801 Set(enable_bitmapscan"off"
804 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
807 Set(enable_bitmapscan off)
808 Set(enable_indexscan off)
827 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
830 Set(enable_bitmapscan off)
831 Set(enable_indexscan off)
855 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
858 Set(enable_bitmapscan off)
859 Set(enable_indexscan off)
871 ---- No. A-7-3 hint object pattern
872 ---- No. A-9-2 message object pattern
877 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t WHERE t.c1 = 1;
892 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ttt WHERE ttt.c1 = 1;
907 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t WHERE t.c1 = 1;
922 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ttt WHERE ttt.c1 = 1;
939 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "T" WHERE "T".c1 = 1;
954 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "TTT" WHERE "TTT".c1 = 1;
963 ----------------------
969 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "T" WHERE "T".c1 = 1;
984 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "TTT" WHERE "TTT".c1 = 1;
993 ----------------------
1001 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(" WHERE "(".c1 = 1;
1002 INFO: pg_hint_plan: hint syntax error at or near "()"
1003 DETAIL: Zero-length delimited string.
1005 ----------------------------------
1006 Index Scan using t1_i1 on t1 "("
1007 Index Cond: (c1 = 1)
1011 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(" WHERE "(".c1 = 1;
1020 --------------------
1028 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
1029 INFO: pg_hint_plan: hint syntax error at or near ")"
1030 DETAIL: SeqScan hint requires a relation.
1031 INFO: pg_hint_plan: hint syntax error at or near ")"
1032 DETAIL: Unrecognized hint keyword ")".
1041 ----------------------------------
1042 Index Scan using t1_i1 on t1 ")"
1043 Index Cond: (c1 = 1)
1047 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
1056 --------------------
1062 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")))" WHERE ")))".c1 = 1;
1071 ----------------------
1072 Seq Scan on t1 ")))"
1079 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
1080 INFO: pg_hint_plan: hint syntax error at or near ""
1081 DETAIL: Unterminated quoted string.
1083 -----------------------------------
1084 Index Scan using t1_i1 on t1 """"
1085 Index Cond: (c1 = 1)
1089 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
1098 ---------------------
1103 /*+SeqScan("""""""")*/
1104 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """""""" WHERE """""""".c1 = 1;
1113 -------------------------
1114 Seq Scan on t1 """"""""
1121 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
1122 INFO: pg_hint_plan: hint syntax error at or near ""
1123 DETAIL: SeqScan hint requires a relation.
1132 ----------------------------------
1133 Index Scan using t1_i1 on t1 " "
1134 Index Cond: (c1 = 1)
1138 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
1147 --------------------
1153 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
1162 ----------------------
1170 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
1171 INFO: pg_hint_plan: hint syntax error at or near ""
1172 DETAIL: SeqScan hint requires a relation.
1181 -----------------------------------
1182 Index Scan using t1_i1 on t1 " "
1183 Index Cond: (c1 = 1)
1187 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
1196 ---------------------------
1202 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
1211 -------------------------------------------
1220 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
1223 INFO: pg_hint_plan: hint syntax error at or near ""
1224 DETAIL: SeqScan hint requires a relation.
1233 --------------------------------
1234 Index Scan using t1_i1 on t1 "
1236 Index Cond: (c1 = 1)
1241 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
1253 --------------------
1263 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
1281 --------------------
1292 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
1301 ----------------------
1302 Seq Scan on t1 "Set"
1307 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
1316 ----------------------
1317 Seq Scan on t1 "Set"
1321 /*+SeqScan("Set SeqScan Leading")*/
1322 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set SeqScan Leading" WHERE "Set SeqScan Leading".c1 = 1;
1325 SeqScan("Set SeqScan Leading")
1331 --------------------------------------
1332 Seq Scan on t1 "Set SeqScan Leading"
1339 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あ WHERE あ.c1 = 1;
1348 ---------------------
1354 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あいう WHERE あいう.c1 = 1;
1363 -------------------------
1364 Seq Scan on t1 "あいう"
1369 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あ WHERE あ.c1 = 1;
1378 ---------------------
1384 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あいう WHERE あいう.c1 = 1;
1393 -------------------------
1394 Seq Scan on t1 "あいう"
1401 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**/" WHERE "/**/".c1 = 1;
1402 INFO: pg_hint_plan: hint syntax error at or near "/**/)*/
1403 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**/" WHERE "/**/".c1 = 1;"
1404 DETAIL: Nested block comments are not supported.
1406 -------------------------------------
1407 Index Scan using t1_i1 on t1 "/**/"
1408 Index Cond: (c1 = 1)
1411 /*+SeqScan(/**//**//**/)*/
1412 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**//**//**/" WHERE "/**//**//**/".c1 = 1;
1413 INFO: pg_hint_plan: hint syntax error at or near "/**//**//**/)*/
1414 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**//**//**/" WHERE "/**//**//**/".c1 = 1;"
1415 DETAIL: Nested block comments are not supported.
1417 ---------------------------------------------
1418 Index Scan using t1_i1 on t1 "/**//**//**/"
1419 Index Cond: (c1 = 1)
1426 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""
1427 Set/**/あ" WHERE "tT()""
1429 INFO: pg_hint_plan: hint syntax error at or near "/**/あ")*/
1430 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""
1431 Set/**/あ" WHERE "tT()""
1433 DETAIL: Nested block comments are not supported.
1435 ------------------------------------------
1436 Index Scan using t1_i1 on t1 "tT()""
1438 Index Cond: (c1 = 1)
1444 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""
1456 --------------------------
1457 Seq Scan on t1 "tT()""
1464 /*+SeqScan(a123456789b123456789c123456789d123456789e123456789f123)*/
1465 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "123456789012345678901234567890123456789012345678901234" WHERE "123456789012345678901234567890123456789012345678901234".c1 = 1;
1469 SeqScan(a123456789b123456789c123456789d123456789e123456789f123)
1474 ---------------------------------------------------------------------------------------
1475 Index Scan using t1_i1 on t1 "123456789012345678901234567890123456789012345678901234"
1476 Index Cond: (c1 = 1)
1480 ---- No. A-7-4 hint parse error
1483 /*+Set(enable_indexscan off)Set enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
1484 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1485 INFO: pg_hint_plan: hint syntax error at or near "enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)"
1486 DETAIL: Opening parenthesis is necessary.
1489 Set(enable_indexscan off)
1495 ----------------------------------
1496 Bitmap Heap Scan on t1
1497 Recheck Cond: (c1 = 1)
1498 -> Bitmap Index Scan on t1_i1
1499 Index Cond: (c1 = 1)
1503 /*+Set(enable_indexscan off)Set(enable_tidscan off Set(enable_bitmapscan off)SeqScan(t1)*/
1504 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1505 INFO: pg_hint_plan: hint syntax error at or near "(enable_bitmapscan off)SeqScan(t1)"
1506 DETAIL: Zero-length delimited string.
1509 Set(enable_indexscan off)
1515 ----------------------------------
1516 Bitmap Heap Scan on t1
1517 Recheck Cond: (c1 = 1)
1518 -> Bitmap Index Scan on t1_i1
1519 Index Cond: (c1 = 1)
1523 /*+Set(enable_indexscan off)Set(enable_tidscan "off)Set(enable_bitmapscan off)SeqScan(t1)*/
1524 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1525 INFO: pg_hint_plan: hint syntax error at or near ""
1526 DETAIL: Unterminated quoted string.
1529 Set(enable_indexscan off)
1535 ----------------------------------
1536 Bitmap Heap Scan on t1
1537 Recheck Cond: (c1 = 1)
1538 -> Bitmap Index Scan on t1_i1
1539 Index Cond: (c1 = 1)
1543 /*+Set(enable_indexscan off)SeqScan("")Set(enable_bitmapscan off)*/
1544 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1545 INFO: pg_hint_plan: hint syntax error at or near ")Set(enable_bitmapscan off)"
1546 DETAIL: Zero-length delimited string.
1549 Set(enable_indexscan off)
1555 ----------------------------------
1556 Bitmap Heap Scan on t1
1557 Recheck Cond: (c1 = 1)
1558 -> Bitmap Index Scan on t1_i1
1559 Index Cond: (c1 = 1)
1563 /*+Set(enable_indexscan off)NoSet(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
1564 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1565 INFO: pg_hint_plan: hint syntax error at or near "NoSet(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)"
1566 DETAIL: Unrecognized hint keyword "NoSet".
1569 Set(enable_indexscan off)
1575 ----------------------------------
1576 Bitmap Heap Scan on t1
1577 Recheck Cond: (c1 = 1)
1578 -> Bitmap Index Scan on t1_i1
1579 Index Cond: (c1 = 1)
1583 /*+Set(enable_indexscan off)"Set"(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
1584 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1585 INFO: pg_hint_plan: hint syntax error at or near ""Set"(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)"
1586 DETAIL: Unrecognized hint keyword ""Set"".
1589 Set(enable_indexscan off)
1595 ----------------------------------
1596 Bitmap Heap Scan on t1
1597 Recheck Cond: (c1 = 1)
1598 -> Bitmap Index Scan on t1_i1
1599 Index Cond: (c1 = 1)
1603 /*+Set(enable_indexscan off)Set(enable_tidscan /* value */off)Set(enable_bitmapscan off)SeqScan(t1)*/
1604 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1605 INFO: pg_hint_plan: hint syntax error at or near "/* value */off)Set(enable_bitmapscan off)SeqScan(t1)*/
1606 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;"
1607 DETAIL: Nested block comments are not supported.
1609 ------------------------------
1610 Index Scan using t1_i1 on t1
1611 Index Cond: (c1 = 1)
1615 ---- No. A-8-1 original GUC parameter
1617 ---- Don't test postgresql itself.
1619 -- SET ROLE super_user;
1620 -- SET pg_hint_plan.debug_print TO off;
1621 -- SHOW pg_hint_plan.enable_hint;
1622 -- SHOW pg_hint_plan.debug_print;
1623 -- SHOW pg_hint_plan.parse_messages;
1624 -- SET pg_hint_plan.enable_hint TO off;
1625 -- SET pg_hint_plan.debug_print TO on;
1626 -- SET pg_hint_plan.parse_messages TO error;
1627 -- SHOW pg_hint_plan.enable_hint;
1628 -- SHOW pg_hint_plan.debug_print;
1629 -- SHOW pg_hint_plan.parse_messages;
1630 -- RESET pg_hint_plan.enable_hint;
1631 -- RESET pg_hint_plan.debug_print;
1632 -- RESET pg_hint_plan.parse_messages;
1633 -- SHOW pg_hint_plan.enable_hint;
1634 -- SHOW pg_hint_plan.debug_print;
1635 -- SHOW pg_hint_plan.parse_messages;
1638 -- SET ROLE normal_user;
1639 -- SHOW pg_hint_plan.enable_hint;
1640 -- SHOW pg_hint_plan.debug_print;
1641 -- SHOW pg_hint_plan.parse_messages;
1642 -- SET pg_hint_plan.enable_hint TO off;
1643 -- SET pg_hint_plan.debug_print TO on;
1644 -- SET pg_hint_plan.parse_messages TO error;
1645 -- SHOW pg_hint_plan.enable_hint;
1646 -- SHOW pg_hint_plan.debug_print;
1647 -- SHOW pg_hint_plan.parse_messages;
1648 -- RESET pg_hint_plan.enable_hint;
1649 -- RESET pg_hint_plan.debug_print;
1650 -- RESET pg_hint_plan.parse_messages;
1651 -- SHOW pg_hint_plan.enable_hint;
1652 -- SHOW pg_hint_plan.debug_print;
1653 -- SHOW pg_hint_plan.parse_messages;
1657 ---- No. A-8-2 original GUC parameter pg_hint_plan.enable_hint
1660 SET pg_hint_plan.debug_print TO off;
1661 SET pg_hint_plan.enable_hint TO on;
1662 SHOW pg_hint_plan.enable_hint;
1663 pg_hint_plan.enable_hint
1664 --------------------------
1668 /*+Set(enable_indexscan off)*/
1669 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1671 ----------------------------------
1672 Bitmap Heap Scan on t1
1673 Recheck Cond: (c1 = 1)
1674 -> Bitmap Index Scan on t1_i1
1675 Index Cond: (c1 = 1)
1679 SET pg_hint_plan.enable_hint TO off;
1680 SHOW pg_hint_plan.enable_hint;
1681 pg_hint_plan.enable_hint
1682 --------------------------
1686 /*+Set(enable_indexscan off)*/
1687 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1689 ------------------------------
1690 Index Scan using t1_i1 on t1
1691 Index Cond: (c1 = 1)
1695 -- Don't test PostgreSQL itself.
1696 -- SET pg_hint_plan.enable_hint TO DEFAULT;
1697 -- SHOW pg_hint_plan.enable_hint;
1698 -- /*+Set(enable_indexscan off)*/
1699 -- EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1701 -- Don't test PostgreSQL itself
1702 -- SET pg_hint_plan.enable_hint TO enable;
1703 -- SHOW pg_hint_plan.enable_hint;
1705 ---- No. A-8-3 original GUC parameter pg_hint_plan.debug_print
1708 SET pg_hint_plan.enable_hint TO on;
1709 SHOW pg_hint_plan.enable_hint;
1710 pg_hint_plan.enable_hint
1711 --------------------------
1715 SET pg_hint_plan.debug_print TO on;
1716 SHOW pg_hint_plan.debug_print;
1717 pg_hint_plan.debug_print
1718 --------------------------
1722 /*+Set(enable_indexscan off)*/
1723 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1726 Set(enable_indexscan off)
1732 ----------------------------------
1733 Bitmap Heap Scan on t1
1734 Recheck Cond: (c1 = 1)
1735 -> Bitmap Index Scan on t1_i1
1736 Index Cond: (c1 = 1)
1740 SET pg_hint_plan.debug_print TO off;
1741 SHOW pg_hint_plan.debug_print;
1742 pg_hint_plan.debug_print
1743 --------------------------
1747 /*+Set(enable_indexscan off)*/
1748 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1750 ----------------------------------
1751 Bitmap Heap Scan on t1
1752 Recheck Cond: (c1 = 1)
1753 -> Bitmap Index Scan on t1_i1
1754 Index Cond: (c1 = 1)
1758 SET pg_hint_plan.debug_print TO DEFAULT;
1759 SHOW pg_hint_plan.debug_print;
1760 pg_hint_plan.debug_print
1761 --------------------------
1765 /*+Set(enable_indexscan off)*/
1766 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
1768 ----------------------------------
1769 Bitmap Heap Scan on t1
1770 Recheck Cond: (c1 = 1)
1771 -> Bitmap Index Scan on t1_i1
1772 Index Cond: (c1 = 1)
1776 SET pg_hint_plan.debug_print TO enable;
1777 ERROR: invalid value for parameter "pg_hint_plan.debug_print": "enable"
1778 HINT: Available values: off, on, detailed, verbose.
1779 SHOW pg_hint_plan.debug_print;
1780 pg_hint_plan.debug_print
1781 --------------------------
1786 ---- No. A-8-4 original GUC parameter pg_hint_plan.parse_messages
1788 SET client_min_messages TO debug5;
1789 DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 0/1/0
1791 SET pg_hint_plan.parse_messages TO debug5;
1792 DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0
1793 DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 0/1/0
1794 SHOW pg_hint_plan.parse_messages;
1795 DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0
1796 DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 0/1/0
1797 pg_hint_plan.parse_messages
1798 -----------------------------
1803 DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0
1804 DEBUG: pg_hint_plan: hint syntax error at or near ""
1805 DETAIL: Opening parenthesis is necessary.
1806 DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 0/1/0
1812 SET client_min_messages TO debug4;
1813 DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0
1821 SET pg_hint_plan.parse_messages TO debug4;
1822 SHOW pg_hint_plan.parse_messages;
1823 pg_hint_plan.parse_messages
1824 -----------------------------
1829 DEBUG: pg_hint_plan: hint syntax error at or near ""
1830 DETAIL: Opening parenthesis is necessary.
1836 SET client_min_messages TO debug3;
1844 SET pg_hint_plan.parse_messages TO debug3;
1845 SHOW pg_hint_plan.parse_messages;
1846 pg_hint_plan.parse_messages
1847 -----------------------------
1852 DEBUG: pg_hint_plan: hint syntax error at or near ""
1853 DETAIL: Opening parenthesis is necessary.
1859 SET client_min_messages TO debug2;
1867 SET pg_hint_plan.parse_messages TO debug2;
1868 SHOW pg_hint_plan.parse_messages;
1869 pg_hint_plan.parse_messages
1870 -----------------------------
1875 DEBUG: pg_hint_plan: hint syntax error at or near ""
1876 DETAIL: Opening parenthesis is necessary.
1882 SET client_min_messages TO debug1;
1890 SET pg_hint_plan.parse_messages TO debug1;
1891 SHOW pg_hint_plan.parse_messages;
1892 pg_hint_plan.parse_messages
1893 -----------------------------
1898 DEBUG: pg_hint_plan: hint syntax error at or near ""
1899 DETAIL: Opening parenthesis is necessary.
1905 SET client_min_messages TO log;
1913 SET pg_hint_plan.parse_messages TO log;
1914 SHOW pg_hint_plan.parse_messages;
1915 pg_hint_plan.parse_messages
1916 -----------------------------
1921 LOG: pg_hint_plan: hint syntax error at or near ""
1922 DETAIL: Opening parenthesis is necessary.
1928 SET client_min_messages TO info;
1936 SET pg_hint_plan.parse_messages TO info;
1937 SHOW pg_hint_plan.parse_messages;
1938 pg_hint_plan.parse_messages
1939 -----------------------------
1944 INFO: pg_hint_plan: hint syntax error at or near ""
1945 DETAIL: Opening parenthesis is necessary.
1951 SET client_min_messages TO notice;
1953 INFO: pg_hint_plan: hint syntax error at or near ""
1954 DETAIL: Opening parenthesis is necessary.
1961 SET pg_hint_plan.parse_messages TO notice;
1962 SHOW pg_hint_plan.parse_messages;
1963 pg_hint_plan.parse_messages
1964 -----------------------------
1969 NOTICE: pg_hint_plan: hint syntax error at or near ""
1970 DETAIL: Opening parenthesis is necessary.
1976 SET client_min_messages TO warning;
1984 SET pg_hint_plan.parse_messages TO warning;
1985 SHOW pg_hint_plan.parse_messages;
1986 pg_hint_plan.parse_messages
1987 -----------------------------
1992 WARNING: pg_hint_plan: hint syntax error at or near ""
1993 DETAIL: Opening parenthesis is necessary.
1999 SET client_min_messages TO error;
2007 SET pg_hint_plan.parse_messages TO error;
2008 SHOW pg_hint_plan.parse_messages;
2009 pg_hint_plan.parse_messages
2010 -----------------------------
2015 ERROR: pg_hint_plan: hint syntax error at or near ""
2016 DETAIL: Opening parenthesis is necessary.
2017 SET client_min_messages TO error;
2019 ERROR: pg_hint_plan: hint syntax error at or near ""
2020 DETAIL: Opening parenthesis is necessary.
2022 RESET client_min_messages;
2023 SET pg_hint_plan.parse_messages TO DEFAULT;
2024 SHOW pg_hint_plan.parse_messages;
2025 pg_hint_plan.parse_messages
2026 -----------------------------
2031 INFO: pg_hint_plan: hint syntax error at or near ""
2032 DETAIL: Opening parenthesis is necessary.
2039 SET pg_hint_plan.parse_messages TO fatal;
2040 ERROR: invalid value for parameter "pg_hint_plan.parse_messages": "fatal"
2041 HINT: Available values: debug5, debug4, debug3, debug2, debug1, log, info, notice, warning, error.
2042 SHOW pg_hint_plan.parse_messages;
2043 pg_hint_plan.parse_messages
2044 -----------------------------
2049 SET pg_hint_plan.parse_messages TO panic;
2050 ERROR: invalid value for parameter "pg_hint_plan.parse_messages": "panic"
2051 HINT: Available values: debug5, debug4, debug3, debug2, debug1, log, info, notice, warning, error.
2052 SHOW pg_hint_plan.parse_messages;
2053 pg_hint_plan.parse_messages
2054 -----------------------------
2059 SET pg_hint_plan.parse_messages TO on;
2060 ERROR: invalid value for parameter "pg_hint_plan.parse_messages": "on"
2061 HINT: Available values: debug5, debug4, debug3, debug2, debug1, log, info, notice, warning, error.
2062 SHOW pg_hint_plan.parse_messages;
2063 pg_hint_plan.parse_messages
2064 -----------------------------
2069 ---- No. A-8-5 original GUC parameter pg_hint_plan.enable_hint_table
2071 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints)
2073 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
2077 SET pg_hint_plan.enable_hint_table TO on;
2078 SHOW pg_hint_plan.enable_hint_table;
2079 pg_hint_plan.enable_hint_table
2080 --------------------------------
2084 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2086 --------------------
2092 SET pg_hint_plan.enable_hint_table TO off;
2093 SHOW pg_hint_plan.enable_hint_table;
2094 pg_hint_plan.enable_hint_table
2095 --------------------------------
2099 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2101 ------------------------------
2102 Index Scan using t1_i1 on t1
2103 Index Cond: (c1 = 1)
2107 SET pg_hint_plan.enable_hint_table TO DEFAULT;
2108 SHOW pg_hint_plan.enable_hint_table;
2109 pg_hint_plan.enable_hint_table
2110 --------------------------------
2114 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2116 ------------------------------
2117 Index Scan using t1_i1 on t1
2118 Index Cond: (c1 = 1)
2122 SET pg_hint_plan.enable_hint_table TO enable;
2123 ERROR: parameter "pg_hint_plan.enable_hint_table" requires a Boolean value
2124 SHOW pg_hint_plan.enable_hint_table;
2125 pg_hint_plan.enable_hint_table
2126 --------------------------------
2130 TRUNCATE hint_plan.hints;
2132 ---- No. A-9-1 parse error message output
2135 /*+"Set"(enable_indexscan on)*/SELECT 1;
2136 INFO: pg_hint_plan: hint syntax error at or near ""Set"(enable_indexscan on)"
2137 DETAIL: Unrecognized hint keyword ""Set"".
2143 /*+Set()(enable_indexscan on)*/SELECT 1;
2144 INFO: pg_hint_plan: hint syntax error at or near "Set()(enable_indexscan on)"
2145 DETAIL: Set hint requires name and value of GUC parameter.
2146 INFO: pg_hint_plan: hint syntax error at or near "(enable_indexscan on)"
2147 DETAIL: Unrecognized hint keyword "".
2153 /*+Set(enable_indexscan on*/SELECT 1;
2154 INFO: pg_hint_plan: hint syntax error at or near ""
2155 DETAIL: Closing parenthesis is necessary.
2162 ---- No. A-9-3 hint state output
2164 SET pg_hint_plan.debug_print TO on;
2165 SET client_min_messages TO LOG;
2168 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2177 --------------------
2183 /*+SeqScan(no_table)*/
2184 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2193 ------------------------------
2194 Index Scan using t1_i1 on t1
2195 Index Cond: (c1 = 1)
2199 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
2201 -----------------------------------
2203 TID Cond: (ctid = '(1,1)'::tid)
2207 /*+TidScan(t1)BitmapScan(t1)*/
2208 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
2209 INFO: pg_hint_plan: hint syntax error at or near "TidScan(t1)BitmapScan(t1)"
2210 DETAIL: Conflict scan method hint.
2220 ----------------------------------
2221 Bitmap Heap Scan on t1
2222 Recheck Cond: (c1 = 1)
2223 Filter: (ctid = '(1,1)'::tid)
2224 -> Bitmap Index Scan on t1_i1
2225 Index Cond: (c1 = 1)
2228 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)*/
2229 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
2230 INFO: pg_hint_plan: hint syntax error at or near "TidScan(t1)BitmapScan(t1)IndexScan(t1)"
2231 DETAIL: Conflict scan method hint.
2232 INFO: pg_hint_plan: hint syntax error at or near "BitmapScan(t1)IndexScan(t1)"
2233 DETAIL: Conflict scan method hint.
2244 ---------------------------------
2245 Index Scan using t1_i1 on t1
2246 Index Cond: (c1 = 1)
2247 Filter: (ctid = '(1,1)'::tid)
2250 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)SeqScan(t1)*/
2251 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
2252 INFO: pg_hint_plan: hint syntax error at or near "TidScan(t1)BitmapScan(t1)IndexScan(t1)SeqScan(t1)"
2253 DETAIL: Conflict scan method hint.
2254 INFO: pg_hint_plan: hint syntax error at or near "BitmapScan(t1)IndexScan(t1)SeqScan(t1)"
2255 DETAIL: Conflict scan method hint.
2256 INFO: pg_hint_plan: hint syntax error at or near "IndexScan(t1)SeqScan(t1)"
2257 DETAIL: Conflict scan method hint.
2269 ------------------------------------------------
2271 Filter: ((c1 = 1) AND (ctid = '(1,1)'::tid))
2275 /*+Set(enable_indexscan enable)*/
2276 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2277 INFO: parameter "enable_indexscan" requires a Boolean value
2283 Set(enable_indexscan enable)
2286 ------------------------------
2287 Index Scan using t1_i1 on t1
2288 Index Cond: (c1 = 1)
2292 ---- No. A-10-1 hint state output
2294 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2295 EXPLAIN (COSTS false) EXECUTE p1;
2297 ------------------------------
2298 Index Scan using t1_i1 on t1
2299 Index Cond: (c1 = 1)
2303 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
2304 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2306 -----------------------
2311 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2313 -----------------------
2318 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2320 -----------------------
2325 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2327 -----------------------
2332 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2334 -----------------------
2339 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2341 ---------------------
2350 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2352 EXPLAIN (COSTS false) EXECUTE p1;
2361 --------------------
2366 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
2368 EXPLAIN (COSTS false) EXECUTE p1;
2377 --------------------
2384 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
2386 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2395 ----------------------------------
2396 Bitmap Heap Scan on t1
2397 Recheck Cond: (c1 < 1000)
2398 -> Bitmap Index Scan on t1_i1
2399 Index Cond: (c1 < 1000)
2403 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2412 ----------------------------------
2413 Bitmap Heap Scan on t1
2414 Recheck Cond: (c1 < 1000)
2415 -> Bitmap Index Scan on t1_i1
2416 Index Cond: (c1 < 1000)
2420 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2429 ----------------------------------
2430 Bitmap Heap Scan on t1
2431 Recheck Cond: (c1 < 1000)
2432 -> Bitmap Index Scan on t1_i1
2433 Index Cond: (c1 < 1000)
2437 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2446 ----------------------------------
2447 Bitmap Heap Scan on t1
2448 Recheck Cond: (c1 < 1000)
2449 -> Bitmap Index Scan on t1_i1
2450 Index Cond: (c1 < 1000)
2454 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2463 ----------------------------------
2464 Bitmap Heap Scan on t1
2465 Recheck Cond: (c1 < 1000)
2466 -> Bitmap Index Scan on t1_i1
2467 Index Cond: (c1 < 1000)
2471 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2480 ----------------------------------
2481 Bitmap Heap Scan on t1
2482 Recheck Cond: (c1 < $1)
2483 -> Bitmap Index Scan on t1_i1
2484 Index Cond: (c1 < $1)
2487 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
2489 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2498 ----------------------------------
2499 Bitmap Heap Scan on t1
2500 Recheck Cond: (c1 < $1)
2501 -> Bitmap Index Scan on t1_i1
2502 Index Cond: (c1 < $1)
2509 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2510 EXPLAIN (COSTS false) EXECUTE p1;
2519 --------------------
2524 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
2525 EXPLAIN (COSTS false) EXECUTE p1;
2534 --------------------
2541 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
2542 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2551 ----------------------------------
2552 Bitmap Heap Scan on t1
2553 Recheck Cond: (c1 < 1000)
2554 -> Bitmap Index Scan on t1_i1
2555 Index Cond: (c1 < 1000)
2558 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2567 ----------------------------------
2568 Bitmap Heap Scan on t1
2569 Recheck Cond: (c1 < 1000)
2570 -> Bitmap Index Scan on t1_i1
2571 Index Cond: (c1 < 1000)
2574 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2583 ----------------------------------
2584 Bitmap Heap Scan on t1
2585 Recheck Cond: (c1 < 1000)
2586 -> Bitmap Index Scan on t1_i1
2587 Index Cond: (c1 < 1000)
2590 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2599 ----------------------------------
2600 Bitmap Heap Scan on t1
2601 Recheck Cond: (c1 < 1000)
2602 -> Bitmap Index Scan on t1_i1
2603 Index Cond: (c1 < 1000)
2606 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2615 ----------------------------------
2616 Bitmap Heap Scan on t1
2617 Recheck Cond: (c1 < 1000)
2618 -> Bitmap Index Scan on t1_i1
2619 Index Cond: (c1 < 1000)
2622 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2631 ----------------------------------
2632 Bitmap Heap Scan on t1
2633 Recheck Cond: (c1 < $1)
2634 -> Bitmap Index Scan on t1_i1
2635 Index Cond: (c1 < $1)
2638 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
2639 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2648 ----------------------------------
2649 Bitmap Heap Scan on t1
2650 Recheck Cond: (c1 < $1)
2651 -> Bitmap Index Scan on t1_i1
2652 Index Cond: (c1 < $1)
2658 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2660 EXPLAIN (COSTS false) EXECUTE p1;
2662 ------------------------------
2663 Index Scan using t1_i1 on t1
2664 Index Cond: (c1 = 1)
2667 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
2669 EXPLAIN (COSTS false) EXECUTE p1;
2671 ------------------------------
2672 Index Scan using t1_i1 on t1
2673 Index Cond: (c1 = 1)
2677 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
2679 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2681 -----------------------
2686 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2688 -----------------------
2693 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2695 -----------------------
2700 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2702 -----------------------
2707 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2709 -----------------------
2714 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2716 ---------------------
2721 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
2723 EXPLAIN (COSTS false) EXECUTE p1 (1000);
2725 ---------------------
2734 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2736 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
2745 --------------------
2750 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
2752 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
2761 --------------------
2768 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
2770 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2779 ----------------------------------
2780 Bitmap Heap Scan on t1
2781 Recheck Cond: (c1 < 1000)
2782 -> Bitmap Index Scan on t1_i1
2783 Index Cond: (c1 < 1000)
2787 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2796 ----------------------------------
2797 Bitmap Heap Scan on t1
2798 Recheck Cond: (c1 < 1000)
2799 -> Bitmap Index Scan on t1_i1
2800 Index Cond: (c1 < 1000)
2804 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2813 ----------------------------------
2814 Bitmap Heap Scan on t1
2815 Recheck Cond: (c1 < 1000)
2816 -> Bitmap Index Scan on t1_i1
2817 Index Cond: (c1 < 1000)
2821 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2830 ----------------------------------
2831 Bitmap Heap Scan on t1
2832 Recheck Cond: (c1 < 1000)
2833 -> Bitmap Index Scan on t1_i1
2834 Index Cond: (c1 < 1000)
2838 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2847 ----------------------------------
2848 Bitmap Heap Scan on t1
2849 Recheck Cond: (c1 < 1000)
2850 -> Bitmap Index Scan on t1_i1
2851 Index Cond: (c1 < 1000)
2855 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2864 ----------------------------------
2865 Bitmap Heap Scan on t1
2866 Recheck Cond: (c1 < $1)
2867 -> Bitmap Index Scan on t1_i1
2868 Index Cond: (c1 < $1)
2871 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
2873 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2882 ----------------------------------
2883 Bitmap Heap Scan on t1
2884 Recheck Cond: (c1 < $1)
2885 -> Bitmap Index Scan on t1_i1
2886 Index Cond: (c1 < $1)
2893 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
2894 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
2903 --------------------
2908 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
2909 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
2918 --------------------
2925 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
2926 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2935 ----------------------------------
2936 Bitmap Heap Scan on t1
2937 Recheck Cond: (c1 < 1000)
2938 -> Bitmap Index Scan on t1_i1
2939 Index Cond: (c1 < 1000)
2942 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2951 ----------------------------------
2952 Bitmap Heap Scan on t1
2953 Recheck Cond: (c1 < 1000)
2954 -> Bitmap Index Scan on t1_i1
2955 Index Cond: (c1 < 1000)
2958 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2967 ----------------------------------
2968 Bitmap Heap Scan on t1
2969 Recheck Cond: (c1 < 1000)
2970 -> Bitmap Index Scan on t1_i1
2971 Index Cond: (c1 < 1000)
2974 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2983 ----------------------------------
2984 Bitmap Heap Scan on t1
2985 Recheck Cond: (c1 < 1000)
2986 -> Bitmap Index Scan on t1_i1
2987 Index Cond: (c1 < 1000)
2990 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
2999 ----------------------------------
3000 Bitmap Heap Scan on t1
3001 Recheck Cond: (c1 < 1000)
3002 -> Bitmap Index Scan on t1_i1
3003 Index Cond: (c1 < 1000)
3006 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
3015 ----------------------------------
3016 Bitmap Heap Scan on t1
3017 Recheck Cond: (c1 < $1)
3018 -> Bitmap Index Scan on t1_i1
3019 Index Cond: (c1 < $1)
3022 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
3023 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
3032 ----------------------------------
3033 Bitmap Heap Scan on t1
3034 Recheck Cond: (c1 < $1)
3035 -> Bitmap Index Scan on t1_i1
3036 Index Cond: (c1 < $1)
3042 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
3044 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
3046 ------------------------------
3047 Index Scan using t1_i1 on t1
3048 Index Cond: (c1 = 1)
3051 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
3053 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
3055 ------------------------------
3056 Index Scan using t1_i1 on t1
3057 Index Cond: (c1 = 1)
3061 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
3063 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
3065 -----------------------
3071 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
3073 -----------------------
3079 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
3081 -----------------------
3087 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
3089 -----------------------
3095 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
3097 -----------------------
3103 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
3105 ---------------------
3110 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
3112 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
3114 ---------------------
3121 ---- No. A-10-4 EXECUTE statement name error
3125 ERROR: prepared statement "p1" does not exist
3126 SHOW pg_hint_plan.debug_print;
3127 pg_hint_plan.debug_print
3128 --------------------------
3133 ---- No. A-11-5 EXECUTE statement name error
3136 SELECT pg_stat_statements_reset();
3137 pg_stat_statements_reset
3138 --------------------------
3142 SELECT * FROM s1.t1 WHERE t1.c1 = 1;
3148 /*+Set(enable_seqscan off)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
3151 Set(enable_seqscan off)
3161 /*+SeqScan(t1)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
3174 SELECT s.query, s.calls
3175 FROM public.pg_stat_statements s
3176 JOIN pg_catalog.pg_database d
3180 --------------------------------------+-------
3181 SELECT * FROM s1.t1 WHERE t1.c1 = $1 | 3
3182 SELECT pg_stat_statements_reset() | 1
3186 ---- No. A-12-1 reset of global variable of core at the error
3187 ---- No. A-12-2 reset of global variable of original at the error
3189 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3191 ------------------------------------
3193 Merge Cond: (t1.c1 = t2.c1)
3194 -> Index Scan using t1_i1 on t1
3200 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
3201 PREPARE p1 AS SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3202 EXPLAIN (COSTS false) EXECUTE p1;
3203 INFO: pg_hint_plan: hint syntax error at or near "NestLoop(t1 t1)"
3204 DETAIL: Relation name "t1" is duplicated.
3209 Set(enable_seqscan off)
3210 Set(geqo_threshold 100)
3217 ------------------------------------
3219 Merge Cond: (t1.c1 = t2.c1)
3223 -> Index Scan using t2_i1 on t2
3228 SELECT name, setting FROM settings;
3230 --------------------------------+-----------
3231 client_min_messages | log
3234 geqo_generations | 0
3237 geqo_selection_bias | 2
3239 constraint_exclusion | partition
3240 cursor_tuple_fraction | 0.1
3241 default_statistics_target | 100
3242 force_parallel_mode | off
3243 from_collapse_limit | 8
3245 join_collapse_limit | 8
3246 plan_cache_mode | auto
3247 cpu_index_tuple_cost | 0.005
3248 cpu_operator_cost | 0.0025
3249 cpu_tuple_cost | 0.01
3250 effective_cache_size | 16384
3251 jit_above_cost | 100000
3252 jit_inline_above_cost | 500000
3253 jit_optimize_above_cost | 500000
3254 min_parallel_index_scan_size | 64
3255 min_parallel_table_scan_size | 1024
3256 parallel_setup_cost | 1000
3257 parallel_tuple_cost | 0.1
3258 random_page_cost | 4
3260 enable_bitmapscan | on
3261 enable_gathermerge | on
3263 enable_hashjoin | on
3264 enable_incremental_sort | on
3265 enable_indexonlyscan | on
3266 enable_indexscan | on
3267 enable_material | on
3268 enable_mergejoin | on
3269 enable_nestloop | on
3270 enable_parallel_append | on
3271 enable_parallel_hash | on
3272 enable_partition_pruning | on
3273 enable_partitionwise_aggregate | off
3274 enable_partitionwise_join | off
3280 SET pg_hint_plan.parse_messages TO error;
3281 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
3282 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3283 ERROR: pg_hint_plan: hint syntax error at or near "NestLoop(t1 t1)"
3284 DETAIL: Relation name "t1" is duplicated.
3285 SELECT name, setting FROM settings;
3287 --------------------------------+-----------
3288 client_min_messages | log
3291 geqo_generations | 0
3294 geqo_selection_bias | 2
3296 constraint_exclusion | partition
3297 cursor_tuple_fraction | 0.1
3298 default_statistics_target | 100
3299 force_parallel_mode | off
3300 from_collapse_limit | 8
3302 join_collapse_limit | 8
3303 plan_cache_mode | auto
3304 cpu_index_tuple_cost | 0.005
3305 cpu_operator_cost | 0.0025
3306 cpu_tuple_cost | 0.01
3307 effective_cache_size | 16384
3308 jit_above_cost | 100000
3309 jit_inline_above_cost | 500000
3310 jit_optimize_above_cost | 500000
3311 min_parallel_index_scan_size | 64
3312 min_parallel_table_scan_size | 1024
3313 parallel_setup_cost | 1000
3314 parallel_tuple_cost | 0.1
3315 random_page_cost | 4
3317 enable_bitmapscan | on
3318 enable_gathermerge | on
3320 enable_hashjoin | on
3321 enable_incremental_sort | on
3322 enable_indexonlyscan | on
3323 enable_indexscan | on
3324 enable_material | on
3325 enable_mergejoin | on
3326 enable_nestloop | on
3327 enable_parallel_append | on
3328 enable_parallel_hash | on
3329 enable_partition_pruning | on
3330 enable_partitionwise_aggregate | off
3331 enable_partitionwise_join | off
3337 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
3338 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3343 Set(enable_seqscan off)
3344 Set(geqo_threshold 100)
3350 ------------------------------------
3352 Merge Cond: (t1.c1 = t2.c1)
3356 -> Index Scan using t2_i1 on t2
3361 SELECT name, setting FROM settings;
3363 --------------------------------+-----------
3364 client_min_messages | log
3367 geqo_generations | 0
3370 geqo_selection_bias | 2
3372 constraint_exclusion | partition
3373 cursor_tuple_fraction | 0.1
3374 default_statistics_target | 100
3375 force_parallel_mode | off
3376 from_collapse_limit | 8
3378 join_collapse_limit | 8
3379 plan_cache_mode | auto
3380 cpu_index_tuple_cost | 0.005
3381 cpu_operator_cost | 0.0025
3382 cpu_tuple_cost | 0.01
3383 effective_cache_size | 16384
3384 jit_above_cost | 100000
3385 jit_inline_above_cost | 500000
3386 jit_optimize_above_cost | 500000
3387 min_parallel_index_scan_size | 64
3388 min_parallel_table_scan_size | 1024
3389 parallel_setup_cost | 1000
3390 parallel_tuple_cost | 0.1
3391 random_page_cost | 4
3393 enable_bitmapscan | on
3394 enable_gathermerge | on
3396 enable_hashjoin | on
3397 enable_incremental_sort | on
3398 enable_indexonlyscan | on
3399 enable_indexscan | on
3400 enable_material | on
3401 enable_mergejoin | on
3402 enable_nestloop | on
3403 enable_parallel_append | on
3404 enable_parallel_hash | on
3405 enable_partition_pruning | on
3406 enable_partitionwise_aggregate | off
3407 enable_partitionwise_join | off
3413 SET pg_hint_plan.parse_messages TO error;
3414 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
3415 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3416 ERROR: pg_hint_plan: hint syntax error at or near "NestLoop(t1 t1)"
3417 DETAIL: Relation name "t1" is duplicated.
3418 SELECT name, setting FROM settings;
3420 --------------------------------+-----------
3421 client_min_messages | log
3424 geqo_generations | 0
3427 geqo_selection_bias | 2
3429 constraint_exclusion | partition
3430 cursor_tuple_fraction | 0.1
3431 default_statistics_target | 100
3432 force_parallel_mode | off
3433 from_collapse_limit | 8
3435 join_collapse_limit | 8
3436 plan_cache_mode | auto
3437 cpu_index_tuple_cost | 0.005
3438 cpu_operator_cost | 0.0025
3439 cpu_tuple_cost | 0.01
3440 effective_cache_size | 16384
3441 jit_above_cost | 100000
3442 jit_inline_above_cost | 500000
3443 jit_optimize_above_cost | 500000
3444 min_parallel_index_scan_size | 64
3445 min_parallel_table_scan_size | 1024
3446 parallel_setup_cost | 1000
3447 parallel_tuple_cost | 0.1
3448 random_page_cost | 4
3450 enable_bitmapscan | on
3451 enable_gathermerge | on
3453 enable_hashjoin | on
3454 enable_incremental_sort | on
3455 enable_indexonlyscan | on
3456 enable_indexscan | on
3457 enable_material | on
3458 enable_mergejoin | on
3459 enable_nestloop | on
3460 enable_parallel_append | on
3461 enable_parallel_hash | on
3462 enable_partition_pruning | on
3463 enable_partitionwise_aggregate | off
3464 enable_partitionwise_join | off
3470 EXPLAIN (COSTS false) EXECUTE p1;
3472 ------------------------------------
3474 Merge Cond: (t1.c1 = t2.c1)
3478 -> Index Scan using t2_i1 on t2
3483 SELECT name, setting FROM settings;
3485 --------------------------------+-----------
3486 client_min_messages | log
3489 geqo_generations | 0
3492 geqo_selection_bias | 2
3494 constraint_exclusion | partition
3495 cursor_tuple_fraction | 0.1
3496 default_statistics_target | 100
3497 force_parallel_mode | off
3498 from_collapse_limit | 8
3500 join_collapse_limit | 8
3501 plan_cache_mode | auto
3502 cpu_index_tuple_cost | 0.005
3503 cpu_operator_cost | 0.0025
3504 cpu_tuple_cost | 0.01
3505 effective_cache_size | 16384
3506 jit_above_cost | 100000
3507 jit_inline_above_cost | 500000
3508 jit_optimize_above_cost | 500000
3509 min_parallel_index_scan_size | 64
3510 min_parallel_table_scan_size | 1024
3511 parallel_setup_cost | 1000
3512 parallel_tuple_cost | 0.1
3513 random_page_cost | 4
3515 enable_bitmapscan | on
3516 enable_gathermerge | on
3518 enable_hashjoin | on
3519 enable_incremental_sort | on
3520 enable_indexonlyscan | on
3521 enable_indexscan | on
3522 enable_material | on
3523 enable_mergejoin | on
3524 enable_nestloop | on
3525 enable_parallel_append | on
3526 enable_parallel_hash | on
3527 enable_partition_pruning | on
3528 enable_partitionwise_aggregate | off
3529 enable_partitionwise_join | off
3535 SET pg_hint_plan.parse_messages TO error;
3536 EXPLAIN (COSTS false) EXECUTE p2;
3537 ERROR: prepared statement "p2" does not exist
3538 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
3539 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3544 Set(enable_seqscan off)
3545 Set(geqo_threshold 100)
3551 ------------------------------------
3553 Merge Cond: (t1.c1 = t2.c1)
3557 -> Index Scan using t2_i1 on t2
3560 EXPLAIN (COSTS false) EXECUTE p1;
3562 ------------------------------------
3564 Merge Cond: (t1.c1 = t2.c1)
3568 -> Index Scan using t2_i1 on t2
3571 SELECT name, setting FROM settings;
3573 --------------------------------+-----------
3574 client_min_messages | log
3577 geqo_generations | 0
3580 geqo_selection_bias | 2
3582 constraint_exclusion | partition
3583 cursor_tuple_fraction | 0.1
3584 default_statistics_target | 100
3585 force_parallel_mode | off
3586 from_collapse_limit | 8
3588 join_collapse_limit | 8
3589 plan_cache_mode | auto
3590 cpu_index_tuple_cost | 0.005
3591 cpu_operator_cost | 0.0025
3592 cpu_tuple_cost | 0.01
3593 effective_cache_size | 16384
3594 jit_above_cost | 100000
3595 jit_inline_above_cost | 500000
3596 jit_optimize_above_cost | 500000
3597 min_parallel_index_scan_size | 64
3598 min_parallel_table_scan_size | 1024
3599 parallel_setup_cost | 1000
3600 parallel_tuple_cost | 0.1
3601 random_page_cost | 4
3603 enable_bitmapscan | on
3604 enable_gathermerge | on
3606 enable_hashjoin | on
3607 enable_incremental_sort | on
3608 enable_indexonlyscan | on
3609 enable_indexscan | on
3610 enable_material | on
3611 enable_mergejoin | on
3612 enable_nestloop | on
3613 enable_parallel_append | on
3614 enable_parallel_hash | on
3615 enable_partition_pruning | on
3616 enable_partitionwise_aggregate | off
3617 enable_partitionwise_join | off
3625 SELECT name, setting FROM settings;
3627 --------------------------------+-----------
3628 client_min_messages | log
3631 geqo_generations | 0
3634 geqo_selection_bias | 2
3636 constraint_exclusion | partition
3637 cursor_tuple_fraction | 0.1
3638 default_statistics_target | 100
3639 force_parallel_mode | off
3640 from_collapse_limit | 8
3642 join_collapse_limit | 8
3643 plan_cache_mode | auto
3644 cpu_index_tuple_cost | 0.005
3645 cpu_operator_cost | 0.0025
3646 cpu_tuple_cost | 0.01
3647 effective_cache_size | 16384
3648 jit_above_cost | 100000
3649 jit_inline_above_cost | 500000
3650 jit_optimize_above_cost | 500000
3651 min_parallel_index_scan_size | 64
3652 min_parallel_table_scan_size | 1024
3653 parallel_setup_cost | 1000
3654 parallel_tuple_cost | 0.1
3655 random_page_cost | 4
3657 enable_bitmapscan | on
3658 enable_gathermerge | on
3660 enable_hashjoin | on
3661 enable_incremental_sort | on
3662 enable_indexonlyscan | on
3663 enable_indexscan | on
3664 enable_material | on
3665 enable_mergejoin | on
3666 enable_nestloop | on
3667 enable_parallel_append | on
3668 enable_parallel_hash | on
3669 enable_partition_pruning | on
3670 enable_partitionwise_aggregate | off
3671 enable_partitionwise_join | off
3677 SET pg_hint_plan.parse_messages TO error;
3678 EXPLAIN (COSTS false) EXECUTE p2;
3679 ERROR: prepared statement "p2" does not exist
3680 EXPLAIN (COSTS false) EXECUTE p1;
3682 ------------------------------------
3684 Merge Cond: (t1.c1 = t2.c1)
3688 -> Index Scan using t2_i1 on t2
3691 SELECT name, setting FROM settings;
3693 --------------------------------+-----------
3694 client_min_messages | log
3697 geqo_generations | 0
3700 geqo_selection_bias | 2
3702 constraint_exclusion | partition
3703 cursor_tuple_fraction | 0.1
3704 default_statistics_target | 100
3705 force_parallel_mode | off
3706 from_collapse_limit | 8
3708 join_collapse_limit | 8
3709 plan_cache_mode | auto
3710 cpu_index_tuple_cost | 0.005
3711 cpu_operator_cost | 0.0025
3712 cpu_tuple_cost | 0.01
3713 effective_cache_size | 16384
3714 jit_above_cost | 100000
3715 jit_inline_above_cost | 500000
3716 jit_optimize_above_cost | 500000
3717 min_parallel_index_scan_size | 64
3718 min_parallel_table_scan_size | 1024
3719 parallel_setup_cost | 1000
3720 parallel_tuple_cost | 0.1
3721 random_page_cost | 4
3723 enable_bitmapscan | on
3724 enable_gathermerge | on
3726 enable_hashjoin | on
3727 enable_incremental_sort | on
3728 enable_indexonlyscan | on
3729 enable_indexscan | on
3730 enable_material | on
3731 enable_mergejoin | on
3732 enable_nestloop | on
3733 enable_parallel_append | on
3734 enable_parallel_hash | on
3735 enable_partition_pruning | on
3736 enable_partitionwise_aggregate | off
3737 enable_partitionwise_join | off
3744 SET pg_hint_plan.parse_messages TO LOG;
3746 ---- No. A-12-3 effective range of the hint
3748 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3750 ------------------------------------
3752 Merge Cond: (t1.c1 = t2.c1)
3753 -> Index Scan using t1_i1 on t1
3760 SET enable_indexscan TO off;
3761 SET enable_mergejoin TO off;
3762 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3764 ------------------------------
3766 Hash Cond: (t1.c1 = t2.c1)
3772 SELECT name, setting FROM settings;
3774 --------------------------------+-----------
3775 client_min_messages | log
3778 geqo_generations | 0
3781 geqo_selection_bias | 2
3783 constraint_exclusion | partition
3784 cursor_tuple_fraction | 0.1
3785 default_statistics_target | 100
3786 force_parallel_mode | off
3787 from_collapse_limit | 8
3789 join_collapse_limit | 8
3790 plan_cache_mode | auto
3791 cpu_index_tuple_cost | 0.005
3792 cpu_operator_cost | 0.0025
3793 cpu_tuple_cost | 0.01
3794 effective_cache_size | 16384
3795 jit_above_cost | 100000
3796 jit_inline_above_cost | 500000
3797 jit_optimize_above_cost | 500000
3798 min_parallel_index_scan_size | 64
3799 min_parallel_table_scan_size | 1024
3800 parallel_setup_cost | 1000
3801 parallel_tuple_cost | 0.1
3802 random_page_cost | 4
3804 enable_bitmapscan | on
3805 enable_gathermerge | on
3807 enable_hashjoin | on
3808 enable_incremental_sort | on
3809 enable_indexonlyscan | on
3810 enable_indexscan | off
3811 enable_material | on
3812 enable_mergejoin | off
3813 enable_nestloop | on
3814 enable_parallel_append | on
3815 enable_parallel_hash | on
3816 enable_partition_pruning | on
3817 enable_partitionwise_aggregate | off
3818 enable_partitionwise_join | off
3824 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
3825 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3831 Set(enable_indexscan on)
3832 Set(geqo_threshold 100)
3838 ------------------------------------
3840 Merge Cond: (t1.c1 = t2.c1)
3841 -> Index Scan using t1_i1 on t1
3842 -> Index Scan using t2_i1 on t2
3845 SELECT name, setting FROM settings;
3847 --------------------------------+-----------
3848 client_min_messages | log
3851 geqo_generations | 0
3854 geqo_selection_bias | 2
3856 constraint_exclusion | partition
3857 cursor_tuple_fraction | 0.1
3858 default_statistics_target | 100
3859 force_parallel_mode | off
3860 from_collapse_limit | 8
3862 join_collapse_limit | 8
3863 plan_cache_mode | auto
3864 cpu_index_tuple_cost | 0.005
3865 cpu_operator_cost | 0.0025
3866 cpu_tuple_cost | 0.01
3867 effective_cache_size | 16384
3868 jit_above_cost | 100000
3869 jit_inline_above_cost | 500000
3870 jit_optimize_above_cost | 500000
3871 min_parallel_index_scan_size | 64
3872 min_parallel_table_scan_size | 1024
3873 parallel_setup_cost | 1000
3874 parallel_tuple_cost | 0.1
3875 random_page_cost | 4
3877 enable_bitmapscan | on
3878 enable_gathermerge | on
3880 enable_hashjoin | on
3881 enable_incremental_sort | on
3882 enable_indexonlyscan | on
3883 enable_indexscan | off
3884 enable_material | on
3885 enable_mergejoin | off
3886 enable_nestloop | on
3887 enable_parallel_append | on
3888 enable_parallel_hash | on
3889 enable_partition_pruning | on
3890 enable_partitionwise_aggregate | off
3891 enable_partitionwise_join | off
3897 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3899 ------------------------------
3901 Hash Cond: (t1.c1 = t2.c1)
3908 SET enable_indexscan TO off;
3909 SET enable_mergejoin TO off;
3910 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3912 ------------------------------
3914 Hash Cond: (t1.c1 = t2.c1)
3920 SELECT name, setting FROM settings;
3922 --------------------------------+-----------
3923 client_min_messages | log
3926 geqo_generations | 0
3929 geqo_selection_bias | 2
3931 constraint_exclusion | partition
3932 cursor_tuple_fraction | 0.1
3933 default_statistics_target | 100
3934 force_parallel_mode | off
3935 from_collapse_limit | 8
3937 join_collapse_limit | 8
3938 plan_cache_mode | auto
3939 cpu_index_tuple_cost | 0.005
3940 cpu_operator_cost | 0.0025
3941 cpu_tuple_cost | 0.01
3942 effective_cache_size | 16384
3943 jit_above_cost | 100000
3944 jit_inline_above_cost | 500000
3945 jit_optimize_above_cost | 500000
3946 min_parallel_index_scan_size | 64
3947 min_parallel_table_scan_size | 1024
3948 parallel_setup_cost | 1000
3949 parallel_tuple_cost | 0.1
3950 random_page_cost | 4
3952 enable_bitmapscan | on
3953 enable_gathermerge | on
3955 enable_hashjoin | on
3956 enable_incremental_sort | on
3957 enable_indexonlyscan | on
3958 enable_indexscan | off
3959 enable_material | on
3960 enable_mergejoin | off
3961 enable_nestloop | on
3962 enable_parallel_append | on
3963 enable_parallel_hash | on
3964 enable_partition_pruning | on
3965 enable_partitionwise_aggregate | off
3966 enable_partitionwise_join | off
3973 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
3974 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3980 Set(enable_indexscan on)
3981 Set(geqo_threshold 100)
3987 ------------------------------------
3989 Merge Cond: (t1.c1 = t2.c1)
3990 -> Index Scan using t1_i1 on t1
3991 -> Index Scan using t2_i1 on t2
3996 SELECT name, setting FROM settings;
3998 --------------------------------+-----------
3999 client_min_messages | log
4002 geqo_generations | 0
4005 geqo_selection_bias | 2
4007 constraint_exclusion | partition
4008 cursor_tuple_fraction | 0.1
4009 default_statistics_target | 100
4010 force_parallel_mode | off
4011 from_collapse_limit | 8
4013 join_collapse_limit | 8
4014 plan_cache_mode | auto
4015 cpu_index_tuple_cost | 0.005
4016 cpu_operator_cost | 0.0025
4017 cpu_tuple_cost | 0.01
4018 effective_cache_size | 16384
4019 jit_above_cost | 100000
4020 jit_inline_above_cost | 500000
4021 jit_optimize_above_cost | 500000
4022 min_parallel_index_scan_size | 64
4023 min_parallel_table_scan_size | 1024
4024 parallel_setup_cost | 1000
4025 parallel_tuple_cost | 0.1
4026 random_page_cost | 4
4028 enable_bitmapscan | on
4029 enable_gathermerge | on
4031 enable_hashjoin | on
4032 enable_incremental_sort | on
4033 enable_indexonlyscan | on
4034 enable_indexscan | off
4035 enable_material | on
4036 enable_mergejoin | off
4037 enable_nestloop | on
4038 enable_parallel_append | on
4039 enable_parallel_hash | on
4040 enable_partition_pruning | on
4041 enable_partitionwise_aggregate | off
4042 enable_partitionwise_join | off
4048 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
4050 ------------------------------
4052 Hash Cond: (t1.c1 = t2.c1)
4060 SET enable_indexscan TO off;
4061 SET enable_mergejoin TO off;
4062 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
4064 ------------------------------
4066 Hash Cond: (t1.c1 = t2.c1)
4072 SELECT name, setting FROM settings;
4074 --------------------------------+-----------
4075 client_min_messages | log
4078 geqo_generations | 0
4081 geqo_selection_bias | 2
4083 constraint_exclusion | partition
4084 cursor_tuple_fraction | 0.1
4085 default_statistics_target | 100
4086 force_parallel_mode | off
4087 from_collapse_limit | 8
4089 join_collapse_limit | 8
4090 plan_cache_mode | auto
4091 cpu_index_tuple_cost | 0.005
4092 cpu_operator_cost | 0.0025
4093 cpu_tuple_cost | 0.01
4094 effective_cache_size | 16384
4095 jit_above_cost | 100000
4096 jit_inline_above_cost | 500000
4097 jit_optimize_above_cost | 500000
4098 min_parallel_index_scan_size | 64
4099 min_parallel_table_scan_size | 1024
4100 parallel_setup_cost | 1000
4101 parallel_tuple_cost | 0.1
4102 random_page_cost | 4
4104 enable_bitmapscan | on
4105 enable_gathermerge | on
4107 enable_hashjoin | on
4108 enable_incremental_sort | on
4109 enable_indexonlyscan | on
4110 enable_indexscan | off
4111 enable_material | on
4112 enable_mergejoin | off
4113 enable_nestloop | on
4114 enable_parallel_append | on
4115 enable_parallel_hash | on
4116 enable_partition_pruning | on
4117 enable_partitionwise_aggregate | off
4118 enable_partitionwise_join | off
4124 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
4125 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
4131 Set(enable_indexscan on)
4132 Set(geqo_threshold 100)
4138 ------------------------------------
4140 Merge Cond: (t1.c1 = t2.c1)
4141 -> Index Scan using t1_i1 on t1
4142 -> Index Scan using t2_i1 on t2
4146 SET enable_indexscan TO off;
4147 SET enable_mergejoin TO off;
4148 LOAD 'pg_hint_plan';
4149 SELECT name, setting FROM settings;
4151 --------------------------------+-----------
4152 client_min_messages | notice
4155 geqo_generations | 0
4158 geqo_selection_bias | 2
4160 constraint_exclusion | partition
4161 cursor_tuple_fraction | 0.1
4162 default_statistics_target | 100
4163 force_parallel_mode | off
4164 from_collapse_limit | 8
4166 join_collapse_limit | 8
4167 plan_cache_mode | auto
4168 cpu_index_tuple_cost | 0.005
4169 cpu_operator_cost | 0.0025
4170 cpu_tuple_cost | 0.01
4171 effective_cache_size | 16384
4172 jit_above_cost | 100000
4173 jit_inline_above_cost | 500000
4174 jit_optimize_above_cost | 500000
4175 min_parallel_index_scan_size | 64
4176 min_parallel_table_scan_size | 1024
4177 parallel_setup_cost | 1000
4178 parallel_tuple_cost | 0.1
4179 random_page_cost | 4
4181 enable_bitmapscan | on
4182 enable_gathermerge | on
4184 enable_hashjoin | on
4185 enable_incremental_sort | on
4186 enable_indexonlyscan | on
4187 enable_indexscan | off
4188 enable_material | on
4189 enable_mergejoin | off
4190 enable_nestloop | on
4191 enable_parallel_append | on
4192 enable_parallel_hash | on
4193 enable_partition_pruning | on
4194 enable_partitionwise_aggregate | off
4195 enable_partitionwise_join | off
4201 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
4203 ------------------------------
4205 Hash Cond: (t1.c1 = t2.c1)
4211 SET pg_hint_plan.enable_hint TO on;
4212 SET pg_hint_plan.debug_print TO on;
4213 SET client_min_messages TO LOG;
4214 SET search_path TO public;
4215 RESET enable_indexscan;
4216 RESET enable_mergejoin;
4218 ---- No. A-13 call planner recursively
4220 CREATE OR REPLACE FUNCTION nested_planner(cnt int) RETURNS int AS $$
4224 RAISE NOTICE 'nested_planner(%)', cnt;
4231 SELECT /*+ IndexScan(t_1) */ nested_planner(cnt - 1) INTO new_cnt
4233 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4234 ORDER BY t_1.c1 LIMIT 1;
4238 $$ LANGUAGE plpgsql IMMUTABLE;
4240 ---- No. A-13-2 use hint of main query
4243 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
4244 NOTICE: nested_planner(1)
4246 ---------------------------------------
4247 Index Only Scan using t1_i1 on t1 t_1
4251 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
4252 NOTICE: nested_planner(1)
4261 --------------------------
4264 -> Seq Scan on t1 t_1
4268 ---- No. A-13-3 output number of times of debugging log
4271 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
4272 NOTICE: nested_planner(1)
4274 ---------------------------------------
4275 Index Only Scan using t1_i1 on t1 t_1
4279 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
4280 NOTICE: nested_planner(1)
4289 ---------------------------------------
4290 Index Only Scan using t1_i1 on t1 t_1
4294 EXPLAIN (COSTS false) SELECT nested_planner(2) FROM s1.t1 t_1 ORDER BY t_1.c1;
4295 NOTICE: nested_planner(2)
4296 NOTICE: nested_planner(1)
4305 ---------------------------------------
4306 Index Only Scan using t1_i1 on t1 t_1
4310 EXPLAIN (COSTS false) SELECT nested_planner(2) FROM s1.t1 t_1 ORDER BY t_1.c1;
4311 NOTICE: nested_planner(2)
4312 NOTICE: nested_planner(1)
4328 ---------------------------------------
4329 Index Only Scan using t1_i1 on t1 t_1
4334 -- Redefine not to use cached plan
4336 CREATE OR REPLACE FUNCTION nested_planner(cnt int) RETURNS int AS $$
4340 RAISE NOTICE 'nested_planner(%)', cnt;
4347 SELECT /*+ IndexScan(t_1) */ nested_planner(cnt - 1) INTO new_cnt
4349 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4350 ORDER BY t_1.c1 LIMIT 1;
4354 $$ LANGUAGE plpgsql IMMUTABLE;
4355 -- The function called at the bottom desn't use a hint, the immediate
4356 -- caller level should restore its own hint. So, the first LOG from
4357 -- pg_hint_plan should use the IndexScan(t_1) hint
4358 EXPLAIN (COSTS false) SELECT nested_planner(5) FROM s1.t1 t_1 ORDER BY t_1.c1;
4359 NOTICE: nested_planner(5)
4360 NOTICE: nested_planner(4)
4361 NOTICE: nested_planner(3)
4362 NOTICE: nested_planner(2)
4363 NOTICE: nested_planner(1)
4393 ---------------------------------------
4394 Index Only Scan using t1_i1 on t1 t_1
4397 -- The top level uses SeqScan(t_1), but the function should use only
4398 -- the hint in the function.
4399 /*+SeqScan(t_1) SeqScan(t_2)*/
4400 EXPLAIN (COSTS false) SELECT nested_planner(5) FROM s1.t1 t_1 ORDER BY t_1.c1;
4401 NOTICE: nested_planner(5)
4402 NOTICE: nested_planner(4)
4403 NOTICE: nested_planner(3)
4404 NOTICE: nested_planner(2)
4405 NOTICE: nested_planner(1)
4443 --------------------------
4446 -> Seq Scan on t1 t_1
4450 ---- No. A-13-4 output of debugging log on hint status
4452 CREATE OR REPLACE FUNCTION recall_planner() RETURNS int AS $$
4453 SELECT /*+ IndexScan(t_1) */t_1.c1
4455 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4456 ORDER BY t_1.c1 LIMIT 1;
4457 $$ LANGUAGE SQL IMMUTABLE;
4459 -- recall_planner() is reduced to constant while planning using the
4460 -- hint defined in the function. Then the outer query is planned based
4461 -- on the following hint. pg_hint_plan shows the log for the function
4462 -- but the resulting explain output doesn't contain the corresponding
4464 /*+HashJoin(t_1 t_2)*/
4465 EXPLAIN (COSTS false)
4466 SELECT recall_planner() FROM s1.t1 t_1
4467 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4484 --------------------------------------
4488 Hash Cond: (t_1.c1 = t_2.c1)
4489 -> Seq Scan on t1 t_1
4491 -> Seq Scan on t2 t_2
4495 --See description for No.13-4-1
4496 /*+HashJoin(st_1 st_2)*/
4497 EXPLAIN (COSTS false)
4498 SELECT recall_planner() FROM s1.t1 st_1
4499 JOIN s1.t2 st_2 ON (st_1.c1 = st_2.c1)
4516 ----------------------------------------
4520 Hash Cond: (st_1.c1 = st_2.c1)
4521 -> Seq Scan on t1 st_1
4523 -> Seq Scan on t2 st_2
4527 --See description for No.13-4-1
4528 /*+HashJoin(t_1 t_2)*/
4529 EXPLAIN (COSTS false)
4530 SELECT recall_planner() FROM s1.t1 st_1
4531 JOIN s1.t2 st_2 ON (st_1.c1 = st_2.c1)
4548 ----------------------------------------------
4550 Merge Cond: (st_1.c1 = st_2.c1)
4551 -> Index Only Scan using t1_i1 on t1 st_1
4554 -> Seq Scan on t2 st_2
4558 --See description for No.13-4-1
4559 /*+HashJoin(st_1 st_2)*/
4560 EXPLAIN (COSTS false)
4561 SELECT recall_planner() FROM s1.t1 t_1
4562 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4579 ---------------------------------------------
4581 Merge Cond: (t_1.c1 = t_2.c1)
4582 -> Index Only Scan using t1_i1 on t1 t_1
4585 -> Seq Scan on t2 t_2
4589 -- See description for No.13-4-1. No joins in ths plan, so
4590 -- pg_hint_plan doesn't complain on the wrongly written error hint.
4591 /*+HashJoin(t_1 t_1)*/
4592 EXPLAIN (COSTS false)
4593 SELECT recall_planner() FROM s1.t1 t_1
4610 ---------------------------------------
4611 Index Only Scan using t1_i1 on t1 t_1
4615 CREATE OR REPLACE FUNCTION recall_planner_one_t() RETURNS int AS $$
4616 SELECT /*+ IndexScan(t_1) */t_1.c1
4618 ORDER BY t_1.c1 LIMIT 1;
4619 $$ LANGUAGE SQL IMMUTABLE;
4620 EXPLAIN (COSTS false)
4621 SELECT recall_planner_one_t() FROM s1.t1 t_1
4622 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4632 ---------------------------------------------
4634 Merge Cond: (t_1.c1 = t_2.c1)
4635 -> Index Only Scan using t1_i1 on t1 t_1
4638 -> Seq Scan on t2 t_2
4641 /*+HashJoin(t_1 t_1)*/
4642 EXPLAIN (COSTS false)
4643 SELECT recall_planner_one_t() FROM s1.t1 t_1
4644 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4653 INFO: pg_hint_plan: hint syntax error at or near "HashJoin(t_1 t_1)"
4654 DETAIL: Relation name "t_1" is duplicated.
4663 ---------------------------------------------
4665 Merge Cond: (t_1.c1 = t_2.c1)
4666 -> Index Only Scan using t1_i1 on t1 t_1
4669 -> Seq Scan on t2 t_2
4672 DROP FUNCTION recall_planner_one_t(int);
4673 ERROR: function recall_planner_one_t(integer) does not exist
4675 -- See description for No.13-4-1. Complains on the wrongly written hint.
4676 /*+HashJoin(t_1 t_1)*/
4677 EXPLAIN (COSTS false)
4678 SELECT recall_planner() FROM s1.t1 t_1
4679 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4688 INFO: pg_hint_plan: hint syntax error at or near "HashJoin(t_1 t_1)"
4689 DETAIL: Relation name "t_1" is duplicated.
4698 ---------------------------------------------
4700 Merge Cond: (t_1.c1 = t_2.c1)
4701 -> Index Only Scan using t1_i1 on t1 t_1
4704 -> Seq Scan on t2 t_2
4708 /*+MergeJoin(t_1 t_2)HashJoin(t_1 t_2)*/
4709 EXPLAIN (COSTS false)
4710 SELECT recall_planner() FROM s1.t1 t_1
4711 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4713 INFO: pg_hint_plan: hint syntax error at or near "MergeJoin(t_1 t_2)HashJoin(t_1 t_2)"
4714 DETAIL: Conflict join method hint.
4731 --------------------------------------
4735 Hash Cond: (t_1.c1 = t_2.c1)
4736 -> Seq Scan on t1 t_1
4738 -> Seq Scan on t2 t_2
4741 --No.14-1-1 plancache invalidation
4742 CREATE TABLE s1.tpc AS SELECT a FROM generate_series(0, 999) a;
4743 CREATE INDEX ON s1.tpc(a);
4744 PREPARE p1 AS SELECT * FROM s1.tpc WHERE a < 999;
4745 /*+ IndexScan(tpc) */PREPARE p2 AS SELECT * FROM s1.tpc WHERE a < 999;
4746 /*+ SeqScan(tpc) */PREPARE p3(int) AS SELECT * FROM s1.tpc WHERE a = $1;
4749 ------------------------------------------------------
4750 Seq Scan on tpc (cost=0.00..17.50 rows=333 width=4)
4763 ------------------------------------------------------------------------
4764 Index Scan using tpc_a_idx on tpc (cost=0.28..34.10 rows=333 width=4)
4765 Index Cond: (a < 999)
4768 EXPLAIN EXECUTE p3(500);
4777 ----------------------------------------------------
4778 Seq Scan on tpc (cost=0.00..17.50 rows=5 width=4)
4782 -- The DROP invalidates the plan caches
4784 CREATE TABLE s1.tpc AS SELECT a FROM generate_series(0, 999) a;
4785 CREATE INDEX ON s1.tpc(a);
4788 ------------------------------------------------------
4789 Seq Scan on tpc (cost=0.00..17.50 rows=333 width=4)
4802 ------------------------------------------------------------------------
4803 Index Scan using tpc_a_idx on tpc (cost=0.28..34.10 rows=333 width=4)
4804 Index Cond: (a < 999)
4807 EXPLAIN EXECUTE p3(500);
4816 ----------------------------------------------------
4817 Seq Scan on tpc (cost=0.00..17.50 rows=5 width=4)