OSDN Git Service

Don't reset plpgsql nest level at every command end
[pghintplan/pg_hint_plan.git] / sql / pg_hint_plan.sql
1 SET search_path TO public;
2 SET client_min_messages TO log;
3 \set SHOW_CONTEXT always
4
5 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
6 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.val = t2.val;
7
8 LOAD 'pg_hint_plan';
9 SET pg_hint_plan.debug_print TO on;
10
11 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
12 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.val = t2.val;
13
14 /*+ Test (t1 t2) */
15 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
16 SET pg_hint_plan.enable_hint TO off;
17 /*+ Test (t1 t2) */
18 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
19 SET pg_hint_plan.enable_hint TO on;
20
21 /*Set(enable_indexscan off)*/
22 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
23 --+Set(enable_indexscan off)
24 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
25 /*+Set(enable_indexscan off) /* nest comment */ */
26 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
27 /*+Set(enable_indexscan off)*/
28 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
29 EXPLAIN (COSTS false) /*+Set(enable_indexscan off)*/
30  SELECT * FROM t1, t2 WHERE t1.id = t2.id;
31 /*+ Set(enable_indexscan off) Set(enable_hashjoin off) */
32 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
33
34 /*+      Set     (       enable_indexscan        off     )       */
35 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
36 /*+      
37                 Set      
38                 (        
39                 enable_indexscan         
40                 off      
41                 )        
42                 */              
43 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
44 /*+ Set(enable_indexscan off)Set(enable_nestloop off)Set(enable_mergejoin off)          
45                 Set(enable_seqscan off)
46                 */
47 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
48 /*+Set(work_mem "1M")*/
49 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
50 /*+Set(work_mem "1MB")*/
51 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
52 /*+Set(work_mem TO "1MB")*/
53 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
54
55 /*+SeqScan(t1 t2)*/
56 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
57 /*+SeqScan(t1)*/
58 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
59 /*+SeqScan(t1)IndexScan(t2)*/
60 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
61 /*+BitmapScan(t2)*/
62 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
63 /*+BitmapScan(t2)NoSeqScan(t1)*/
64 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
65 /*+NoIndexScan(t1)*/
66 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
67
68 /*+NoBitmapScan(t1)*/
69 EXPLAIN (COSTS false) SELECT * FROM t1, t4 WHERE t1.val < 10;
70 /*+TidScan(t4)*/
71 EXPLAIN (COSTS false) SELECT * FROM t3, t4 WHERE t3.id = t4.id AND t4.ctid = '(1,1)';
72 /*+NoTidScan(t1)*/
73 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)';
74
75 /*+HashJoin(t1 t2)*/
76 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
77 /*+NestLoop(t1 t2)*/
78 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
79 /*+NoMergeJoin(t1 t2)*/
80 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
81
82 /*+MergeJoin(t1 t3)*/
83 EXPLAIN (COSTS false) SELECT * FROM t1, t3 WHERE t1.val = t3.val;
84 /*+NestLoop(t1 t3)*/
85 EXPLAIN (COSTS false) SELECT * FROM t1, t3 WHERE t1.val = t3.val;
86 /*+NoHashJoin(t1 t3)*/
87 EXPLAIN (COSTS false) SELECT * FROM t1, t3 WHERE t1.val = t3.val;
88
89 /*+MergeJoin(t4 t1 t2 t3)*/
90 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
91 /*+HashJoin(t3 t4 t1 t2)*/
92 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
93 /*+NestLoop(t2 t3 t4 t1) IndexScan(t3)*/
94 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
95 /*+NoNestLoop(t4 t1 t3 t2)*/
96 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
97
98 /*+Leading( */
99 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
100 /*+Leading( )*/
101 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
102 /*+Leading( t3 )*/
103 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
104 /*+Leading( t3 t4 )*/
105 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
106 /*+Leading(t3 t4 t1)*/
107 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
108 /*+Leading(t3 t4 t1 t2)*/
109 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
110 /*+Leading(t3 t4 t1 t2 t1)*/
111 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
112 /*+Leading(t3 t4 t4)*/
113 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
114
115 EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) WHERE t1.id = t2.id;
116 /*+HashJoin(t1 t2)*/
117 EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) WHERE t1.id = t2.id;
118 /*+HashJoin(t1 *VALUES*)*/
119 EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) WHERE t1.id = t2.id;
120 /*+HashJoin(t1 *VALUES*) IndexScan(t1) IndexScan(*VALUES*)*/
121 EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) WHERE t1.id = t2.id;
122
123 -- single table scan hint test
124 EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10);
125 /*+BitmapScan(v_1)*/
126 EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10);
127 /*+BitmapScan(v_2)*/
128 EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10);
129 /*+BitmapScan(t1)*/
130 EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10);
131 /*+BitmapScan(v_1)BitmapScan(v_2)*/
132 EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10);
133 /*+BitmapScan(v_1)BitmapScan(t1)*/
134 EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10);
135 /*+BitmapScan(v_2)BitmapScan(t1)*/
136 EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10);
137 /*+BitmapScan(v_1)BitmapScan(v_2)BitmapScan(t1)*/
138 EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10);
139
140 -- full scan hint pattern test
141 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
142 /*+SeqScan(t1)*/
143 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
144 /*+IndexScan(t1)*/
145 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
146 /*+BitmapScan(t1)*/
147 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
148 /*+TidScan(t1)*/
149 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
150 /*+NoSeqScan(t1)*/
151 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
152 /*+NoIndexScan(t1)*/
153 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
154 /*+NoBitmapScan(t1)*/
155 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
156 /*+NoTidScan(t1)*/
157 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
158
159 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
160 /*+SeqScan(t1)*/
161 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
162 /*+SeqScan(t2)*/
163 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
164 /*+SeqScan(t1) SeqScan(t2)*/
165 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
166 /*+SeqScan(t1) IndexScan(t2)*/
167 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
168 /*+SeqScan(t1) BitmapScan(t2)*/
169 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
170 /*+SeqScan(t1) TidScan(t2)*/
171 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
172 /*+SeqScan(t1) NoSeqScan(t2)*/
173 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
174 /*+SeqScan(t1) NoIndexScan(t2)*/
175 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
176 /*+SeqScan(t1) NoBitmapScan(t2)*/
177 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
178 /*+SeqScan(t1) NoTidScan(t2)*/
179 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
180
181 /*+IndexScan(t1)*/
182 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
183 /*+IndexScan(t2)*/
184 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
185 /*+IndexScan(t1) SeqScan(t2)*/
186 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
187 /*+IndexScan(t1) IndexScan(t2)*/
188 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
189 /*+IndexScan(t1) BitmapScan(t2)*/
190 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
191 /*+IndexScan(t1) TidScan(t2)*/
192 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
193 /*+IndexScan(t1) NoSeqScan(t2)*/
194 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
195 /*+IndexScan(t1) NoIndexScan(t2)*/
196 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
197 /*+IndexScan(t1) NoBitmapScan(t2)*/
198 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
199 /*+IndexScan(t1) NoTidScan(t2)*/
200 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
201
202 /*+BitmapScan(t1)*/
203 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
204 /*+BitmapScan(t2)*/
205 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
206 /*+BitmapScan(t2)*/
207 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
208 /*+BitmapScan(t1) SeqScan(t2)*/
209 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
210 /*+BitmapScan(t1) IndexScan(t2)*/
211 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
212 /*+BitmapScan(t1) BitmapScan(t2)*/
213 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
214 /*+BitmapScan(t1) TidScan(t2)*/
215 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
216 /*+BitmapScan(t1) NoSeqScan(t2)*/
217 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
218 /*+BitmapScan(t1) NoIndexScan(t2)*/
219 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
220 /*+BitmapScan(t1) NoBitmapScan(t2)*/
221 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
222 /*+BitmapScan(t1) NoTidScan(t2)*/
223 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
224
225 /*+TidScan(t1)*/
226 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
227 /*+TidScan(t2)*/
228 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
229 /*+TidScan(t1) SeqScan(t2)*/
230 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
231 /*+TidScan(t1) IndexScan(t2)*/
232 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
233 /*+TidScan(t1) BitmapScan(t2)*/
234 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
235 /*+TidScan(t1) TidScan(t2)*/
236 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
237 /*+TidScan(t1) NoSeqScan(t2)*/
238 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
239 /*+TidScan(t1) NoIndexScan(t2)*/
240 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
241 /*+TidScan(t1) NoBitmapScan(t2)*/
242 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
243 /*+TidScan(t1) NoTidScan(t2)*/
244 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
245
246 /*+NoSeqScan(t1)*/
247 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
248 /*+NoSeqScan(t2)*/
249 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
250 /*+NoSeqScan(t1) SeqScan(t2)*/
251 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
252 /*+NoSeqScan(t1) IndexScan(t2)*/
253 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
254 /*+NoSeqScan(t1) BitmapScan(t2)*/
255 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
256 /*+NoSeqScan(t1) TidScan(t2)*/
257 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
258 /*+NoSeqScan(t1) NoSeqScan(t2)*/
259 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
260 /*+NoSeqScan(t1) NoIndexScan(t2)*/
261 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
262 /*+NoSeqScan(t1) NoBitmapScan(t2)*/
263 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
264 /*+NoSeqScan(t1) NoTidScan(t2)*/
265 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
266
267 /*+NoIndexScan(t1)*/
268 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
269 /*+NoIndexScan(t2)*/
270 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
271 /*+NoIndexScan(t1) SeqScan(t2)*/
272 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
273 /*+NoIndexScan(t1) IndexScan(t2)*/
274 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
275 /*+NoIndexScan(t1) BitmapScan(t2)*/
276 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
277 /*+NoIndexScan(t1) TidScan(t2)*/
278 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
279 /*+NoIndexScan(t1) NoSeqScan(t2)*/
280 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
281 /*+NoIndexScan(t1) NoIndexScan(t2)*/
282 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
283 /*+NoIndexScan(t1) NoBitmapScan(t2)*/
284 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
285 /*+NoIndexScan(t1) NoTidScan(t2)*/
286 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
287
288 /*+NoBitmapScan(t1)*/
289 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
290 /*+NoBitmapScan(t2)*/
291 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
292 /*+NoBitmapScan(t1) SeqScan(t2)*/
293 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
294 /*+NoBitmapScan(t1) IndexScan(t2)*/
295 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
296 /*+NoBitmapScan(t1) BitmapScan(t2)*/
297 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
298 /*+NoBitmapScan(t1) TidScan(t2)*/
299 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
300 /*+NoBitmapScan(t1) NoSeqScan(t2)*/
301 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
302 /*+NoBitmapScan(t1) NoIndexScan(t2)*/
303 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
304 /*+NoBitmapScan(t1) NoBitmapScan(t2)*/
305 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
306 /*+NoBitmapScan(t1) NoTidScan(t2)*/
307 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
308
309 /*+NoTidScan(t1)*/
310 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
311 /*+NoTidScan(t2)*/
312 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
313 /*+NoTidScan(t1) SeqScan(t2)*/
314 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
315 /*+NoTidScan(t1) IndexScan(t2)*/
316 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
317 /*+NoTidScan(t1) BitmapScan(t2)*/
318 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
319 /*+NoTidScan(t1) TidScan(t2)*/
320 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
321 /*+NoTidScan(t1) NoSeqScan(t2)*/
322 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
323 /*+NoTidScan(t1) NoIndexScan(t2)*/
324 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
325 /*+NoTidScan(t1) NoBitmapScan(t2)*/
326 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
327 /*+NoTidScan(t1) NoTidScan(t2)*/
328 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
329
330 -- additional test
331 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)' AND t1.id < 10 AND t2.id < 10;
332 /*+BitmapScan(t1) BitmapScan(t2)*/
333 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)' AND t1.id < 10 AND t2.id < 10;
334
335 -- outer join test
336 EXPLAIN (COSTS false) SELECT * FROM t1 FULL OUTER JOIN  t2 ON (t1.id = t2.id);
337 /*+MergeJoin(t1 t2)*/
338 EXPLAIN (COSTS false) SELECT * FROM t1 FULL OUTER JOIN  t2 ON (t1.id = t2.id);
339 -- Cannot work
340 /*+NestLoop(t1 t2)*/
341 EXPLAIN (COSTS false) SELECT * FROM t1 FULL OUTER JOIN  t2 ON (t1.id = t2.id);
342
343 -- inheritance tables test
344 SET constraint_exclusion TO off;
345 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
346 SET constraint_exclusion TO on;
347 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
348 SET constraint_exclusion TO off;
349 /*+SeqScan(p1)*/
350 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
351 /*+IndexScan(p1)*/
352 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
353 /*+BitmapScan(p1)*/
354 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
355 /*+TidScan(p1)*/
356 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
357 SET constraint_exclusion TO on;
358 /*+SeqScan(p1)*/
359 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
360 /*+IndexScan(p1)*/
361 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
362 /*+BitmapScan(p1)*/
363 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
364 /*+TidScan(p1)*/
365 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
366
367 SET constraint_exclusion TO off;
368 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
369 SET constraint_exclusion TO on;
370 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
371 SET constraint_exclusion TO off;
372 /*+SeqScan(p1)*/
373 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
374 /*+IndexScan(p1)*/
375 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
376 /*+BitmapScan(p1)*/
377 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
378 /*+TidScan(p1)*/
379 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
380 /*+NestLoop(p1 t1)*/
381 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
382 /*+MergeJoin(p1 t1)*/
383 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
384 /*+HashJoin(p1 t1)*/
385 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
386 SET constraint_exclusion TO on;
387 /*+SeqScan(p1)*/
388 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
389 /*+IndexScan(p1)*/
390 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
391 /*+BitmapScan(p1)*/
392 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
393 /*+TidScan(p1)*/
394 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
395 /*+NestLoop(p1 t1)*/
396 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
397 /*+MergeJoin(p1 t1)*/
398 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
399 /*+HashJoin(p1 t1)*/
400 EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
401
402 SET constraint_exclusion TO off;
403 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
404 SET constraint_exclusion TO on;
405 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
406 SET constraint_exclusion TO off;
407 /*+SeqScan(p1)*/
408 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
409 /*+IndexScan(p1)*/
410 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
411 /*+BitmapScan(p1)*/
412 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
413 /*+TidScan(p1)*/
414 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
415 /*+NestLoop(p1 t1)*/
416 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
417 /*+MergeJoin(p1 t1)*/
418 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
419 /*+HashJoin(p1 t1)*/
420 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
421 SET constraint_exclusion TO on;
422 /*+SeqScan(p1)*/
423 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
424 /*+IndexScan(p1)*/
425 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
426 /*+BitmapScan(p1)*/
427 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
428 /*+TidScan(p1)*/
429 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
430 /*+NestLoop(p1 t1)*/
431 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
432 /*+MergeJoin(p1 t1)*/
433 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
434 /*+HashJoin(p1 t1)*/
435 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
436
437 SET constraint_exclusion TO off;
438 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
439 SET constraint_exclusion TO on;
440 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
441 SET constraint_exclusion TO off;
442 /*+SeqScan(p1)*/
443 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
444 /*+IndexScan(p1)*/
445 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
446 /*+BitmapScan(p1)*/
447 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
448 /*+TidScan(p1)*/
449 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
450 SET constraint_exclusion TO on;
451 /*+SeqScan(p1)*/
452 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
453 /*+IndexScan(p1)*/
454 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
455 /*+BitmapScan(p1)*/
456 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
457 /*+TidScan(p1)*/
458 EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
459
460 -- quote test
461 /*+SeqScan("""t1 )      ")IndexScan("t  2 """)HashJoin("""t1 )  "T3"t   2 """)Leading("""t1 )   "T3"t   2 """)Set(application_name"a    a       a""     a       A")*/
462 EXPLAIN (COSTS false) SELECT * FROM t1 """t1 )  ", t2 "t        2 """, t3 "T3" WHERE """t1 )    ".id = "t       2 """.id AND """t1 )    ".id = "T3".id;
463
464 -- duplicate hint test
465 /*+SeqScan(t1)SeqScan(t2)IndexScan(t1)IndexScan(t2)BitmapScan(t1)BitmapScan(t2)TidScan(t1)TidScan(t2)HashJoin(t1 t2)NestLoop(t2 t1)MergeJoin(t1 t2)Leading(t1 t2)Leading(t2 t1)Set(enable_seqscan off)Set(enable_mergejoin on)Set(enable_seqscan on)*/
466 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
467
468 -- sub query Leading hint test
469 SET from_collapse_limit TO 100;
470 SET geqo_threshold TO 100;
471 EXPLAIN (COSTS false)
472 WITH c1_1(id) AS (
473 SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id
474 )
475 SELECT t1_1.id, (
476 SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id
477 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
478 SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id
479 ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = (
480 SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id 
481 );
482 /*+HashJoin(t1_1 t3_1)MergeJoin(t1_3 t3_3)NestLoop(t1_2 t2_2)NestLoop(t1_4 t2_4)NestLoop(t1_5 t2_5)*/
483 EXPLAIN (COSTS false)
484 WITH c1_1(id) AS (
485 SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id
486 )
487 SELECT t1_1.id, (
488 SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id
489 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
490 SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id
491 ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = (
492 SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id 
493 );
494 /*+HashJoin(t1_1 t3_1)MergeJoin(t1_3 t3_3)NestLoop(t1_2 t2_2)NestLoop(t1_4 t2_4)NestLoop(t1_5 t2_5)Leading(a t1_1 t1_2 t1_4 t1_5)*/
495 EXPLAIN (COSTS false)
496 WITH c1_1(id) AS (
497 SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id
498 )
499 SELECT t1_1.id, (
500 SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id
501 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
502 SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id
503 ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = (
504 SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id 
505 );
506 /*+HashJoin(t1_1 t3_1)MergeJoin(t1_3 t3_3)NestLoop(t1_2 t2_2)NestLoop(t1_4 t2_4)NestLoop(t1_5 t2_5)Leading(a t3_2 t3_5 t2_2 c1_1 t3_4 t3_3 t2_3 t2_4 t1_3 t2_5 t1_2 t3_1 t1_4 t2_1 t1_5 t1_1)*/
507 EXPLAIN (COSTS false)
508 WITH c1_1(id) AS (
509 SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id
510 )
511 SELECT t1_1.id, (
512 SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id
513 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
514 SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id
515 ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = (
516 SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id 
517 );
518 /*+HashJoin(t1_1 t3_1)MergeJoin(t1_3 t3_3)NestLoop(t1_2 t2_2)NestLoop(t1_4 t2_4)NestLoop(t1_5 t2_5)Leading(t3_5 t2_5 t1_5)Leading(t3_2 t2_2 t1_2)Leading(t3_4 t2_4 t1_4)Leading(c1_1 t3_3 t2_3 t1_3 t3_1 t2_1 t1_1)*/
519 EXPLAIN (COSTS false)
520 WITH c1_1(id) AS (
521 SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id
522 )
523 SELECT t1_1.id, (
524 SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id
525 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
526 SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id
527 ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = (
528 SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id 
529 );
530
531 SET from_collapse_limit TO 1;
532 EXPLAIN (COSTS false)
533 WITH c1_1(id) AS (
534 SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id
535 )
536 SELECT t1_1.id, (
537 SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id
538 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
539 SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id
540 ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = (
541 SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id 
542 );
543 /*+HashJoin(t1_1 t3_1)MergeJoin(t1_3 t3_3)NestLoop(t1_2 t2_2)NestLoop(t1_4 t2_4)NestLoop(t1_5 t2_5)*/
544 EXPLAIN (COSTS false)
545 WITH c1_1(id) AS (
546 SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id
547 )
548 SELECT t1_1.id, (
549 SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id
550 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
551 SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id
552 ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = (
553 SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id 
554 );
555 /*+HashJoin(t1_1 t3_1)MergeJoin(t1_3 t3_3)NestLoop(t1_2 t2_2)NestLoop(t1_4 t2_4)NestLoop(t1_5 t2_5)Leading(a t1_1 t1_2 t1_4 t1_5)*/
556 EXPLAIN (COSTS false)
557 WITH c1_1(id) AS (
558 SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id
559 )
560 SELECT t1_1.id, (
561 SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id
562 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
563 SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id
564 ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = (
565 SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id 
566 );
567 /*+HashJoin(t1_1 t3_1)MergeJoin(t1_3 t3_3)NestLoop(t1_2 t2_2)NestLoop(t1_4 t2_4)NestLoop(t1_5 t2_5)Leading(a t3_2 t3_5 t2_2 c1_1 t3_4 t3_3 t2_3 t2_4 t1_3 t2_5 t1_2 t3_1 t1_4 t2_1 t1_5 t1_1)*/
568 EXPLAIN (COSTS false)
569 WITH c1_1(id) AS (
570 SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id
571 )
572 SELECT t1_1.id, (
573 SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id
574 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
575 SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id
576 ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = (
577 SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id 
578 );
579 /*+HashJoin(t1_1 t3_1)MergeJoin(t1_3 t3_3)NestLoop(t1_2 t2_2)NestLoop(t1_4 t2_4)NestLoop(t1_5 t2_5)Leading(t3_5 t2_5 t1_5)Leading(t3_2 t2_2 t1_2)Leading(t3_4 t2_4 t1_4)Leading(c1_1 t3_3 t2_3 t1_3 t3_1 t2_1 t1_1)*/
580 EXPLAIN (COSTS false)
581 WITH c1_1(id) AS (
582 SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id
583 )
584 SELECT t1_1.id, (
585 SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id
586 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
587 SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id
588 ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = (
589 SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id 
590 );
591
592 -- ambigous error
593 EXPLAIN (COSTS false) SELECT * FROM t1, s0.t1, t2 WHERE public.t1.id = s0.t1.id AND public.t1.id = t2.id;
594 /*+NestLoop(t1 t2)*/
595 EXPLAIN (COSTS false) SELECT * FROM t1, s0.t1, t2 WHERE public.t1.id = s0.t1.id AND public.t1.id = t2.id;
596 /*+Leading(t1 t2 t1)*/
597 EXPLAIN (COSTS false) SELECT * FROM t1, s0.t1, t2 WHERE public.t1.id = s0.t1.id AND public.t1.id = t2.id;
598
599 -- identifier length test
600 EXPLAIN (COSTS false) SELECT * FROM t1 "123456789012345678901234567890123456789012345678901234567890123" JOIN t2 ON ("123456789012345678901234567890123456789012345678901234567890123".id = t2.id) JOIN t3 ON (t2.id = t3.id);
601 /*+
602 Leading(123456789012345678901234567890123456789012345678901234567890123 t2 t3)
603 SeqScan(123456789012345678901234567890123456789012345678901234567890123)
604 MergeJoin(123456789012345678901234567890123456789012345678901234567890123 t2)
605 Set(123456789012345678901234567890123456789012345678901234567890123 1)
606 */
607 EXPLAIN (COSTS false) SELECT * FROM t1 "123456789012345678901234567890123456789012345678901234567890123" JOIN t2 ON ("123456789012345678901234567890123456789012345678901234567890123".id = t2.id) JOIN t3 ON (t2.id = t3.id);
608 /*+
609 Leading(1234567890123456789012345678901234567890123456789012345678901234 t2 t3)
610 SeqScan(1234567890123456789012345678901234567890123456789012345678901234)
611 MergeJoin(1234567890123456789012345678901234567890123456789012345678901234 t2)
612 Set(1234567890123456789012345678901234567890123456789012345678901234 1)
613 Set(cursor_tuple_fraction 0.1234567890123456789012345678901234567890123456789012345678901234)
614 */
615 EXPLAIN (COSTS false) SELECT * FROM t1 "1234567890123456789012345678901234567890123456789012345678901234" JOIN t2 ON ("1234567890123456789012345678901234567890123456789012345678901234".id = t2.id) JOIN t3 ON (t2.id = t3.id);
616 SET "123456789012345678901234567890123456789012345678901234567890123" TO 1;
617 SET "1234567890123456789012345678901234567890123456789012345678901234" TO 1;
618 SET cursor_tuple_fraction TO 1234567890123456789012345678901234567890123456789012345678901234;
619
620 -- multi error
621 /*+ Set(enable_seqscan 100)Set(seq_page_cost on)*/
622 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
623
624 -- debug log of candidate index to use IndexScan
625 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
626 /*+IndexScan(t5 t5_id2)*/
627 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
628 /*+IndexScan(t5 no_exist)*/
629 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
630 /*+IndexScan(t5 t5_id1 t5_id2)*/
631 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
632 /*+IndexScan(t5 no_exist t5_id2)*/
633 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
634 /*+IndexScan(t5 no_exist5 no_exist2)*/
635 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
636
637 -- outer inner
638 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
639
640 /*+Leading((t1))*/
641 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
642 /*+Leading((t1 t2))*/
643 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
644 /*+Leading((t1 t2 t3))*/
645 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
646
647 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.id < 10;
648 /*+Leading((t1 t2))*/
649 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.id < 10;
650
651 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
652 /*+Leading(((t1 t2) t3))*/
653 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
654
655 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10;
656 /*+Leading((((t1 t2) t3) t4))*/
657 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10;
658
659 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
660 /*+Leading(((t1 t2) t3))*/
661 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
662 /*+Leading((t1 (t2 t3)))*/
663 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
664
665 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10;
666 /*+Leading(((t1 t2) (t3 t4)))*/
667 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10;
668
669 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < ( SELECT t1_2.id FROM t1 t1_2, t2 t2_2 WHERE t1_2.id = t2_2.id AND t2_2.val > 100 ORDER BY t1_2.id LIMIT 1);
670 /*+Leading(((t1 t2) t3)) Leading(((t3 t1) t2))*/
671 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t1.val = t3.val AND t1.id < ( SELECT t1_2.id FROM t1 t1_2, t2 t2_2 WHERE t1_2.id = t2_2.id AND t2_2.val > 100 ORDER BY t1_2.id LIMIT 1);
672 /*+Leading(((t1 t2) t3)) Leading((t1_2 t2_2))*/
673 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < ( SELECT t1_2.id FROM t1 t1_2, t2 t2_2 WHERE t1_2.id = t2_2.id AND t2_2.val > 100 ORDER BY t1_2.id LIMIT 1);
674 /*+Leading(((((t1 t2) t3) t1_2) t2_2))*/
675 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < ( SELECT t1_2.id FROM t1 t1_2, t2 t2_2 WHERE t1_2.id = t2_2.id AND t2_2.val > 100 ORDER BY t1_2.id LIMIT 1);
676
677 -- Specified outer/inner leading hint and join method hint at the same time
678 /*+Leading(((t1 t2) t3))*/
679 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
680 /*+Leading(((t1 t2) t3)) MergeJoin(t1 t2)*/
681 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
682 /*+Leading(((t1 t2) t3)) MergeJoin(t1 t2 t3)*/
683 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
684 /*+Leading(((t1 t2) t3)) MergeJoin(t1 t3)*/
685 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
686
687 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10;
688 /*+Leading(((t1 t2) t3)) MergeJoin(t3 t4)*/
689 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10;
690 /*+Leading(((t1 t2) t3)) MergeJoin(t1 t2 t3 t4)*/
691 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10;
692
693 /*+ Leading ( ( t1 ( t2 t3 ) ) ) */
694 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
695 /*+Leading((t1(t2 t3)))*/
696 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
697 /*+Leading(("t1(t2" "t3)"))*/
698 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
699 /*+ Leading ( ( ( t1 t2 ) t3 ) ) */
700 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
701 /*+Leading(((t1 t2)t3))*/
702 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
703 /*+Leading(("(t1" "t2)t3"))*/
704 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
705
706 /*+Leading((t1(t2(t3(t4 t5)))))*/
707 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id;
708 /*+Leading((t5(t4(t3(t2 t1)))))*/
709 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id;
710 /*+Leading(((((t1 t2)t3)t4)t5))*/
711 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id;
712 /*+Leading(((((t5 t4)t3)t2)t1))*/
713 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id;
714 /*+Leading(((t1 t2)(t3(t4 t5))))*/
715 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id;
716 /*+Leading(((t5 t4)(t3(t2 t1))))*/
717 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id;
718 /*+Leading((((t1 t2)t3)(t4 t5)))*/
719 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id;
720 /*+Leading((((t5 t4)t3)(t2 t1)))*/
721 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id;
722
723 -- inherite table test to specify the index's name
724 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
725 /*+IndexScan(p2 p2_pkey)*/
726 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
727 /*+IndexScan(p2 p2_id_val_idx)*/
728 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
729 /*+IndexScan(p2 p2_val_id_idx)*/
730 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
731
732 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
733
734 -- Inhibit parallel exection to avoid interfaring the hint
735 set max_parallel_workers_per_gather to 0;
736 /*+ IndexScan(p2 p2_val)*/
737 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
738 /*+IndexScan(p2 p2_pkey)*/
739 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
740 /*+IndexScan(p2 p2_id2_val)*/
741 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
742 /*+IndexScan(p2 p2_val2_id)*/
743 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
744
745 /*+IndexScan(p2 p2_pkey)*/
746 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
747 /*+IndexScan(p2 p2_c1_id_val_idx)*/
748 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
749 /*+IndexScan(p2 no_exist)*/
750 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
751 /*+IndexScan(p2 p2_pkey p2_c1_id_val_idx)*/
752 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
753 /*+IndexScan(p2 p2_pkey no_exist)*/
754 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
755 /*+IndexScan(p2 p2_c1_id_val_idx no_exist)*/
756 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
757 /*+IndexScan(p2 p2_pkey p2_c1_id_val_idx no_exist)*/
758 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
759
760 /*+IndexScan(p2 p2_val_idx)*/
761 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
762 /*+IndexScan(p2 p2_expr)*/
763 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
764 /*+IndexScan(p2 p2_val_idx6)*/
765 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
766 /*+IndexScan(p2 p2_val_idx p2_val_idx6)*/
767 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
768
769 -- regular expression
770 -- ordinary table
771 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
772 /*+ IndexScanRegexp(t5 t5_[^i].*)*/
773 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
774 /*+ IndexScanRegexp(t5 t5_id[0-9].*)*/
775 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
776 /*+ IndexScanRegexp(t5 t5[^_].*)*/
777 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
778 /*+ IndexScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/
779 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
780 /*+ IndexScan(t5 t5_id[0-9].*)*/
781 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
782 /*+ IndexOnlyScanRegexp(t5 t5_[^i].*)*/
783 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
784 /*+ IndexOnlyScanRegexp(t5 t5_id[0-9].*)*/
785 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
786 /*+ IndexOnlyScanRegexp(t5 t5[^_].*)*/
787 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
788 /*+ IndexOnlyScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/
789 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
790 /*+ IndexOnlyScan(t5 t5_id[0-9].*)*/
791 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
792 /*+ BitmapScanRegexp(t5 t5_[^i].*)*/
793 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
794 /*+ BitmapScanRegexp(t5 t5_id[0-9].*)*/
795 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
796 /*+ BitmapScanRegexp(t5 t5[^_].*)*/
797 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
798 /*+ BitmapScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/
799 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
800 /*+ BitmapScan(t5 t5_id[0-9].*)*/
801 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
802
803 -- Inheritance
804 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
805 /*+ IndexScanRegexp(p1 p1_.*[^0-9]$)*/
806 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
807 /*+ IndexScanRegexp(p1 p1_.*val2.*)*/
808 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
809 /*+ IndexScanRegexp(p1 p1[^_].*)*/
810 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
811 /*+ IndexScan(p1 p1_.*val2.*)*/
812 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
813 /*+ IndexOnlyScanRegexp(p1 p1_.*[^0-9]$)*/
814 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
815 /*+ IndexOnlyScanRegexp(p1 p1_.*val2.*)*/
816 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
817 /*+ IndexOnlyScanRegexp(p1 p1[^_].*)*/
818 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
819 /*+ IndexOnlyScan(p1 p1_.*val2.*)*/
820 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
821 /*+ BitmapScanRegexp(p1 p1_.*[^0-9]$)*/
822 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
823 /*+ BitmapScanRegexp(p1 p1_.*val2.*)*/
824 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
825 /*+ BitmapScanRegexp(p1 p1[^_].*)*/
826 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
827 /*+ BitmapScan(p1 p1_.*val2.*)*/
828 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
829
830 -- search from hint table
831 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints) VALUES ('EXPLAIN (COSTS false) SELECT * FROM t1 WHERE t1.id = ?;', '', 'SeqScan(t1)');
832 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints) VALUES ('EXPLAIN (COSTS false) SELECT id FROM t1 WHERE t1.id = ?;', '', 'IndexScan(t1)');
833 INSERT INTO hint_plan.hints (norm_query_string, application_name, hints) VALUES ('EXPLAIN SELECT * FROM t1 WHERE t1.id = ?;', '', 'BitmapScan(t1)');
834 SELECT * FROM hint_plan.hints ORDER BY id;
835 SET pg_hint_plan.enable_hint_table = on;
836 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE t1.id = 1;
837 SET pg_hint_plan.enable_hint_table = off;
838 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE t1.id = 1;
839 TRUNCATE hint_plan.hints;
840 VACUUM ANALYZE hint_plan.hints;
841
842 -- plpgsql test
843 EXPLAIN (COSTS false) SELECT id FROM t1 WHERE t1.id = 1;
844
845 -- static function
846 CREATE FUNCTION testfunc() RETURNS RECORD AS $$
847 DECLARE
848   ret record;
849 BEGIN
850   SELECT /*+ SeqScan(t1) */ * INTO ret FROM t1 LIMIT 1;
851   RETURN ret;
852 END;
853 $$ LANGUAGE plpgsql;
854 SELECT testfunc();
855
856 -- dynamic function
857 DROP FUNCTION testfunc();
858 CREATE FUNCTION testfunc() RETURNS void AS $$
859 BEGIN
860   EXECUTE format('/*+ SeqScan(t1) */ SELECT * FROM t1');
861 END;
862 $$ LANGUAGE plpgsql;
863 SELECT testfunc();
864
865 -- This should not use SeqScan(t1)
866 /*+ IndexScan(t1) */ SELECT * from t1 LIMIT 1;
867
868 -- Perform
869 DROP FUNCTION testfunc();
870 CREATE FUNCTION testfunc() RETURNS void AS $$
871 BEGIN
872   PERFORM  1, /*+ SeqScan(t1) */ * from t1;
873 END;
874 $$ LANGUAGE plpgsql;
875 SELECT testfunc();
876
877 -- FOR loop
878 DROP FUNCTION testfunc();
879 CREATE FUNCTION testfunc() RETURNS int AS $$
880 DECLARE
881   sum int;
882   v int;
883 BEGIN
884   sum := 0;
885   FOR v IN SELECT /*+ SeqScan(t1) */ v FROM t1 ORDER BY id LOOP
886     sum := sum + v;
887   END LOOP;
888   RETURN v;
889 END;
890 $$ LANGUAGE plpgsql;
891 SELECT testfunc();
892
893 -- Dynamic FOR loop
894 DROP FUNCTION testfunc();
895 CREATE FUNCTION testfunc() RETURNS int AS $$
896 DECLARE
897   sum int;
898   v int;
899   i   int;
900 BEGIN
901   sum := 0;
902   FOR v IN EXECUTE 'SELECT /*+ SeqScan(t1) */ val FROM t1 ORDER BY id' LOOP
903     sum := sum + v;
904   END LOOP;
905   RETURN v;
906 END;
907 $$ LANGUAGE plpgsql;
908 SELECT testfunc();
909
910 -- Cursor FOR loop
911 DROP FUNCTION testfunc();
912 CREATE FUNCTION testfunc() RETURNS int AS $$
913 DECLARE
914   ref CURSOR FOR SELECT /*+ SeqScan(t1) */ * FROM t1 ORDER BY id;
915   rec record;
916   sum int := 0;
917 BEGIN
918   FOR rec IN ref LOOP
919     sum := sum + rec.val;
920   END LOOP;
921   RETURN sum;
922 END;
923 $$ LANGUAGE plpgsql;
924 SELECT testfunc();
925
926 -- RETURN QUERY
927 DROP FUNCTION testfunc();
928 CREATE FUNCTION testfunc() RETURNS SETOF t1 AS $$
929 BEGIN
930   RETURN QUERY SELECT /*+ SeqScan(t1) */ * FROM t1 ORDER BY id;
931 END;
932 $$ LANGUAGE plpgsql;
933 SELECT * FROM testfunc() LIMIT 1;
934
935 -- Test for error exit from inner SQL statement.
936 DROP FUNCTION testfunc();
937 CREATE FUNCTION testfunc() RETURNS SETOF t1 AS $$
938 BEGIN
939   RETURN QUERY SELECT /*+ SeqScan(t1) */ * FROM ttx ORDER BY id;
940 END;
941 $$ LANGUAGE plpgsql;
942 SELECT * FROM testfunc() LIMIT 1;
943
944 -- this should not use SeqScan(t1) hint.
945 /*+ IndexScan(t1) */ SELECT * from t1 LIMIT 1;
946
947 DROP FUNCTION testfunc();
948 DROP EXTENSION pg_hint_plan;
949
950 CREATE FUNCTION reset_stats_and_wait() RETURNS void AS $$
951 DECLARE
952   rows int;
953 BEGIN
954   rows = 1;
955   while rows > 0 LOOP
956    PERFORM pg_stat_reset();
957    PERFORM pg_sleep(0.5);
958    SELECT sum(seq_scan + idx_scan) from pg_stat_user_tables into rows;
959   END LOOP;
960 END;
961 $$ LANGUAGE plpgsql;
962
963 -- Dynamic query in pl/pgsql
964 CREATE OR REPLACE FUNCTION dynsql1(x int) RETURNS int AS $$
965 DECLARE c int;
966 BEGIN
967   EXECUTE '/*+ IndexScan(t1) */ SELECT count(*) FROM t1 WHERE id < $1'
968         INTO c USING x;
969   RETURN c;
970 END;
971 $$ VOLATILE LANGUAGE plpgsql;
972 vacuum analyze t1;
973 SET pg_hint_plan.enable_hint = false;
974 SELECT reset_stats_and_wait();
975 SELECT dynsql1(9000);
976 SELECT pg_sleep(1);
977 SELECT relname, seq_scan > 0 as seq_scan, idx_scan > 0 as idx_scan FROM pg_stat_user_tables WHERE schemaname = 'public' AND relname = 't1';
978 SET pg_hint_plan.enable_hint = true;
979 SELECT reset_stats_and_wait();
980 SELECT dynsql1(9000);
981 SELECT pg_sleep(1);
982 SELECT relname, seq_scan > 0 as seq_scan, idx_scan > 0 as idx_scan FROM pg_stat_user_tables WHERE schemaname = 'public' AND relname = 't1';
983
984 -- Looped dynamic query in pl/pgsql
985 CREATE OR REPLACE FUNCTION dynsql2(x int, OUT r int) AS $$
986 DECLARE
987   c text;
988   s int;
989 BEGIN
990   r := 0;
991   FOR c IN SELECT f.f FROM (VALUES ('p1_c1'), ('p1_c2')) f(f) LOOP
992     FOR s IN EXECUTE '/*+ IndexScan(' || c || ' ' || c || '_pkey) */ SELECT sum(val) FROM ' || c || ' WHERE id < ' || x LOOP
993       r := r + s;
994     END LOOP;
995   END LOOP;
996 END;
997 $$ VOLATILE LANGUAGE plpgsql;
998 SET pg_hint_plan.enable_hint = false;
999 SELECT reset_stats_and_wait();
1000 SELECT dynsql2(9000);
1001 SELECT pg_sleep(1);
1002 -- one of the index scans happened while planning.
1003 SELECT relname, seq_scan, idx_scan FROM pg_stat_user_tables WHERE schemaname = 'public' AND (relname = 'p1_c1' OR relname = 'p1_c2');
1004 SET pg_hint_plan.enable_hint = true;
1005 SELECT reset_stats_and_wait();
1006 SELECT dynsql2(9000);
1007 SELECT pg_sleep(1);
1008 -- the index scan happened while planning.
1009 SELECT relname, seq_scan, idx_scan FROM pg_stat_user_tables WHERE schemaname = 'public' AND (relname = 'p1_c1' OR relname = 'p1_c2');
1010
1011 --
1012 -- Rows hint tests
1013 --
1014 -- Explain result includes "Planning time" if COSTS is enabled, but
1015 -- this test needs it enabled for get rows count. So do tests via psql
1016 -- and grep -v the mutable line.
1017
1018 -- value types
1019 \o results/pg_hint_plan.tmpout
1020 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id);
1021 \o
1022 \! sql/maskout.sh results/pg_hint_plan.tmpout
1023
1024 \o results/pg_hint_plan.tmpout
1025 /*+ Rows(t1 t2 #99) */
1026 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id);
1027 \o
1028 \! sql/maskout.sh results/pg_hint_plan.tmpout
1029
1030 \o results/pg_hint_plan.tmpout
1031 /*+ Rows(t1 t2 +99) */
1032 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id);
1033 \o
1034 \! sql/maskout.sh results/pg_hint_plan.tmpout
1035
1036 \o results/pg_hint_plan.tmpout
1037 /*+ Rows(t1 t2 -99) */
1038 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id);
1039 \o
1040 \! sql/maskout.sh results/pg_hint_plan.tmpout
1041
1042 \o results/pg_hint_plan.tmpout
1043 /*+ Rows(t1 t2 *99) */
1044 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id);
1045 \o
1046 \! sql/maskout.sh results/pg_hint_plan.tmpout
1047
1048 \o results/pg_hint_plan.tmpout
1049 /*+ Rows(t1 t2 *0.01) */
1050 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id);
1051 \o
1052 \! sql/maskout.sh results/pg_hint_plan.tmpout
1053
1054 \o results/pg_hint_plan.tmpout
1055 /*+ Rows(t1 t2 #aa) */
1056 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id); -- ERROR
1057 \o
1058 \! sql/maskout.sh results/pg_hint_plan.tmpout
1059
1060 \o results/pg_hint_plan.tmpout
1061 /*+ Rows(t1 t2 /99) */
1062 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id); -- ERROR
1063 \o
1064 \! sql/maskout.sh results/pg_hint_plan.tmpout
1065
1066 -- round up to 1
1067 \o results/pg_hint_plan.tmpout
1068 /*+ Rows(t1 t2 -99999) */
1069 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id);
1070 \o
1071 \! sql/maskout.sh results/pg_hint_plan.tmpout
1072
1073 -- complex join tree
1074 \o results/pg_hint_plan.tmpout
1075 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id) JOIN t3 ON (t3.id = t2.id);
1076 \o
1077 \! sql/maskout.sh results/pg_hint_plan.tmpout
1078
1079 \o results/pg_hint_plan.tmpout
1080 /*+ Rows(t1 t2 #22) */
1081 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id) JOIN t3 ON (t3.id = t2.id);
1082 \o
1083 \! sql/maskout.sh results/pg_hint_plan.tmpout
1084
1085 \o results/pg_hint_plan.tmpout
1086 /*+ Rows(t1 t3 *10) */
1087 EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id) JOIN t3 ON (t3.id = t2.id);
1088 \o
1089 set max_parallel_workers_per_gather to DEFAULT;
1090 \! sql/maskout.sh results/pg_hint_plan.tmpout
1091 \! rm results/pg_hint_plan.tmpout
1092
1093 -- hint error level
1094 set client_min_messages to 'DEBUG1';
1095 set pg_hint_plan.debug_level to 'verbose';
1096 /*+ SeqScan( */ SELECT 1;
1097 /*+ SeqScan(t1) */ SELECT * FROM t1 LIMIT 0;
1098 set pg_hint_plan.message_level to 'DEBUG1';
1099 set pg_hint_plan.parse_messages to 'NOTICE';
1100 /*+ SeqScan( */ SELECT 1;
1101 /*+ SeqScan(t1) */ SELECT * FROM t1 LIMIT 0;
1102