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 from_collapse_limit | 8
3244 join_collapse_limit | 8
3245 plan_cache_mode | auto
3246 cpu_index_tuple_cost | 0.005
3247 cpu_operator_cost | 0.0025
3248 cpu_tuple_cost | 0.01
3249 effective_cache_size | 16384
3250 jit_above_cost | 100000
3251 jit_inline_above_cost | 500000
3252 jit_optimize_above_cost | 500000
3253 min_parallel_index_scan_size | 64
3254 min_parallel_table_scan_size | 1024
3255 parallel_setup_cost | 1000
3256 parallel_tuple_cost | 0.1
3257 random_page_cost | 4
3259 enable_async_append | on
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
3269 enable_mergejoin | on
3270 enable_nestloop | on
3271 enable_parallel_append | on
3272 enable_parallel_hash | on
3273 enable_partition_pruning | on
3274 enable_partitionwise_aggregate | off
3275 enable_partitionwise_join | off
3281 SET pg_hint_plan.parse_messages TO error;
3282 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
3283 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3284 ERROR: pg_hint_plan: hint syntax error at or near "NestLoop(t1 t1)"
3285 DETAIL: Relation name "t1" is duplicated.
3286 SELECT name, setting FROM settings;
3288 --------------------------------+-----------
3289 client_min_messages | log
3292 geqo_generations | 0
3295 geqo_selection_bias | 2
3297 constraint_exclusion | partition
3298 cursor_tuple_fraction | 0.1
3299 default_statistics_target | 100
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_async_append | on
3318 enable_bitmapscan | on
3319 enable_gathermerge | on
3321 enable_hashjoin | on
3322 enable_incremental_sort | on
3323 enable_indexonlyscan | on
3324 enable_indexscan | on
3325 enable_material | on
3327 enable_mergejoin | on
3328 enable_nestloop | on
3329 enable_parallel_append | on
3330 enable_parallel_hash | on
3331 enable_partition_pruning | on
3332 enable_partitionwise_aggregate | off
3333 enable_partitionwise_join | off
3339 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
3340 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3345 Set(enable_seqscan off)
3346 Set(geqo_threshold 100)
3352 ------------------------------------
3354 Merge Cond: (t1.c1 = t2.c1)
3358 -> Index Scan using t2_i1 on t2
3363 SELECT name, setting FROM settings;
3365 --------------------------------+-----------
3366 client_min_messages | log
3369 geqo_generations | 0
3372 geqo_selection_bias | 2
3374 constraint_exclusion | partition
3375 cursor_tuple_fraction | 0.1
3376 default_statistics_target | 100
3377 from_collapse_limit | 8
3379 join_collapse_limit | 8
3380 plan_cache_mode | auto
3381 cpu_index_tuple_cost | 0.005
3382 cpu_operator_cost | 0.0025
3383 cpu_tuple_cost | 0.01
3384 effective_cache_size | 16384
3385 jit_above_cost | 100000
3386 jit_inline_above_cost | 500000
3387 jit_optimize_above_cost | 500000
3388 min_parallel_index_scan_size | 64
3389 min_parallel_table_scan_size | 1024
3390 parallel_setup_cost | 1000
3391 parallel_tuple_cost | 0.1
3392 random_page_cost | 4
3394 enable_async_append | on
3395 enable_bitmapscan | on
3396 enable_gathermerge | on
3398 enable_hashjoin | on
3399 enable_incremental_sort | on
3400 enable_indexonlyscan | on
3401 enable_indexscan | on
3402 enable_material | on
3404 enable_mergejoin | on
3405 enable_nestloop | on
3406 enable_parallel_append | on
3407 enable_parallel_hash | on
3408 enable_partition_pruning | on
3409 enable_partitionwise_aggregate | off
3410 enable_partitionwise_join | off
3416 SET pg_hint_plan.parse_messages TO error;
3417 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
3418 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3419 ERROR: pg_hint_plan: hint syntax error at or near "NestLoop(t1 t1)"
3420 DETAIL: Relation name "t1" is duplicated.
3421 SELECT name, setting FROM settings;
3423 --------------------------------+-----------
3424 client_min_messages | log
3427 geqo_generations | 0
3430 geqo_selection_bias | 2
3432 constraint_exclusion | partition
3433 cursor_tuple_fraction | 0.1
3434 default_statistics_target | 100
3435 from_collapse_limit | 8
3437 join_collapse_limit | 8
3438 plan_cache_mode | auto
3439 cpu_index_tuple_cost | 0.005
3440 cpu_operator_cost | 0.0025
3441 cpu_tuple_cost | 0.01
3442 effective_cache_size | 16384
3443 jit_above_cost | 100000
3444 jit_inline_above_cost | 500000
3445 jit_optimize_above_cost | 500000
3446 min_parallel_index_scan_size | 64
3447 min_parallel_table_scan_size | 1024
3448 parallel_setup_cost | 1000
3449 parallel_tuple_cost | 0.1
3450 random_page_cost | 4
3452 enable_async_append | on
3453 enable_bitmapscan | on
3454 enable_gathermerge | on
3456 enable_hashjoin | on
3457 enable_incremental_sort | on
3458 enable_indexonlyscan | on
3459 enable_indexscan | on
3460 enable_material | on
3462 enable_mergejoin | on
3463 enable_nestloop | on
3464 enable_parallel_append | on
3465 enable_parallel_hash | on
3466 enable_partition_pruning | on
3467 enable_partitionwise_aggregate | off
3468 enable_partitionwise_join | off
3474 EXPLAIN (COSTS false) EXECUTE p1;
3476 ------------------------------------
3478 Merge Cond: (t1.c1 = t2.c1)
3482 -> Index Scan using t2_i1 on t2
3487 SELECT name, setting FROM settings;
3489 --------------------------------+-----------
3490 client_min_messages | log
3493 geqo_generations | 0
3496 geqo_selection_bias | 2
3498 constraint_exclusion | partition
3499 cursor_tuple_fraction | 0.1
3500 default_statistics_target | 100
3501 from_collapse_limit | 8
3503 join_collapse_limit | 8
3504 plan_cache_mode | auto
3505 cpu_index_tuple_cost | 0.005
3506 cpu_operator_cost | 0.0025
3507 cpu_tuple_cost | 0.01
3508 effective_cache_size | 16384
3509 jit_above_cost | 100000
3510 jit_inline_above_cost | 500000
3511 jit_optimize_above_cost | 500000
3512 min_parallel_index_scan_size | 64
3513 min_parallel_table_scan_size | 1024
3514 parallel_setup_cost | 1000
3515 parallel_tuple_cost | 0.1
3516 random_page_cost | 4
3518 enable_async_append | on
3519 enable_bitmapscan | on
3520 enable_gathermerge | on
3522 enable_hashjoin | on
3523 enable_incremental_sort | on
3524 enable_indexonlyscan | on
3525 enable_indexscan | on
3526 enable_material | on
3528 enable_mergejoin | on
3529 enable_nestloop | on
3530 enable_parallel_append | on
3531 enable_parallel_hash | on
3532 enable_partition_pruning | on
3533 enable_partitionwise_aggregate | off
3534 enable_partitionwise_join | off
3540 SET pg_hint_plan.parse_messages TO error;
3541 EXPLAIN (COSTS false) EXECUTE p2;
3542 ERROR: prepared statement "p2" does not exist
3543 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
3544 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3549 Set(enable_seqscan off)
3550 Set(geqo_threshold 100)
3556 ------------------------------------
3558 Merge Cond: (t1.c1 = t2.c1)
3562 -> Index Scan using t2_i1 on t2
3565 EXPLAIN (COSTS false) EXECUTE p1;
3567 ------------------------------------
3569 Merge Cond: (t1.c1 = t2.c1)
3573 -> Index Scan using t2_i1 on t2
3576 SELECT name, setting FROM settings;
3578 --------------------------------+-----------
3579 client_min_messages | log
3582 geqo_generations | 0
3585 geqo_selection_bias | 2
3587 constraint_exclusion | partition
3588 cursor_tuple_fraction | 0.1
3589 default_statistics_target | 100
3590 from_collapse_limit | 8
3592 join_collapse_limit | 8
3593 plan_cache_mode | auto
3594 cpu_index_tuple_cost | 0.005
3595 cpu_operator_cost | 0.0025
3596 cpu_tuple_cost | 0.01
3597 effective_cache_size | 16384
3598 jit_above_cost | 100000
3599 jit_inline_above_cost | 500000
3600 jit_optimize_above_cost | 500000
3601 min_parallel_index_scan_size | 64
3602 min_parallel_table_scan_size | 1024
3603 parallel_setup_cost | 1000
3604 parallel_tuple_cost | 0.1
3605 random_page_cost | 4
3607 enable_async_append | on
3608 enable_bitmapscan | on
3609 enable_gathermerge | on
3611 enable_hashjoin | on
3612 enable_incremental_sort | on
3613 enable_indexonlyscan | on
3614 enable_indexscan | on
3615 enable_material | on
3617 enable_mergejoin | on
3618 enable_nestloop | on
3619 enable_parallel_append | on
3620 enable_parallel_hash | on
3621 enable_partition_pruning | on
3622 enable_partitionwise_aggregate | off
3623 enable_partitionwise_join | off
3631 SELECT name, setting FROM settings;
3633 --------------------------------+-----------
3634 client_min_messages | log
3637 geqo_generations | 0
3640 geqo_selection_bias | 2
3642 constraint_exclusion | partition
3643 cursor_tuple_fraction | 0.1
3644 default_statistics_target | 100
3645 from_collapse_limit | 8
3647 join_collapse_limit | 8
3648 plan_cache_mode | auto
3649 cpu_index_tuple_cost | 0.005
3650 cpu_operator_cost | 0.0025
3651 cpu_tuple_cost | 0.01
3652 effective_cache_size | 16384
3653 jit_above_cost | 100000
3654 jit_inline_above_cost | 500000
3655 jit_optimize_above_cost | 500000
3656 min_parallel_index_scan_size | 64
3657 min_parallel_table_scan_size | 1024
3658 parallel_setup_cost | 1000
3659 parallel_tuple_cost | 0.1
3660 random_page_cost | 4
3662 enable_async_append | on
3663 enable_bitmapscan | on
3664 enable_gathermerge | on
3666 enable_hashjoin | on
3667 enable_incremental_sort | on
3668 enable_indexonlyscan | on
3669 enable_indexscan | on
3670 enable_material | on
3672 enable_mergejoin | on
3673 enable_nestloop | on
3674 enable_parallel_append | on
3675 enable_parallel_hash | on
3676 enable_partition_pruning | on
3677 enable_partitionwise_aggregate | off
3678 enable_partitionwise_join | off
3684 SET pg_hint_plan.parse_messages TO error;
3685 EXPLAIN (COSTS false) EXECUTE p2;
3686 ERROR: prepared statement "p2" does not exist
3687 EXPLAIN (COSTS false) EXECUTE p1;
3689 ------------------------------------
3691 Merge Cond: (t1.c1 = t2.c1)
3695 -> Index Scan using t2_i1 on t2
3698 SELECT name, setting FROM settings;
3700 --------------------------------+-----------
3701 client_min_messages | log
3704 geqo_generations | 0
3707 geqo_selection_bias | 2
3709 constraint_exclusion | partition
3710 cursor_tuple_fraction | 0.1
3711 default_statistics_target | 100
3712 from_collapse_limit | 8
3714 join_collapse_limit | 8
3715 plan_cache_mode | auto
3716 cpu_index_tuple_cost | 0.005
3717 cpu_operator_cost | 0.0025
3718 cpu_tuple_cost | 0.01
3719 effective_cache_size | 16384
3720 jit_above_cost | 100000
3721 jit_inline_above_cost | 500000
3722 jit_optimize_above_cost | 500000
3723 min_parallel_index_scan_size | 64
3724 min_parallel_table_scan_size | 1024
3725 parallel_setup_cost | 1000
3726 parallel_tuple_cost | 0.1
3727 random_page_cost | 4
3729 enable_async_append | on
3730 enable_bitmapscan | on
3731 enable_gathermerge | on
3733 enable_hashjoin | on
3734 enable_incremental_sort | on
3735 enable_indexonlyscan | on
3736 enable_indexscan | on
3737 enable_material | on
3739 enable_mergejoin | on
3740 enable_nestloop | on
3741 enable_parallel_append | on
3742 enable_parallel_hash | on
3743 enable_partition_pruning | on
3744 enable_partitionwise_aggregate | off
3745 enable_partitionwise_join | off
3752 SET pg_hint_plan.parse_messages TO LOG;
3754 ---- No. A-12-3 effective range of the hint
3756 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3758 ------------------------------------
3760 Merge Cond: (t1.c1 = t2.c1)
3761 -> Index Scan using t1_i1 on t1
3768 SET enable_indexscan TO off;
3769 SET enable_mergejoin TO off;
3770 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3772 ------------------------------
3774 Hash Cond: (t1.c1 = t2.c1)
3780 SELECT name, setting FROM settings;
3782 --------------------------------+-----------
3783 client_min_messages | log
3786 geqo_generations | 0
3789 geqo_selection_bias | 2
3791 constraint_exclusion | partition
3792 cursor_tuple_fraction | 0.1
3793 default_statistics_target | 100
3794 from_collapse_limit | 8
3796 join_collapse_limit | 8
3797 plan_cache_mode | auto
3798 cpu_index_tuple_cost | 0.005
3799 cpu_operator_cost | 0.0025
3800 cpu_tuple_cost | 0.01
3801 effective_cache_size | 16384
3802 jit_above_cost | 100000
3803 jit_inline_above_cost | 500000
3804 jit_optimize_above_cost | 500000
3805 min_parallel_index_scan_size | 64
3806 min_parallel_table_scan_size | 1024
3807 parallel_setup_cost | 1000
3808 parallel_tuple_cost | 0.1
3809 random_page_cost | 4
3811 enable_async_append | on
3812 enable_bitmapscan | on
3813 enable_gathermerge | on
3815 enable_hashjoin | on
3816 enable_incremental_sort | on
3817 enable_indexonlyscan | on
3818 enable_indexscan | off
3819 enable_material | on
3821 enable_mergejoin | off
3822 enable_nestloop | on
3823 enable_parallel_append | on
3824 enable_parallel_hash | on
3825 enable_partition_pruning | on
3826 enable_partitionwise_aggregate | off
3827 enable_partitionwise_join | off
3833 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
3834 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3840 Set(enable_indexscan on)
3841 Set(geqo_threshold 100)
3847 ------------------------------------
3849 Merge Cond: (t1.c1 = t2.c1)
3850 -> Index Scan using t1_i1 on t1
3851 -> Index Scan using t2_i1 on t2
3854 SELECT name, setting FROM settings;
3856 --------------------------------+-----------
3857 client_min_messages | log
3860 geqo_generations | 0
3863 geqo_selection_bias | 2
3865 constraint_exclusion | partition
3866 cursor_tuple_fraction | 0.1
3867 default_statistics_target | 100
3868 from_collapse_limit | 8
3870 join_collapse_limit | 8
3871 plan_cache_mode | auto
3872 cpu_index_tuple_cost | 0.005
3873 cpu_operator_cost | 0.0025
3874 cpu_tuple_cost | 0.01
3875 effective_cache_size | 16384
3876 jit_above_cost | 100000
3877 jit_inline_above_cost | 500000
3878 jit_optimize_above_cost | 500000
3879 min_parallel_index_scan_size | 64
3880 min_parallel_table_scan_size | 1024
3881 parallel_setup_cost | 1000
3882 parallel_tuple_cost | 0.1
3883 random_page_cost | 4
3885 enable_async_append | on
3886 enable_bitmapscan | on
3887 enable_gathermerge | on
3889 enable_hashjoin | on
3890 enable_incremental_sort | on
3891 enable_indexonlyscan | on
3892 enable_indexscan | off
3893 enable_material | on
3895 enable_mergejoin | off
3896 enable_nestloop | on
3897 enable_parallel_append | on
3898 enable_parallel_hash | on
3899 enable_partition_pruning | on
3900 enable_partitionwise_aggregate | off
3901 enable_partitionwise_join | off
3907 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3909 ------------------------------
3911 Hash Cond: (t1.c1 = t2.c1)
3918 SET enable_indexscan TO off;
3919 SET enable_mergejoin TO off;
3920 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3922 ------------------------------
3924 Hash Cond: (t1.c1 = t2.c1)
3930 SELECT name, setting FROM settings;
3932 --------------------------------+-----------
3933 client_min_messages | log
3936 geqo_generations | 0
3939 geqo_selection_bias | 2
3941 constraint_exclusion | partition
3942 cursor_tuple_fraction | 0.1
3943 default_statistics_target | 100
3944 from_collapse_limit | 8
3946 join_collapse_limit | 8
3947 plan_cache_mode | auto
3948 cpu_index_tuple_cost | 0.005
3949 cpu_operator_cost | 0.0025
3950 cpu_tuple_cost | 0.01
3951 effective_cache_size | 16384
3952 jit_above_cost | 100000
3953 jit_inline_above_cost | 500000
3954 jit_optimize_above_cost | 500000
3955 min_parallel_index_scan_size | 64
3956 min_parallel_table_scan_size | 1024
3957 parallel_setup_cost | 1000
3958 parallel_tuple_cost | 0.1
3959 random_page_cost | 4
3961 enable_async_append | on
3962 enable_bitmapscan | on
3963 enable_gathermerge | on
3965 enable_hashjoin | on
3966 enable_incremental_sort | on
3967 enable_indexonlyscan | on
3968 enable_indexscan | off
3969 enable_material | on
3971 enable_mergejoin | off
3972 enable_nestloop | on
3973 enable_parallel_append | on
3974 enable_parallel_hash | on
3975 enable_partition_pruning | on
3976 enable_partitionwise_aggregate | off
3977 enable_partitionwise_join | off
3984 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
3985 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
3991 Set(enable_indexscan on)
3992 Set(geqo_threshold 100)
3998 ------------------------------------
4000 Merge Cond: (t1.c1 = t2.c1)
4001 -> Index Scan using t1_i1 on t1
4002 -> Index Scan using t2_i1 on t2
4007 SELECT name, setting FROM settings;
4009 --------------------------------+-----------
4010 client_min_messages | log
4013 geqo_generations | 0
4016 geqo_selection_bias | 2
4018 constraint_exclusion | partition
4019 cursor_tuple_fraction | 0.1
4020 default_statistics_target | 100
4021 from_collapse_limit | 8
4023 join_collapse_limit | 8
4024 plan_cache_mode | auto
4025 cpu_index_tuple_cost | 0.005
4026 cpu_operator_cost | 0.0025
4027 cpu_tuple_cost | 0.01
4028 effective_cache_size | 16384
4029 jit_above_cost | 100000
4030 jit_inline_above_cost | 500000
4031 jit_optimize_above_cost | 500000
4032 min_parallel_index_scan_size | 64
4033 min_parallel_table_scan_size | 1024
4034 parallel_setup_cost | 1000
4035 parallel_tuple_cost | 0.1
4036 random_page_cost | 4
4038 enable_async_append | on
4039 enable_bitmapscan | on
4040 enable_gathermerge | on
4042 enable_hashjoin | on
4043 enable_incremental_sort | on
4044 enable_indexonlyscan | on
4045 enable_indexscan | off
4046 enable_material | on
4048 enable_mergejoin | off
4049 enable_nestloop | on
4050 enable_parallel_append | on
4051 enable_parallel_hash | on
4052 enable_partition_pruning | on
4053 enable_partitionwise_aggregate | off
4054 enable_partitionwise_join | off
4060 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
4062 ------------------------------
4064 Hash Cond: (t1.c1 = t2.c1)
4072 SET enable_indexscan TO off;
4073 SET enable_mergejoin TO off;
4074 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
4076 ------------------------------
4078 Hash Cond: (t1.c1 = t2.c1)
4084 SELECT name, setting FROM settings;
4086 --------------------------------+-----------
4087 client_min_messages | log
4090 geqo_generations | 0
4093 geqo_selection_bias | 2
4095 constraint_exclusion | partition
4096 cursor_tuple_fraction | 0.1
4097 default_statistics_target | 100
4098 from_collapse_limit | 8
4100 join_collapse_limit | 8
4101 plan_cache_mode | auto
4102 cpu_index_tuple_cost | 0.005
4103 cpu_operator_cost | 0.0025
4104 cpu_tuple_cost | 0.01
4105 effective_cache_size | 16384
4106 jit_above_cost | 100000
4107 jit_inline_above_cost | 500000
4108 jit_optimize_above_cost | 500000
4109 min_parallel_index_scan_size | 64
4110 min_parallel_table_scan_size | 1024
4111 parallel_setup_cost | 1000
4112 parallel_tuple_cost | 0.1
4113 random_page_cost | 4
4115 enable_async_append | on
4116 enable_bitmapscan | on
4117 enable_gathermerge | on
4119 enable_hashjoin | on
4120 enable_incremental_sort | on
4121 enable_indexonlyscan | on
4122 enable_indexscan | off
4123 enable_material | on
4125 enable_mergejoin | off
4126 enable_nestloop | on
4127 enable_parallel_append | on
4128 enable_parallel_hash | on
4129 enable_partition_pruning | on
4130 enable_partitionwise_aggregate | off
4131 enable_partitionwise_join | off
4137 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
4138 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
4144 Set(enable_indexscan on)
4145 Set(geqo_threshold 100)
4151 ------------------------------------
4153 Merge Cond: (t1.c1 = t2.c1)
4154 -> Index Scan using t1_i1 on t1
4155 -> Index Scan using t2_i1 on t2
4159 SET enable_indexscan TO off;
4160 SET enable_mergejoin TO off;
4161 LOAD 'pg_hint_plan';
4162 SELECT name, setting FROM settings;
4164 --------------------------------+-----------
4165 client_min_messages | notice
4168 geqo_generations | 0
4171 geqo_selection_bias | 2
4173 constraint_exclusion | partition
4174 cursor_tuple_fraction | 0.1
4175 default_statistics_target | 100
4176 from_collapse_limit | 8
4178 join_collapse_limit | 8
4179 plan_cache_mode | auto
4180 cpu_index_tuple_cost | 0.005
4181 cpu_operator_cost | 0.0025
4182 cpu_tuple_cost | 0.01
4183 effective_cache_size | 16384
4184 jit_above_cost | 100000
4185 jit_inline_above_cost | 500000
4186 jit_optimize_above_cost | 500000
4187 min_parallel_index_scan_size | 64
4188 min_parallel_table_scan_size | 1024
4189 parallel_setup_cost | 1000
4190 parallel_tuple_cost | 0.1
4191 random_page_cost | 4
4193 enable_async_append | on
4194 enable_bitmapscan | on
4195 enable_gathermerge | on
4197 enable_hashjoin | on
4198 enable_incremental_sort | on
4199 enable_indexonlyscan | on
4200 enable_indexscan | off
4201 enable_material | on
4203 enable_mergejoin | off
4204 enable_nestloop | on
4205 enable_parallel_append | on
4206 enable_parallel_hash | on
4207 enable_partition_pruning | on
4208 enable_partitionwise_aggregate | off
4209 enable_partitionwise_join | off
4215 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
4217 ------------------------------
4219 Hash Cond: (t1.c1 = t2.c1)
4225 SET pg_hint_plan.enable_hint TO on;
4226 SET pg_hint_plan.debug_print TO on;
4227 SET client_min_messages TO LOG;
4228 SET search_path TO public;
4229 RESET enable_indexscan;
4230 RESET enable_mergejoin;
4232 ---- No. A-13 call planner recursively
4234 CREATE OR REPLACE FUNCTION nested_planner(cnt int) RETURNS int AS $$
4238 RAISE NOTICE 'nested_planner(%)', cnt;
4245 SELECT /*+ IndexScan(t_1) */ nested_planner(cnt - 1) INTO new_cnt
4247 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4248 ORDER BY t_1.c1 LIMIT 1;
4252 $$ LANGUAGE plpgsql IMMUTABLE;
4254 ---- No. A-13-2 use hint of main query
4257 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
4258 NOTICE: nested_planner(1)
4260 ---------------------------------------
4261 Index Only Scan using t1_i1 on t1 t_1
4265 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
4266 NOTICE: nested_planner(1)
4275 --------------------------
4278 -> Seq Scan on t1 t_1
4282 ---- No. A-13-3 output number of times of debugging log
4285 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
4286 NOTICE: nested_planner(1)
4288 ---------------------------------------
4289 Index Only Scan using t1_i1 on t1 t_1
4293 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
4294 NOTICE: nested_planner(1)
4303 ---------------------------------------
4304 Index Only Scan using t1_i1 on t1 t_1
4308 EXPLAIN (COSTS false) SELECT nested_planner(2) FROM s1.t1 t_1 ORDER BY t_1.c1;
4309 NOTICE: nested_planner(2)
4310 NOTICE: nested_planner(1)
4319 ---------------------------------------
4320 Index Only Scan using t1_i1 on t1 t_1
4324 EXPLAIN (COSTS false) SELECT nested_planner(2) FROM s1.t1 t_1 ORDER BY t_1.c1;
4325 NOTICE: nested_planner(2)
4326 NOTICE: nested_planner(1)
4342 ---------------------------------------
4343 Index Only Scan using t1_i1 on t1 t_1
4348 -- Redefine not to use cached plan
4350 CREATE OR REPLACE FUNCTION nested_planner(cnt int) RETURNS int AS $$
4354 RAISE NOTICE 'nested_planner(%)', cnt;
4361 SELECT /*+ IndexScan(t_1) */ nested_planner(cnt - 1) INTO new_cnt
4363 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4364 ORDER BY t_1.c1 LIMIT 1;
4368 $$ LANGUAGE plpgsql IMMUTABLE;
4369 -- The function called at the bottom desn't use a hint, the immediate
4370 -- caller level should restore its own hint. So, the first LOG from
4371 -- pg_hint_plan should use the IndexScan(t_1) hint
4372 EXPLAIN (COSTS false) SELECT nested_planner(5) FROM s1.t1 t_1 ORDER BY t_1.c1;
4373 NOTICE: nested_planner(5)
4374 NOTICE: nested_planner(4)
4375 NOTICE: nested_planner(3)
4376 NOTICE: nested_planner(2)
4377 NOTICE: nested_planner(1)
4407 ---------------------------------------
4408 Index Only Scan using t1_i1 on t1 t_1
4411 -- The top level uses SeqScan(t_1), but the function should use only
4412 -- the hint in the function.
4413 /*+SeqScan(t_1) SeqScan(t_2)*/
4414 EXPLAIN (COSTS false) SELECT nested_planner(5) FROM s1.t1 t_1 ORDER BY t_1.c1;
4415 NOTICE: nested_planner(5)
4416 NOTICE: nested_planner(4)
4417 NOTICE: nested_planner(3)
4418 NOTICE: nested_planner(2)
4419 NOTICE: nested_planner(1)
4457 --------------------------
4460 -> Seq Scan on t1 t_1
4464 ---- No. A-13-4 output of debugging log on hint status
4466 CREATE OR REPLACE FUNCTION recall_planner() RETURNS int AS $$
4467 SELECT /*+ IndexScan(t_1) */t_1.c1
4469 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4470 ORDER BY t_1.c1 LIMIT 1;
4471 $$ LANGUAGE SQL IMMUTABLE;
4473 -- recall_planner() is reduced to constant while planning using the
4474 -- hint defined in the function. Then the outer query is planned based
4475 -- on the following hint. pg_hint_plan shows the log for the function
4476 -- but the resulting explain output doesn't contain the corresponding
4478 /*+HashJoin(t_1 t_2)*/
4479 EXPLAIN (COSTS false)
4480 SELECT recall_planner() FROM s1.t1 t_1
4481 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4498 --------------------------------------
4502 Hash Cond: (t_1.c1 = t_2.c1)
4503 -> Seq Scan on t1 t_1
4505 -> Seq Scan on t2 t_2
4509 --See description for No.13-4-1
4510 /*+HashJoin(st_1 st_2)*/
4511 EXPLAIN (COSTS false)
4512 SELECT recall_planner() FROM s1.t1 st_1
4513 JOIN s1.t2 st_2 ON (st_1.c1 = st_2.c1)
4530 ----------------------------------------
4534 Hash Cond: (st_1.c1 = st_2.c1)
4535 -> Seq Scan on t1 st_1
4537 -> Seq Scan on t2 st_2
4541 --See description for No.13-4-1
4542 /*+HashJoin(t_1 t_2)*/
4543 EXPLAIN (COSTS false)
4544 SELECT recall_planner() FROM s1.t1 st_1
4545 JOIN s1.t2 st_2 ON (st_1.c1 = st_2.c1)
4562 ----------------------------------------------
4564 Merge Cond: (st_1.c1 = st_2.c1)
4565 -> Index Only Scan using t1_i1 on t1 st_1
4568 -> Seq Scan on t2 st_2
4572 --See description for No.13-4-1
4573 /*+HashJoin(st_1 st_2)*/
4574 EXPLAIN (COSTS false)
4575 SELECT recall_planner() FROM s1.t1 t_1
4576 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4593 ---------------------------------------------
4595 Merge Cond: (t_1.c1 = t_2.c1)
4596 -> Index Only Scan using t1_i1 on t1 t_1
4599 -> Seq Scan on t2 t_2
4603 -- See description for No.13-4-1. No joins in ths plan, so
4604 -- pg_hint_plan doesn't complain on the wrongly written error hint.
4605 /*+HashJoin(t_1 t_1)*/
4606 EXPLAIN (COSTS false)
4607 SELECT recall_planner() FROM s1.t1 t_1
4624 ---------------------------------------
4625 Index Only Scan using t1_i1 on t1 t_1
4629 CREATE OR REPLACE FUNCTION recall_planner_one_t() RETURNS int AS $$
4630 SELECT /*+ IndexScan(t_1) */t_1.c1
4632 ORDER BY t_1.c1 LIMIT 1;
4633 $$ LANGUAGE SQL IMMUTABLE;
4634 EXPLAIN (COSTS false)
4635 SELECT recall_planner_one_t() FROM s1.t1 t_1
4636 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4646 ---------------------------------------------
4648 Merge Cond: (t_1.c1 = t_2.c1)
4649 -> Index Only Scan using t1_i1 on t1 t_1
4652 -> Seq Scan on t2 t_2
4655 /*+HashJoin(t_1 t_1)*/
4656 EXPLAIN (COSTS false)
4657 SELECT recall_planner_one_t() FROM s1.t1 t_1
4658 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4667 INFO: pg_hint_plan: hint syntax error at or near "HashJoin(t_1 t_1)"
4668 DETAIL: Relation name "t_1" is duplicated.
4677 ---------------------------------------------
4679 Merge Cond: (t_1.c1 = t_2.c1)
4680 -> Index Only Scan using t1_i1 on t1 t_1
4683 -> Seq Scan on t2 t_2
4686 DROP FUNCTION recall_planner_one_t(int);
4687 ERROR: function recall_planner_one_t(integer) does not exist
4689 -- See description for No.13-4-1. Complains on the wrongly written hint.
4690 /*+HashJoin(t_1 t_1)*/
4691 EXPLAIN (COSTS false)
4692 SELECT recall_planner() FROM s1.t1 t_1
4693 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4702 INFO: pg_hint_plan: hint syntax error at or near "HashJoin(t_1 t_1)"
4703 DETAIL: Relation name "t_1" is duplicated.
4712 ---------------------------------------------
4714 Merge Cond: (t_1.c1 = t_2.c1)
4715 -> Index Only Scan using t1_i1 on t1 t_1
4718 -> Seq Scan on t2 t_2
4722 /*+MergeJoin(t_1 t_2)HashJoin(t_1 t_2)*/
4723 EXPLAIN (COSTS false)
4724 SELECT recall_planner() FROM s1.t1 t_1
4725 JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
4727 INFO: pg_hint_plan: hint syntax error at or near "MergeJoin(t_1 t_2)HashJoin(t_1 t_2)"
4728 DETAIL: Conflict join method hint.
4745 --------------------------------------
4749 Hash Cond: (t_1.c1 = t_2.c1)
4750 -> Seq Scan on t1 t_1
4752 -> Seq Scan on t2 t_2
4755 --No.14-1-1 plancache invalidation
4756 CREATE TABLE s1.tpc AS SELECT a FROM generate_series(0, 999) a;
4757 CREATE INDEX ON s1.tpc(a);
4758 PREPARE p1 AS SELECT * FROM s1.tpc WHERE a < 999;
4759 /*+ IndexScan(tpc) */PREPARE p2 AS SELECT * FROM s1.tpc WHERE a < 999;
4760 /*+ SeqScan(tpc) */PREPARE p3(int) AS SELECT * FROM s1.tpc WHERE a = $1;
4763 ------------------------------------------------------
4764 Seq Scan on tpc (cost=0.00..17.50 rows=333 width=4)
4777 ------------------------------------------------------------------------
4778 Index Scan using tpc_a_idx on tpc (cost=0.28..34.10 rows=333 width=4)
4779 Index Cond: (a < 999)
4782 EXPLAIN EXECUTE p3(500);
4791 ----------------------------------------------------
4792 Seq Scan on tpc (cost=0.00..17.50 rows=5 width=4)
4796 -- The DROP invalidates the plan caches
4798 CREATE TABLE s1.tpc AS SELECT a FROM generate_series(0, 999) a;
4799 CREATE INDEX ON s1.tpc(a);
4802 ------------------------------------------------------
4803 Seq Scan on tpc (cost=0.00..17.50 rows=333 width=4)
4816 ------------------------------------------------------------------------
4817 Index Scan using tpc_a_idx on tpc (cost=0.28..34.10 rows=333 width=4)
4818 Index Cond: (a < 999)
4821 EXPLAIN EXECUTE p3(500);
4830 ----------------------------------------------------
4831 Seq Scan on tpc (cost=0.00..17.50 rows=5 width=4)