SET client_min_messages TO LOG;
SET search_path TO public;
----
----- No. A-5-1 hint format
+---- No.A-1-1 install
+---- No.A-2-1 uninstall
+----
+-- No.A-1-1-3
+CREATE EXTENSION pg_hint_plan;
+-- No.A-1-2-3
+DROP EXTENSION pg_hint_plan;
+-- No.A-1-1-4
+CREATE EXTENSION pg_hint_plan SCHEMA other_name;
+ERROR: extension "pg_hint_plan" must be installed in schema "hint_plan"
+CREATE EXTENSION pg_hint_plan;
+----
+---- No. A-5-1 comment pattern
----
-- No. A-5-1-1
/*+SeqScan(t1)*/
---- No. A-5-2 hint position
----
-- No. A-5-2-1
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 = 1;
+ QUERY PLAN
+------------------------------
+ Index Scan using t1_i1 on t1
+ Index Cond: (c1 = 1)
+(2 rows)
+
/*+SeqScan(t1)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
used hint:
SeqScan(t1)
(2 rows)
-- No. A-5-2-2
-/* normal comment */
-/*+SeqScan(t1)*/
+EXPLAIN (COSTS false) SELECT c1, c2 AS c_2 /*+SeqScan(t1)*/ FROM s1.t1 WHERE t1.c1 = 1;
+LOG: pg_hint_plan:
+used hint:
+SeqScan(t1)
+not used hint:
+duplication hint:
+error hint:
+
+ QUERY PLAN
+--------------------
+ Seq Scan on t1
+ Filter: (c1 = 1)
+(2 rows)
+
+-- No. A-5-2-3
+EXPLAIN (COSTS false) SELECT c1 AS "c1"/*+SeqScan(t1)*/ FROM s1.t1 WHERE t1.c1 = 1;
+ QUERY PLAN
+------------------------------
+ Index Scan using t1_i1 on t1
+ Index Cond: (c1 = 1)
+(2 rows)
+
+-- No. A-5-2-4
+EXPLAIN (COSTS false) SELECT * /*+SeqScan(t1)*/ FROM s1.t1 WHERE t1.c1 = 1;
+ QUERY PLAN
+------------------------------
+ Index Scan using t1_i1 on t1
+ Index Cond: (c1 = 1)
+(2 rows)
+
+----
+---- No. A-6-1 hint's table definition
+----
+SET pg_hint_plan.enable_hint_table TO on;
+-- No. A-6-1-1
+\d hint_plan.hints
+ Table "hint_plan.hints"
+ Column | Type | Modifiers
+-------------------+------+-----------
+ norm_query_string | text | not null
+ application_name | text | not null
+ hints | text | not null
+Indexes:
+ "hints_pkey" PRIMARY KEY, btree (norm_query_string, application_name)
+
+----
+---- No. A-6-2 search condition
+----
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
QUERY PLAN
------------------------------
Index Cond: (c1 = 1)
(2 rows)
--- No. A-5-2-3
-EXPLAIN (COSTS false) SELECT /*+SeqScan(t1)*/ * FROM s1.t1 WHERE t1.c1 = 1;
+-- No. A-6-2-1
+INSERT INTO hint_plan.hints VALUES (
+ 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
+ '',
+ 'SeqScan(t1)');
+EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
+LOG: pg_hint_plan:
+used hint:
+SeqScan(t1)
+not used hint:
+duplication hint:
+error hint:
+
+ QUERY PLAN
+--------------------
+ Seq Scan on t1
+ Filter: (c1 = 1)
+(2 rows)
+
+-- No. A-6-2-2
+INSERT INTO hint_plan.hints VALUES (
+ 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
+ 'psql',
+ 'BitmapScan(t1)');
+EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
+LOG: pg_hint_plan:
+used hint:
+BitmapScan(t1)
+not used hint:
+duplication hint:
+error hint:
+
+ QUERY PLAN
+----------------------------------
+ Bitmap Heap Scan on t1
+ Recheck Cond: (c1 = 1)
+ -> Bitmap Index Scan on t1_i1
+ Index Cond: (c1 = 1)
+(4 rows)
+
+TRUNCATE hint_plan.hints;
+-- No. A-6-2-3
+INSERT INTO hint_plan.hints VALUES (
+ 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
+ 'dummy_application_name',
+ 'SeqScan(t1)'
+);
+EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
QUERY PLAN
------------------------------
Index Scan using t1_i1 on t1
Index Cond: (c1 = 1)
(2 rows)
+TRUNCATE hint_plan.hints;
+-- No. A-6-2-4
+INSERT INTO hint_plan.hints VALUES (
+ 'EXPLAIN (COSTS false) SELECT * FROM s1.t1;',
+ '',
+ 'SeqScan(t1)'
+);
+EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
+ QUERY PLAN
+------------------------------
+ Index Scan using t1_i1 on t1
+ Index Cond: (c1 = 1)
+(2 rows)
+
+TRUNCATE hint_plan.hints;
+----
+---- No. A-6-3 number of constant
+----
+-- No. A-6-3-1
+INSERT INTO hint_plan.hints VALUES (
+ 'EXPLAIN (COSTS false) SELECT c1 FROM s1.t1;',
+ '',
+ 'SeqScan(t1)'
+);
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1;
+LOG: pg_hint_plan:
+used hint:
+SeqScan(t1)
+not used hint:
+duplication hint:
+error hint:
+
+ QUERY PLAN
+----------------
+ Seq Scan on t1
+(1 row)
+
+TRUNCATE hint_plan.hints;
+-- No. A-6-3-2
+INSERT INTO hint_plan.hints VALUES (
+ 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
+ '',
+ 'SeqScan(t1)'
+);
+EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
+LOG: pg_hint_plan:
+used hint:
+SeqScan(t1)
+not used hint:
+duplication hint:
+error hint:
+
+ QUERY PLAN
+--------------------
+ Seq Scan on t1
+ Filter: (c1 = 1)
+(2 rows)
+
+TRUNCATE hint_plan.hints;
+-- No. A-6-3-3
+INSERT INTO hint_plan.hints VALUES (
+ 'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ? OR t1.c1 = ?;',
+ '',
+ 'SeqScan(t1)'
+);
+EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 OR t1.c1 = 0;
+LOG: pg_hint_plan:
+used hint:
+SeqScan(t1)
+not used hint:
+duplication hint:
+error hint:
+
+ QUERY PLAN
+----------------------------------
+ Seq Scan on t1
+ Filter: ((c1 = 1) OR (c1 = 0))
+(2 rows)
+
+TRUNCATE hint_plan.hints;
+SET pg_hint_plan.enable_hint_table TO off;
----
----- No. A-5-4 hint delimiter
+---- No. A-7-2 hint delimiter
----
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
QUERY PLAN
Index Cond: (c1 = 1)
(2 rows)
--- No. A-5-4-1
--- No. A-5-4-2
--- No. A-5-4-3
--- No. A-5-4-4
--- No. A-5-4-5
--- No. A-5-4-6
--- No. A-5-4-7
+-- No. A-7-2-1
+-- No. A-7-2-2
+-- No. A-7-2-3
+-- No. A-7-2-4
+-- No. A-7-2-5
+-- No. A-7-2-6
+-- No. A-7-2-7
/*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-8
+-- No. A-7-2-8
/*+ Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-9
+-- No. A-7-2-9
/*+Set(enable_indexscan"off")Set(enable_bitmapscan"off") */
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-10
+-- No. A-7-2-10
/*+ Set (enable_indexscan"off") Set (enable_bitmapscan"off")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-11
+-- No. A-7-2-11
/*+Set ( enable_indexscan"off")Set ( enable_bitmapscan"off")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-12
+-- No. A-7-2-12
/*+Set(enable_indexscan"off" ) Set(enable_bitmapscan"off" ) */
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-13
+-- No. A-7-2-13
/*+Set( enable_indexscan "off" )Set( enable_bitmapscan "off" )*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-14
+-- No. A-7-2-14
/*+ Set ( enable_indexscan "off" ) Set ( enable_bitmapscan "off" ) */
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-15
+-- No. A-7-2-15
/*+ Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-16
+-- No. A-7-2-16
/*+Set(enable_indexscan"off")Set(enable_bitmapscan"off") */
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-17
+-- No. A-7-2-17
/*+ Set (enable_indexscan"off") Set (enable_bitmapscan"off")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-18
+-- No. A-7-2-18
/*+Set ( enable_indexscan"off")Set ( enable_bitmapscan"off")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-19
+-- No. A-7-2-19
/*+Set(enable_indexscan"off" ) Set(enable_bitmapscan"off" ) */
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-20
+-- No. A-7-2-20
/*+Set( enable_indexscan "off" )Set( enable_bitmapscan "off" )*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-21
+-- No. A-7-2-21
/*+ Set ( enable_indexscan "off" ) Set ( enable_bitmapscan "off" ) */
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-22
+-- No. A-7-2-22
/*+
Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-23
+-- No. A-7-2-23
/*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")
*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-24
+-- No. A-7-2-24
/*+
Set
(enable_indexscan"off")
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-25
+-- No. A-7-2-25
/*+Set
(
enable_indexscan"off")Set
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-26
+-- No. A-7-2-26
/*+Set(enable_indexscan"off"
)
Set(enable_bitmapscan"off"
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-27
+-- No. A-7-2-27
/*+Set(
enable_indexscan
"off"
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-28
+-- No. A-7-2-28
/*+
Set
(
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-29
+-- No. A-7-2-29
/*+
Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-30
+-- No. A-7-2-30
/*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")
*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-31
+-- No. A-7-2-31
/*+
Set
(enable_indexscan"off")
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-32
+-- No. A-7-2-32
/*+Set
(
enable_indexscan"off")Set
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-33
+-- No. A-7-2-33
/*+Set(enable_indexscan"off"
)
Set(enable_bitmapscan"off"
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-34
+-- No. A-7-2-34
/*+Set(
enable_indexscan
"off"
Filter: (c1 = 1)
(2 rows)
--- No. A-5-4-35
+-- No. A-7-2-35
/*+
Set
(
(2 rows)
----
----- No. A-5-5 hint object pattern
----- No. A-7-2 message object pattern
+---- No. A-7-3 hint object pattern
+---- No. A-9-2 message object pattern
----
--- No. A-5-5-1
--- No. A-7-2-1
+-- No. A-7-3-1
+-- No. A-9-2-1
/*+SeqScan(t)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 t WHERE t.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-5-2
--- No. A-7-2-2
+-- No. A-7-3-2
+-- No. A-9-2-2
/*+SeqScan(T)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 "T" WHERE "T".c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-5-3
--- No. A-7-2-3
+-- No. A-7-3-3
+-- No. A-9-2-3
/*+SeqScan(()*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(" WHERE "(".c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-5-4
--- No. A-7-2-4
+-- No. A-7-3-4
+-- No. A-9-2-4
/*+SeqScan())*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
INFO: hint syntax error at or near ")"
Filter: (c1 = 1)
(2 rows)
--- No. A-5-5-5
--- No. A-7-2-5
+-- No. A-7-3-5
+-- No. A-9-2-5
/*+SeqScan(")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
INFO: hint syntax error at or near ""
Filter: (c1 = 1)
(2 rows)
--- No. A-5-5-6
--- No. A-7-2-6
+-- No. A-7-3-6
+-- No. A-9-2-6
/*+SeqScan( )*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
INFO: hint syntax error at or near ""
Filter: (c1 = 1)
(2 rows)
--- No. A-5-5-7
--- No. A-7-2-7
+-- No. A-7-3-7
+-- No. A-9-2-7
/*+SeqScan( )*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
INFO: hint syntax error at or near ""
Filter: (c1 = 1)
(2 rows)
--- No. A-5-5-8
--- No. A-7-2-8
+-- No. A-7-3-8
+-- No. A-9-2-8
/*+SeqScan(
)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
Filter: (c1 = 1)
(5 rows)
--- No. A-5-5-9
--- No. A-7-2-9
+-- No. A-7-3-9
+-- No. A-9-2-9
/*+SeqScan(Set)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-5-10
--- No. A-7-2-10
+-- No. A-7-3-10
+-- No. A-9-2-10
/*+SeqScan(あ)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 あ WHERE あ.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-5-5-11
--- No. A-7-2-11
+-- No. A-7-3-11
+-- No. A-9-2-11
/*+SeqScan(/**/)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**/" WHERE "/**/".c1 = 1;
INFO: hint syntax error at or near "/**/)*/
Index Cond: (c1 = 1)
(2 rows)
--- No. A-5-5-12
--- No. A-7-2-12
+-- No. A-7-3-12
+-- No. A-9-2-12
/*+SeqScan("tT()""
Set/**/あ")*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""
(3 rows)
----
----- No. A-5-6 hint parse error
+---- No. A-7-4 hint parse error
----
--- No. A-5-6-1
+-- No. A-7-4-1
/*+Set(enable_indexscan off)Set enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
INFO: hint syntax error at or near "enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)"
Index Cond: (c1 = 1)
(4 rows)
--- No. A-5-6-2
+-- No. A-7-4-2
/*+Set(enable_indexscan off)Set(enable_tidscan off Set(enable_bitmapscan off)SeqScan(t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
INFO: hint syntax error at or near "Set(enable_tidscan off Set(enable_bitmapscan off)SeqScan(t1)"
Filter: (c1 = 1)
(2 rows)
--- No. A-5-6-3
+-- No. A-7-4-3
/*+Set(enable_indexscan off)Set(enable_tidscan "off)Set(enable_bitmapscan off)SeqScan(t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
INFO: hint syntax error at or near ""
Index Cond: (c1 = 1)
(4 rows)
--- No. A-5-6-4
+-- No. A-7-4-4
/*+Set(enable_indexscan off)SeqScan("")Set(enable_bitmapscan off)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
INFO: hint syntax error at or near ")Set(enable_bitmapscan off)"
Index Cond: (c1 = 1)
(4 rows)
--- No. A-5-6-5
+-- No. A-7-4-5
/*+Set(enable_indexscan off)NoSet(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
INFO: hint syntax error at or near "NoSet(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)"
Index Cond: (c1 = 1)
(4 rows)
--- No. A-5-6-6
+-- No. A-7-4-6
/*+Set(enable_indexscan off)"Set"(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
INFO: hint syntax error at or near ""Set"(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)"
Index Cond: (c1 = 1)
(4 rows)
--- No. A-5-6-7
+-- No. A-7-4-7
/*+Set(enable_indexscan off)Set(enable_tidscan /* value */off)Set(enable_bitmapscan off)SeqScan(t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
INFO: hint syntax error at or near "/* value */off)Set(enable_bitmapscan off)SeqScan(t1)*/
(2 rows)
----
----- No. A-6-1 original GUC parameter
+---- No. A-8-1 original GUC parameter
----
--- No. A-6-1-1
+-- No. A-8-1-1
SET ROLE super_user;
SET pg_hint_plan.debug_print TO off;
SHOW pg_hint_plan.enable_hint;
info
(1 row)
--- No. A-6-1-2
+-- No. A-8-1-2
SET ROLE normal_user;
SHOW pg_hint_plan.enable_hint;
pg_hint_plan.enable_hint
RESET ROLE;
----
----- No. A-6-2 original GUC parameter pg_hint_plan.enable_hint
+---- No. A-8-2 original GUC parameter pg_hint_plan.enable_hint
----
--- No. A-6-2-1
+-- No. A-8-2-1
SET pg_hint_plan.enable_hint TO on;
SHOW pg_hint_plan.enable_hint;
pg_hint_plan.enable_hint
Index Cond: (c1 = 1)
(4 rows)
--- No. A-6-2-2
+-- No. A-8-2-2
SET pg_hint_plan.enable_hint TO off;
SHOW pg_hint_plan.enable_hint;
pg_hint_plan.enable_hint
Index Cond: (c1 = 1)
(2 rows)
--- No. A-6-2-3
+-- No. A-8-2-3
SET pg_hint_plan.enable_hint TO DEFAULT;
SHOW pg_hint_plan.enable_hint;
pg_hint_plan.enable_hint
Index Cond: (c1 = 1)
(4 rows)
--- No. A-6-2-4
+-- No. A-8-2-4
SET pg_hint_plan.enable_hint TO enable;
ERROR: parameter "pg_hint_plan.enable_hint" requires a Boolean value
SHOW pg_hint_plan.enable_hint;
(1 row)
----
----- No. A-6-3 original GUC parameter pg_hint_plan.debug_print
+---- No. A-8-3 original GUC parameter pg_hint_plan.debug_print
----
--- No. A-6-3-1
+-- No. A-8-3-1
SET pg_hint_plan.debug_print TO on;
SHOW pg_hint_plan.debug_print;
pg_hint_plan.debug_print
Index Cond: (c1 = 1)
(4 rows)
--- No. A-6-3-2
+-- No. A-8-3-2
SET pg_hint_plan.debug_print TO off;
SHOW pg_hint_plan.debug_print;
pg_hint_plan.debug_print
Index Cond: (c1 = 1)
(4 rows)
--- No. A-6-3-3
+-- No. A-8-3-3
SET pg_hint_plan.debug_print TO DEFAULT;
SHOW pg_hint_plan.debug_print;
pg_hint_plan.debug_print
Index Cond: (c1 = 1)
(4 rows)
--- No. A-6-3-4
+-- No. A-8-3-4
SET pg_hint_plan.debug_print TO enable;
ERROR: parameter "pg_hint_plan.debug_print" requires a Boolean value
SHOW pg_hint_plan.debug_print;
(1 row)
----
----- No. A-6-4 original GUC parameter pg_hint_plan.parse_messages
+---- No. A-8-4 original GUC parameter pg_hint_plan.parse_messages
----
SET client_min_messages TO debug5;
DEBUG: CommitTransactionCommand
DEBUG: CommitTransaction
DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
--- No. A-6-4-1
+-- No. A-8-4-1
SET pg_hint_plan.parse_messages TO debug5;
DEBUG: StartTransactionCommand
DEBUG: StartTransaction
1
(1 row)
--- No. A-6-4-2
+-- No. A-8-4-2
SET pg_hint_plan.parse_messages TO debug4;
DEBUG: StartTransactionCommand
DEBUG: StartTransaction
1
(1 row)
--- No. A-6-4-3
+-- No. A-8-4-3
SET pg_hint_plan.parse_messages TO debug3;
DEBUG: StartTransactionCommand
DEBUG: StartTransaction
1
(1 row)
--- No. A-6-4-4
+-- No. A-8-4-4
SET pg_hint_plan.parse_messages TO debug2;
SHOW pg_hint_plan.parse_messages;
pg_hint_plan.parse_messages
1
(1 row)
--- No. A-6-4-5
+-- No. A-8-4-5
SET pg_hint_plan.parse_messages TO debug1;
SHOW pg_hint_plan.parse_messages;
pg_hint_plan.parse_messages
1
(1 row)
--- No. A-6-4-6
+-- No. A-8-4-6
SET pg_hint_plan.parse_messages TO log;
SHOW pg_hint_plan.parse_messages;
pg_hint_plan.parse_messages
1
(1 row)
--- No. A-6-4-7
+-- No. A-8-4-7
SET pg_hint_plan.parse_messages TO info;
SHOW pg_hint_plan.parse_messages;
pg_hint_plan.parse_messages
1
(1 row)
--- No. A-6-4-8
+-- No. A-8-4-8
SET pg_hint_plan.parse_messages TO notice;
SHOW pg_hint_plan.parse_messages;
pg_hint_plan.parse_messages
1
(1 row)
--- No. A-6-4-9
+-- No. A-8-4-9
SET pg_hint_plan.parse_messages TO warning;
SHOW pg_hint_plan.parse_messages;
pg_hint_plan.parse_messages
1
(1 row)
--- No. A-6-4-10
+-- No. A-8-4-10
SET pg_hint_plan.parse_messages TO error;
SHOW pg_hint_plan.parse_messages;
pg_hint_plan.parse_messages
DETAIL: Opening parenthesis is necessary.
SET client_min_messages TO fatal;
/*+Set*/SELECT 1;
--- No. A-6-4-11
+-- No. A-8-4-11
RESET client_min_messages;
SET pg_hint_plan.parse_messages TO DEFAULT;
SHOW pg_hint_plan.parse_messages;
1
(1 row)
--- No. A-6-4-12
+-- No. A-8-4-12
SET pg_hint_plan.parse_messages TO fatal;
ERROR: invalid value for parameter "pg_hint_plan.parse_messages": "fatal"
HINT: Available values: debug5, debug4, debug3, debug2, debug1, log, info, notice, warning, error.
info
(1 row)
--- No. A-6-4-13
+-- No. A-8-4-13
SET pg_hint_plan.parse_messages TO panic;
ERROR: invalid value for parameter "pg_hint_plan.parse_messages": "panic"
HINT: Available values: debug5, debug4, debug3, debug2, debug1, log, info, notice, warning, error.
info
(1 row)
--- No. A-6-4-14
+-- No. A-8-4-14
SET pg_hint_plan.parse_messages TO on;
ERROR: invalid value for parameter "pg_hint_plan.parse_messages": "on"
HINT: Available values: debug5, debug4, debug3, debug2, debug1, log, info, notice, warning, error.
(1 row)
----
----- No. A-7-1 parse error message output
+---- No. A-8-5 original GUC parameter pg_hint_plan.enable_hint_table
----
--- No. A-7-1-1
+
+-- No. A-8-5-1
+
+-- No. A-8-5-2
+
+-- No. A-8-5-3
+
+-- No. A-8-5-4
+
+----
+---- No. A-9-1 parse error message output
+----
+-- No. A-9-1-1
/*+"Set"(enable_indexscan on)*/SELECT 1;
INFO: hint syntax error at or near ""Set"(enable_indexscan on)"
DETAIL: Unrecognized hint keyword ""Set"".
(1 row)
----
----- No. A-7-3 hint state output
+---- No. A-9-3 hint state output
----
SET pg_hint_plan.debug_print TO on;
SET client_min_messages TO LOG;
--- No. A-7-3-1
+-- No. A-9-3-1
/*+SeqScan(t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Filter: (c1 = 1)
(2 rows)
--- No. A-7-3-2
+-- No. A-9-3-2
/*+SeqScan(no_table)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
Index Cond: (c1 = 1)
(2 rows)
--- No. A-7-3-3
+-- No. A-9-3-3
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
QUERY PLAN
-----------------------------------
Filter: ((c1 = 1) AND (ctid = '(1,1)'::tid))
(2 rows)
--- No. A-7-3-4
+-- No. A-9-3-4
/*+Set(enable_indexscan enable)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
INFO: parameter "enable_indexscan" requires a Boolean value
(2 rows)
----
----- No. A-8-1 hint state output
+---- No. A-10-1 hint state output
----
PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
EXPLAIN (COSTS false) EXECUTE p1;
(2 rows)
DEALLOCATE p1;
--- No. A-8-1-1
--- No. A-8-1-2
+-- No. A-10-1-1
+-- No. A-10-1-2
/*+SeqScan(t1)*/
PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
(4 rows)
DEALLOCATE p1;
--- No. A-8-1-3
--- No. A-8-1-4
+-- No. A-10-1-3
+-- No. A-10-1-4
/*+SeqScan(t1)*/
PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
(4 rows)
DEALLOCATE p1;
--- No. A-8-1-5
--- No. A-8-1-6
+-- No. A-10-1-5
+-- No. A-10-1-6
PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
/*+BitmapScan(t1)*/
EXPLAIN (COSTS false) EXECUTE p1;
(2 rows)
DEALLOCATE p1;
--- No. A-8-1-9
--- No. A-8-1-10
+-- No. A-10-1-9
+-- No. A-10-1-10
/*+SeqScan(t1)*/
PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
(4 rows)
DEALLOCATE p1;
--- No. A-8-1-11
--- No. A-8-1-12
+-- No. A-10-1-11
+-- No. A-10-1-12
/*+SeqScan(t1)*/
PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
LOG: pg_hint_plan:
(4 rows)
DEALLOCATE p1;
--- No. A-8-1-13
--- No. A-8-1-14
+-- No. A-10-1-13
+-- No. A-10-1-14
PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
/*+BitmapScan(t1)*/
EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
DEALLOCATE p1;
----
----- No. A-8-4 EXECUTE statement name error
+---- No. A-10-4 EXECUTE statement name error
----
--- No. A-8-4-1
+-- No. A-10-4-1
EXECUTE p1;
ERROR: prepared statement "p1" does not exist
SHOW pg_hint_plan.debug_print;
(1 row)
----
----- No. A-9-5 EXECUTE statement name error
+---- No. A-11-5 EXECUTE statement name error
----
--- No. A-9-5-1
+-- No. A-11-5-1
SELECT pg_stat_statements_reset();
pg_stat_statements_reset
--------------------------
(4 rows)
----
----- No. A-10-1 duplicate hint
-----
--- No. A-10-1-1
-EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.ctid = '(1,1)' AND t1.c1 = t2.c1 AND t2.ctid = '(1,1)' AND t1.c1 = t3.c1 AND t3.ctid = '(1,1)' AND t1.c1 = t4.c1 AND t4.ctid = '(1,1)';
- QUERY PLAN
------------------------------------------------------
- Nested Loop
- Join Filter: (t1.c1 = t4.c1)
- -> Nested Loop
- Join Filter: (t1.c1 = t3.c1)
- -> Nested Loop
- Join Filter: (t1.c1 = t2.c1)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
-(14 rows)
-
-/*+
-Set(enable_tidscan aaa)
-Set(enable_tidscan on)
-Set(enable_tidscan off)
-SeqScan(t4)
-IndexScan(t4)
-BitmapScan(t4)
-TidScan(t4)
-NestLoop(t4 t3)
-MergeJoin(t4 t3)
-HashJoin(t4 t3)
-Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Leading(t4 t3 t2 t1)
-*/
-EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.ctid = '(1,1)' AND t1.c1 = t2.c1 AND t2.ctid = '(1,1)' AND t1.c1 = t3.c1 AND t3.ctid = '(1,1)' AND t1.c1 = t4.c1 AND t4.ctid = '(1,1)';
-INFO: hint syntax error at or near "SeqScan(t4)
-IndexScan(t4)
-BitmapScan(t4)
-TidScan(t4)
-NestLoop(t4 t3)
-MergeJoin(t4 t3)
-HashJoin(t4 t3)
-Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict scan method hint.
-INFO: hint syntax error at or near "IndexScan(t4)
-BitmapScan(t4)
-TidScan(t4)
-NestLoop(t4 t3)
-MergeJoin(t4 t3)
-HashJoin(t4 t3)
-Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict scan method hint.
-INFO: hint syntax error at or near "BitmapScan(t4)
-TidScan(t4)
-NestLoop(t4 t3)
-MergeJoin(t4 t3)
-HashJoin(t4 t3)
-Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict scan method hint.
-INFO: hint syntax error at or near "NestLoop(t4 t3)
-MergeJoin(t4 t3)
-HashJoin(t4 t3)
-Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict join method hint.
-INFO: hint syntax error at or near "MergeJoin(t4 t3)
-HashJoin(t4 t3)
-Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict join method hint.
-INFO: hint syntax error at or near "Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict leading hint.
-INFO: hint syntax error at or near "Leading(t1 t4 t3 t2)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict leading hint.
-INFO: hint syntax error at or near "Set(enable_tidscan aaa)
-Set(enable_tidscan on)
-Set(enable_tidscan off)
-SeqScan(t4)
-IndexScan(t4)
-BitmapScan(t4)
-TidScan(t4)
-NestLoop(t4 t3)
-MergeJoin(t4 t3)
-HashJoin(t4 t3)
-Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict set hint.
-INFO: hint syntax error at or near "Set(enable_tidscan on)
-Set(enable_tidscan off)
-SeqScan(t4)
-IndexScan(t4)
-BitmapScan(t4)
-TidScan(t4)
-NestLoop(t4 t3)
-MergeJoin(t4 t3)
-HashJoin(t4 t3)
-Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict set hint.
-LOG: pg_hint_plan:
-used hint:
-TidScan(t4)
-HashJoin(t3 t4)
-Leading(t4 t3 t2 t1)
-Set(enable_tidscan off)
-not used hint:
-duplication hint:
-SeqScan(t4)
-IndexScan(t4)
-BitmapScan(t4)
-NestLoop(t3 t4)
-MergeJoin(t3 t4)
-Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan aaa)
-Set(enable_tidscan on)
-error hint:
-
- QUERY PLAN
------------------------------------------------------------
- Nested Loop
- -> Nested Loop
- Join Filter: (t3.c1 = t2.c1)
- -> Hash Join
- Hash Cond: (t3.c1 = t4.c1)
- -> Seq Scan on t3
- Filter: (ctid = '(1,1)'::tid)
- -> Hash
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Index Scan using t1_i1 on t1
- Index Cond: (c1 = t2.c1)
- Filter: (ctid = '(1,1)'::tid)
-(15 rows)
-
--- No. A-10-1-2
-EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.ctid = '(1,1)' AND t1.c1 = t2.c1 AND t2.ctid = '(1,1)' AND t1.c1 = t3.c1 AND t3.ctid = '(1,1)' AND t1.c1 = t4.c1 AND t4.ctid = '(1,1)';
- QUERY PLAN
------------------------------------------------------
- Nested Loop
- Join Filter: (t1.c1 = t4.c1)
- -> Nested Loop
- Join Filter: (t1.c1 = t3.c1)
- -> Nested Loop
- Join Filter: (t1.c1 = t2.c1)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
-(14 rows)
-
-/*+
-SeqScan(t4)
-Set(enable_tidscan aaa)
-IndexScan(t4)
-NestLoop(t4 t3)
-Leading(t2 t1 t4 t3)
-Set(enable_tidscan on)
-BitmapScan(t4)
-MergeJoin(t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan off)
-TidScan(t4)
-HashJoin(t4 t3)
-Leading(t4 t3 t2 t1)
-*/
-EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.ctid = '(1,1)' AND t1.c1 = t2.c1 AND t2.ctid = '(1,1)' AND t1.c1 = t3.c1 AND t3.ctid = '(1,1)' AND t1.c1 = t4.c1 AND t4.ctid = '(1,1)';
-INFO: hint syntax error at or near "SeqScan(t4)
-Set(enable_tidscan aaa)
-IndexScan(t4)
-NestLoop(t4 t3)
-Leading(t2 t1 t4 t3)
-Set(enable_tidscan on)
-BitmapScan(t4)
-MergeJoin(t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan off)
-TidScan(t4)
-HashJoin(t4 t3)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict scan method hint.
-INFO: hint syntax error at or near "IndexScan(t4)
-NestLoop(t4 t3)
-Leading(t2 t1 t4 t3)
-Set(enable_tidscan on)
-BitmapScan(t4)
-MergeJoin(t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan off)
-TidScan(t4)
-HashJoin(t4 t3)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict scan method hint.
-INFO: hint syntax error at or near "BitmapScan(t4)
-MergeJoin(t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan off)
-TidScan(t4)
-HashJoin(t4 t3)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict scan method hint.
-INFO: hint syntax error at or near "NestLoop(t4 t3)
-Leading(t2 t1 t4 t3)
-Set(enable_tidscan on)
-BitmapScan(t4)
-MergeJoin(t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan off)
-TidScan(t4)
-HashJoin(t4 t3)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict join method hint.
-INFO: hint syntax error at or near "MergeJoin(t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan off)
-TidScan(t4)
-HashJoin(t4 t3)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict join method hint.
-INFO: hint syntax error at or near "Leading(t2 t1 t4 t3)
-Set(enable_tidscan on)
-BitmapScan(t4)
-MergeJoin(t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan off)
-TidScan(t4)
-HashJoin(t4 t3)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict leading hint.
-INFO: hint syntax error at or near "Leading(t1 t4 t3 t2)
-Set(enable_tidscan off)
-TidScan(t4)
-HashJoin(t4 t3)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict leading hint.
-INFO: hint syntax error at or near "Set(enable_tidscan aaa)
-IndexScan(t4)
-NestLoop(t4 t3)
-Leading(t2 t1 t4 t3)
-Set(enable_tidscan on)
-BitmapScan(t4)
-MergeJoin(t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan off)
-TidScan(t4)
-HashJoin(t4 t3)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict set hint.
-INFO: hint syntax error at or near "Set(enable_tidscan on)
-BitmapScan(t4)
-MergeJoin(t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan off)
-TidScan(t4)
-HashJoin(t4 t3)
-Leading(t4 t3 t2 t1)
-"
-DETAIL: Conflict set hint.
-LOG: pg_hint_plan:
-used hint:
-TidScan(t4)
-HashJoin(t3 t4)
-Leading(t4 t3 t2 t1)
-Set(enable_tidscan off)
-not used hint:
-duplication hint:
-SeqScan(t4)
-IndexScan(t4)
-BitmapScan(t4)
-NestLoop(t3 t4)
-MergeJoin(t3 t4)
-Leading(t2 t1 t4 t3)
-Leading(t1 t4 t3 t2)
-Set(enable_tidscan aaa)
-Set(enable_tidscan on)
-error hint:
-
- QUERY PLAN
------------------------------------------------------------
- Nested Loop
- -> Nested Loop
- Join Filter: (t3.c1 = t2.c1)
- -> Hash Join
- Hash Cond: (t3.c1 = t4.c1)
- -> Seq Scan on t3
- Filter: (ctid = '(1,1)'::tid)
- -> Hash
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Index Scan using t1_i1 on t1
- Index Cond: (c1 = t2.c1)
- Filter: (ctid = '(1,1)'::tid)
-(15 rows)
-
-----
----- No. A-10-2 restrict query type
-----
--- No. A-10-2-1
-EXPLAIN (COSTS false) SELECT * FROM s1.t1 FULL OUTER JOIN s1.t2 ON (t1.c1 = t2.c1);
- QUERY PLAN
-------------------------------
- Hash Full Join
- Hash Cond: (t1.c1 = t2.c1)
- -> Seq Scan on t1
- -> Hash
- -> Seq Scan on t2
-(5 rows)
-
-/*+NestLoop(t1 t2)*/
-EXPLAIN (COSTS true) SELECT * FROM s1.t1 FULL OUTER JOIN s1.t2 ON (t1.c1 = t2.c1);
-LOG: pg_hint_plan:
-used hint:
-NestLoop(t1 t2)
-not used hint:
-duplication hint:
-error hint:
-
- QUERY PLAN
---------------------------------------------------------------------------
- Hash Full Join (cost=10000000003.25..10000000024.00 rows=1000 width=29)
- Hash Cond: (t1.c1 = t2.c1)
- -> Seq Scan on t1 (cost=0.00..16.00 rows=1000 width=15)
- -> Hash (cost=2.00..2.00 rows=100 width=14)
- -> Seq Scan on t2 (cost=0.00..2.00 rows=100 width=14)
-(5 rows)
-
--- No. A-10-2-2
-EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c3 = 1;
- QUERY PLAN
----------------------------------
- Bitmap Heap Scan on t1
- Recheck Cond: (c3 = 1)
- -> Bitmap Index Scan on t1_i
- Index Cond: (c3 = 1)
-(4 rows)
-
-/*+IndexScan(t1 t1_i1)*/
-EXPLAIN (COSTS true) SELECT * FROM s1.t1 WHERE t1.c3 = 1;
-LOG: available indexes for IndexScan("t1"): t1_i1
-LOG: pg_hint_plan:
-used hint:
-IndexScan(t1 t1_i1)
-not used hint:
-duplication hint:
-error hint:
-
- QUERY PLAN
-------------------------------------------------------------------------
- Seq Scan on t1 (cost=10000000000.00..10000000018.50 rows=10 width=15)
- Filter: (c3 = 1)
-(2 rows)
-
--- No. A-10-2-3
-EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
- QUERY PLAN
-------------------------------
- Index Scan using t1_i1 on t1
- Index Cond: (c1 = 1)
-(2 rows)
-
-/*+TidScan(t1)*/
-EXPLAIN (COSTS true) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
-LOG: pg_hint_plan:
-used hint:
-TidScan(t1)
-not used hint:
-duplication hint:
-error hint:
-
- QUERY PLAN
------------------------------------------------------------------------
- Seq Scan on t1 (cost=10000000000.00..10000000018.50 rows=1 width=15)
- Filter: (c1 = 1)
-(2 rows)
-
-----
----- No. A-10-3 VIEW, RULE multi specified
-----
--- No. A-10-3-1
-EXPLAIN (COSTS false) SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
- QUERY PLAN
-----------------------------------
- Hash Join
- Hash Cond: (v1t1.c1 = v1t1.c1)
- -> Seq Scan on t1 v1t1
- -> Hash
- -> Seq Scan on t1 v1t1
-(5 rows)
-
-/*+Leading(v1t1 v1t1)HashJoin(v1t1 v1t1)BitmapScan(v1t1)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
-INFO: hint syntax error at or near "HashJoin(v1t1 v1t1)BitmapScan(v1t1)"
-DETAIL: Relation name "v1t1" is ambiguous.
-INFO: hint syntax error at or near "Leading(v1t1 v1t1)HashJoin(v1t1 v1t1)BitmapScan(v1t1)"
-DETAIL: Relation name "v1t1" is ambiguous.
-LOG: pg_hint_plan:
-used hint:
-BitmapScan(v1t1)
-not used hint:
-Leading(v1t1 v1t1)
-duplication hint:
-error hint:
-HashJoin(v1t1 v1t1)
-
- QUERY PLAN
-------------------------------------------
- Nested Loop
- -> Index Scan using t1_i1 on t1 v1t1
- -> Bitmap Heap Scan on t1 v1t1
- Recheck Cond: (c1 = v1t1.c1)
- -> Bitmap Index Scan on t1_i1
- Index Cond: (c1 = v1t1.c1)
-(6 rows)
-
--- No. A-10-3-2
-EXPLAIN (COSTS false) SELECT * FROM s1.v1 v1, s1.v1_ v2 WHERE v1.c1 = v2.c1;
- QUERY PLAN
------------------------------------
- Hash Join
- Hash Cond: (v1t1.c1 = v1t1_.c1)
- -> Seq Scan on t1 v1t1
- -> Hash
- -> Seq Scan on t1 v1t1_
-(5 rows)
-
-/*+Leading(v1t1 v1t1_)NestLoop(v1t1 v1t1_)SeqScan(v1t1)BitmapScan(v1t1_)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.v1 v1, s1.v1_ v2 WHERE v1.c1 = v2.c1;
-LOG: pg_hint_plan:
-used hint:
-SeqScan(v1t1)
-BitmapScan(v1t1_)
-NestLoop(v1t1 v1t1_)
-Leading(v1t1 v1t1_)
-not used hint:
-duplication hint:
-error hint:
-
- QUERY PLAN
-------------------------------------------
- Nested Loop
- -> Seq Scan on t1 v1t1
- -> Bitmap Heap Scan on t1 v1t1_
- Recheck Cond: (c1 = v1t1.c1)
- -> Bitmap Index Scan on t1_i1
- Index Cond: (c1 = v1t1.c1)
-(6 rows)
-
--- No. A-10-3-3
-EXPLAIN (COSTS false) SELECT * FROM s1.r4 t1, s1.r4 t2 WHERE t1.c1 = t2.c1;
- QUERY PLAN
-----------------------------------
- Hash Join
- Hash Cond: (r4t1.c1 = r4t1.c1)
- -> Seq Scan on t1 r4t1
- -> Hash
- -> Seq Scan on t1 r4t1
-(5 rows)
-
-/*+Leading(r4t1 r4t1)HashJoin(r4t1 r4t1)BitmapScan(r4t1)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.r4 t1, s1.r4 t2 WHERE t1.c1 = t2.c1;
-INFO: hint syntax error at or near "HashJoin(r4t1 r4t1)BitmapScan(r4t1)"
-DETAIL: Relation name "r4t1" is ambiguous.
-INFO: hint syntax error at or near "Leading(r4t1 r4t1)HashJoin(r4t1 r4t1)BitmapScan(r4t1)"
-DETAIL: Relation name "r4t1" is ambiguous.
-LOG: pg_hint_plan:
-used hint:
-BitmapScan(r4t1)
-not used hint:
-Leading(r4t1 r4t1)
-duplication hint:
-error hint:
-HashJoin(r4t1 r4t1)
-
- QUERY PLAN
-------------------------------------------
- Nested Loop
- -> Index Scan using t1_i1 on t1 r4t1
- -> Bitmap Heap Scan on t1 r4t1
- Recheck Cond: (c1 = r4t1.c1)
- -> Bitmap Index Scan on t1_i1
- Index Cond: (c1 = r4t1.c1)
-(6 rows)
-
--- No. A-10-3-4
-EXPLAIN (COSTS false) SELECT * FROM s1.r4 t1, s1.r5 t2 WHERE t1.c1 = t2.c1;
- QUERY PLAN
-----------------------------------
- Hash Join
- Hash Cond: (r4t1.c1 = r5t1.c1)
- -> Seq Scan on t1 r4t1
- -> Hash
- -> Seq Scan on t1 r5t1
-(5 rows)
-
-/*+Leading(r4t1 r5t1)NestLoop(r4t1 r5t1)SeqScan(r4t1)BitmapScan(r5t1)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.r4 t1, s1.r5 t2 WHERE t1.c1 = t2.c1;
-LOG: pg_hint_plan:
-used hint:
-SeqScan(r4t1)
-BitmapScan(r5t1)
-NestLoop(r4t1 r5t1)
-Leading(r4t1 r5t1)
-not used hint:
-duplication hint:
-error hint:
-
- QUERY PLAN
-------------------------------------------
- Nested Loop
- -> Seq Scan on t1 r4t1
- -> Bitmap Heap Scan on t1 r5t1
- Recheck Cond: (c1 = r4t1.c1)
- -> Bitmap Index Scan on t1_i1
- Index Cond: (c1 = r4t1.c1)
-(6 rows)
-
-----
----- No. A-11-1 psql command
-----
-SELECT count(*) FROM s1.t1 WHERE t1.c1 = 1;
- count
--------
- 1
-(1 row)
-
-/*+SeqScan(t1)*/
-SELECT count(*) FROM s1.t1 WHERE t1.c1 = 1;
-LOG: pg_hint_plan:
-used hint:
-SeqScan(t1)
-not used hint:
-duplication hint:
-error hint:
-
- count
--------
- 1
-(1 row)
-
--- No. A-11-1-4
-\set FETCH_COUNT 0
-/*+SeqScan(t1)*/
-SELECT count(*) FROM s1.t1 WHERE t1.c1 = 1;
-LOG: pg_hint_plan:
-used hint:
-SeqScan(t1)
-not used hint:
-duplication hint:
-error hint:
-
- count
--------
- 1
-(1 row)
-
--- No. A-11-1-5
-\set FETCH_COUNT 1
-/*+SeqScan(t1)*/
-SELECT count(*) FROM s1.t1 WHERE t1.c1 = 1;
- count
--------
- 1
-(1 row)
-
-\unset FETCH_COUNT
-----
----- No. A-11-4 PL/pgSQL function
-----
--- No. A-11-4-1
-CREATE OR REPLACE FUNCTION f1() RETURNS SETOF text LANGUAGE plpgsql AS $$
-DECLARE
- r text;
-BEGIN
- FOR r IN EXPLAIN SELECT c4 FROM s1.t1 WHERE t1.c1 = 1
- LOOP
- RETURN NEXT r; -- return current row of SELECT
- END LOOP;
- RETURN;
-END
-$$;
-SELECT f1();
- f1
-----------------------------------------------------------------
- Index Scan using t1_i1 on t1 (cost=0.00..8.27 rows=1 width=3)
- Index Cond: (c1 = 1)
-(2 rows)
-
-/*+SeqScan(t1)*/
-SELECT f1();
-LOG: pg_hint_plan:
-used hint:
-not used hint:
-SeqScan(t1)
-duplication hint:
-error hint:
-
-LOG: pg_hint_plan:
-used hint:
-SeqScan(t1)
-not used hint:
-duplication hint:
-error hint:
-
-CONTEXT: PL/pgSQL function "f1" line 5 at FOR over SELECT rows
- f1
----------------------------------------------------
- Seq Scan on t1 (cost=0.00..18.50 rows=1 width=3)
- Filter: (c1 = 1)
-(2 rows)
-
--- No. A-11-4-2
-/*+SeqScan(t1)*/CREATE OR REPLACE FUNCTION f1() RETURNS SETOF text LANGUAGE plpgsql AS $$
-DECLARE
- r text;
-BEGIN
- /*+SeqScan(t1)*/FOR r IN EXPLAIN /*+SeqScan(t1)*/SELECT c4 FROM s1.t1 WHERE t1.c1 = 1
- LOOP
- /*+SeqScan(t1)*/RETURN NEXT r; -- return current row of SELECT
- END LOOP;
- /*+SeqScan(t1)*/RETURN;
-END
-$$;
-SELECT f1();
- f1
-----------------------------------------------------------------
- Index Scan using t1_i1 on t1 (cost=0.00..8.27 rows=1 width=3)
- Index Cond: (c1 = 1)
-(2 rows)
-
-----
---- No. A-12-1 reset of global variable of core at the error
---- No. A-12-2 reset of global variable of original at the error
----