OSDN Git Service

既存機能の向上や新規機能の追加を考慮してリグレッションテストを更新した。
[pghintplan/pg_hint_plan.git] / sql / pg_hint_plan.sql
1 SET search_path TO public;
2
3 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
4 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.val = t2.val;
5
6 LOAD 'pg_hint_plan';
7 SET pg_hint_plan.debug_print TO on;
8 SET client_min_messages TO LOG;
9
10 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
11 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.val = t2.val;
12
13 /*+ Test (t1 t2) */
14 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
15 SET pg_hint_plan.enable_hint TO off;
16 /*+ Test (t1 t2) */
17 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
18 SET pg_hint_plan.enable_hint TO on;
19
20 /*Set(enable_indexscan off)*/
21 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
22 --+Set(enable_indexscan off)
23 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
24 /*+Set(enable_indexscan off) /* nest comment */ */
25 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
26 /*+Set(enable_indexscan off)*/
27 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
28 EXPLAIN (COSTS false) /*+Set(enable_indexscan off)*/
29  SELECT * FROM t1, t2 WHERE t1.id = t2.id;
30 /*+ Set(enable_indexscan off) Set(enable_hashjoin off) */
31 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
32
33 /*+      Set     (       enable_indexscan        off     )       */
34 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
35 /*+      
36                 Set      
37                 (        
38                 enable_indexscan         
39                 off      
40                 )        
41                 */              
42 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
43 /*+ Set(enable_indexscan off)Set(enable_nestloop off)Set(enable_mergejoin off)          
44                 Set(enable_seqscan off)
45                 */
46 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
47 /*+Set(work_mem "1M")*/
48 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
49 /*+Set(work_mem "1MB")*/
50 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
51 /*+Set(work_mem TO "1MB")*/
52 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
53
54 /*+SeqScan(t1 t2)*/
55 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
56 /*+SeqScan(t1)*/
57 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
58 /*+SeqScan(t1)IndexScan(t2)*/
59 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
60 /*+BitmapScan(t2)*/
61 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
62 /*+BitmapScan(t2)NoSeqScan(t1)*/
63 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
64 /*+NoIndexScan(t1)*/
65 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
66
67 /*+NoBitmapScan(t1)*/
68 EXPLAIN (COSTS false) SELECT * FROM t1, t4 WHERE t1.val < 10;
69 /*+TidScan(t4)*/
70 EXPLAIN (COSTS false) SELECT * FROM t3, t4 WHERE t3.id = t4.id AND t4.ctid = '(1,1)';
71 /*+NoTidScan(t1)*/
72 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)';
73
74 /*+HashJoin(t1 t2)*/
75 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
76 /*+NestLoop(t1 t2)*/
77 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
78 /*+NoMergeJoin(t1 t2)*/
79 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
80
81 /*+MergeJoin(t1 t3)*/
82 EXPLAIN (COSTS false) SELECT * FROM t1, t3 WHERE t1.val = t3.val;
83 /*+NestLoop(t1 t3)*/
84 EXPLAIN (COSTS false) SELECT * FROM t1, t3 WHERE t1.val = t3.val;
85 /*+NoHashJoin(t1 t3)*/
86 EXPLAIN (COSTS false) SELECT * FROM t1, t3 WHERE t1.val = t3.val;
87
88 /*+MergeJoin(t4 t1 t2 t3)*/
89 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
90 /*+HashJoin(t3 t4 t1 t2)*/
91 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
92 /*+NestLoop(t2 t3 t4 t1) IndexScan(t3)*/
93 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
94 /*+NoNestLoop(t4 t1 t3 t2)*/
95 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
96
97 /*+Leading( */
98 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
99 /*+Leading( )*/
100 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
101 /*+Leading( t3 )*/
102 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
103 /*+Leading( t3 t4 )*/
104 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
105 /*+Leading(t3 t4 t1)*/
106 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
107 /*+Leading(t3 t4 t1 t2)*/
108 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
109 /*+Leading(t3 t4 t1 t2 t1)*/
110 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
111 /*+Leading(t3 t4 t4)*/
112 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
113
114 EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) WHERE t1.id = t2.id;
115 /*+HashJoin(t1 t2)*/
116 EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) WHERE t1.id = t2.id;
117 /*+HashJoin(t1 *VALUES*)*/
118 EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) WHERE t1.id = t2.id;
119 /*+HashJoin(t1 *VALUES*) IndexScan(t1) IndexScan(*VALUES*)*/
120 EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) WHERE t1.id = t2.id;
121
122 -- single table scan hint test
123 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);
124 /*+BitmapScan(v_1)*/
125 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);
126 /*+BitmapScan(v_2)*/
127 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);
128 /*+BitmapScan(t1)*/
129 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);
130 /*+BitmapScan(v_1)BitmapScan(v_2)*/
131 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);
132 /*+BitmapScan(v_1)BitmapScan(t1)*/
133 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);
134 /*+BitmapScan(v_2)BitmapScan(t1)*/
135 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);
136 /*+BitmapScan(v_1)BitmapScan(v_2)BitmapScan(t1)*/
137 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);
138
139 -- full scan hint pattern test
140 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
141 /*+SeqScan(t1)*/
142 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
143 /*+IndexScan(t1)*/
144 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
145 /*+BitmapScan(t1)*/
146 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
147 /*+TidScan(t1)*/
148 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
149 /*+NoSeqScan(t1)*/
150 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
151 /*+NoIndexScan(t1)*/
152 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
153 /*+NoBitmapScan(t1)*/
154 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
155 /*+NoTidScan(t1)*/
156 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
157
158 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
159 /*+SeqScan(t1)*/
160 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
161 /*+SeqScan(t2)*/
162 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
163 /*+SeqScan(t1) SeqScan(t2)*/
164 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
165 /*+SeqScan(t1) IndexScan(t2)*/
166 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
167 /*+SeqScan(t1) BitmapScan(t2)*/
168 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
169 /*+SeqScan(t1) TidScan(t2)*/
170 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
171 /*+SeqScan(t1) NoSeqScan(t2)*/
172 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
173 /*+SeqScan(t1) NoIndexScan(t2)*/
174 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
175 /*+SeqScan(t1) NoBitmapScan(t2)*/
176 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
177 /*+SeqScan(t1) NoTidScan(t2)*/
178 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
179
180 /*+IndexScan(t1)*/
181 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
182 /*+IndexScan(t2)*/
183 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
184 /*+IndexScan(t1) SeqScan(t2)*/
185 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
186 /*+IndexScan(t1) IndexScan(t2)*/
187 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
188 /*+IndexScan(t1) BitmapScan(t2)*/
189 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
190 /*+IndexScan(t1) TidScan(t2)*/
191 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
192 /*+IndexScan(t1) NoSeqScan(t2)*/
193 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
194 /*+IndexScan(t1) NoIndexScan(t2)*/
195 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
196 /*+IndexScan(t1) NoBitmapScan(t2)*/
197 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
198 /*+IndexScan(t1) NoTidScan(t2)*/
199 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
200
201 /*+BitmapScan(t1)*/
202 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
203 /*+BitmapScan(t2)*/
204 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
205 /*+BitmapScan(t2)*/
206 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
207 /*+BitmapScan(t1) SeqScan(t2)*/
208 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
209 /*+BitmapScan(t1) IndexScan(t2)*/
210 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
211 /*+BitmapScan(t1) BitmapScan(t2)*/
212 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
213 /*+BitmapScan(t1) TidScan(t2)*/
214 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
215 /*+BitmapScan(t1) NoSeqScan(t2)*/
216 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
217 /*+BitmapScan(t1) NoIndexScan(t2)*/
218 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
219 /*+BitmapScan(t1) NoBitmapScan(t2)*/
220 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
221 /*+BitmapScan(t1) NoTidScan(t2)*/
222 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
223
224 /*+TidScan(t1)*/
225 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
226 /*+TidScan(t2)*/
227 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
228 /*+TidScan(t1) SeqScan(t2)*/
229 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
230 /*+TidScan(t1) IndexScan(t2)*/
231 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
232 /*+TidScan(t1) BitmapScan(t2)*/
233 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
234 /*+TidScan(t1) TidScan(t2)*/
235 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
236 /*+TidScan(t1) NoSeqScan(t2)*/
237 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
238 /*+TidScan(t1) NoIndexScan(t2)*/
239 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
240 /*+TidScan(t1) NoBitmapScan(t2)*/
241 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
242 /*+TidScan(t1) NoTidScan(t2)*/
243 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
244
245 /*+NoSeqScan(t1)*/
246 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
247 /*+NoSeqScan(t2)*/
248 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
249 /*+NoSeqScan(t1) SeqScan(t2)*/
250 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
251 /*+NoSeqScan(t1) IndexScan(t2)*/
252 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
253 /*+NoSeqScan(t1) BitmapScan(t2)*/
254 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
255 /*+NoSeqScan(t1) TidScan(t2)*/
256 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
257 /*+NoSeqScan(t1) NoSeqScan(t2)*/
258 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
259 /*+NoSeqScan(t1) NoIndexScan(t2)*/
260 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
261 /*+NoSeqScan(t1) NoBitmapScan(t2)*/
262 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
263 /*+NoSeqScan(t1) NoTidScan(t2)*/
264 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
265
266 /*+NoIndexScan(t1)*/
267 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
268 /*+NoIndexScan(t2)*/
269 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
270 /*+NoIndexScan(t1) SeqScan(t2)*/
271 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
272 /*+NoIndexScan(t1) IndexScan(t2)*/
273 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
274 /*+NoIndexScan(t1) BitmapScan(t2)*/
275 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
276 /*+NoIndexScan(t1) TidScan(t2)*/
277 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
278 /*+NoIndexScan(t1) NoSeqScan(t2)*/
279 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
280 /*+NoIndexScan(t1) NoIndexScan(t2)*/
281 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
282 /*+NoIndexScan(t1) NoBitmapScan(t2)*/
283 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
284 /*+NoIndexScan(t1) NoTidScan(t2)*/
285 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
286
287 /*+NoBitmapScan(t1)*/
288 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
289 /*+NoBitmapScan(t2)*/
290 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
291 /*+NoBitmapScan(t1) SeqScan(t2)*/
292 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
293 /*+NoBitmapScan(t1) IndexScan(t2)*/
294 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
295 /*+NoBitmapScan(t1) BitmapScan(t2)*/
296 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
297 /*+NoBitmapScan(t1) TidScan(t2)*/
298 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
299 /*+NoBitmapScan(t1) NoSeqScan(t2)*/
300 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
301 /*+NoBitmapScan(t1) NoIndexScan(t2)*/
302 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
303 /*+NoBitmapScan(t1) NoBitmapScan(t2)*/
304 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
305 /*+NoBitmapScan(t1) NoTidScan(t2)*/
306 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
307
308 /*+NoTidScan(t1)*/
309 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
310 /*+NoTidScan(t2)*/
311 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
312 /*+NoTidScan(t1) SeqScan(t2)*/
313 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
314 /*+NoTidScan(t1) IndexScan(t2)*/
315 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
316 /*+NoTidScan(t1) BitmapScan(t2)*/
317 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
318 /*+NoTidScan(t1) TidScan(t2)*/
319 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
320 /*+NoTidScan(t1) NoSeqScan(t2)*/
321 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
322 /*+NoTidScan(t1) NoIndexScan(t2)*/
323 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
324 /*+NoTidScan(t1) NoBitmapScan(t2)*/
325 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
326 /*+NoTidScan(t1) NoTidScan(t2)*/
327 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
328
329 -- additional test
330 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;
331 /*+BitmapScan(t1) BitmapScan(t2)*/
332 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;
333
334 -- outer join test
335 EXPLAIN (COSTS false) SELECT * FROM t1 FULL OUTER JOIN  t2 ON (t1.id = t2.id);
336 /*+MergeJoin(t1 t2)*/
337 EXPLAIN (COSTS false) SELECT * FROM t1 FULL OUTER JOIN  t2 ON (t1.id = t2.id);
338 /*+NestLoop(t1 t2)*/
339 EXPLAIN (COSTS false) SELECT * FROM t1 FULL OUTER JOIN  t2 ON (t1.id = t2.id);
340
341 -- inherite table test
342 SET constraint_exclusion TO off;
343 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
344 SET constraint_exclusion TO on;
345 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
346 SET constraint_exclusion TO off;
347 /*+SeqScan(p1)*/
348 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
349 /*+IndexScan(p1)*/
350 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
351 /*+BitmapScan(p1)*/
352 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
353 /*+TidScan(p1)*/
354 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
355 SET constraint_exclusion TO on;
356 /*+SeqScan(p1)*/
357 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
358 /*+IndexScan(p1)*/
359 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
360 /*+BitmapScan(p1)*/
361 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
362 /*+TidScan(p1)*/
363 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
364
365 SET constraint_exclusion TO off;
366 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;
367 SET constraint_exclusion TO on;
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 off;
370 /*+SeqScan(p1)*/
371 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;
372 /*+IndexScan(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 /*+BitmapScan(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 /*+TidScan(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 /*+NestLoop(p1 t1)*/
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 /*+MergeJoin(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 /*+HashJoin(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 SET constraint_exclusion TO on;
385 /*+SeqScan(p1)*/
386 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;
387 /*+IndexScan(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 /*+BitmapScan(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 /*+TidScan(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 /*+NestLoop(p1 t1)*/
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 /*+MergeJoin(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 /*+HashJoin(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
400 SET constraint_exclusion TO off;
401 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
402 SET constraint_exclusion TO on;
403 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
404 SET constraint_exclusion TO off;
405 /*+SeqScan(p1)*/
406 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
407 /*+IndexScan(p1)*/
408 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
409 /*+BitmapScan(p1)*/
410 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
411 /*+TidScan(p1)*/
412 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
413 /*+NestLoop(p1 t1)*/
414 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;
415 /*+MergeJoin(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 /*+HashJoin(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 SET constraint_exclusion TO on;
420 /*+SeqScan(p1)*/
421 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
422 /*+IndexScan(p1)*/
423 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
424 /*+BitmapScan(p1)*/
425 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
426 /*+TidScan(p1)*/
427 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
428 /*+NestLoop(p1 t1)*/
429 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;
430 /*+MergeJoin(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 /*+HashJoin(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
435 SET constraint_exclusion TO off;
436 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;
437 SET constraint_exclusion TO on;
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 off;
440 /*+SeqScan(p1)*/
441 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;
442 /*+IndexScan(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 /*+BitmapScan(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 /*+TidScan(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 SET constraint_exclusion TO on;
449 /*+SeqScan(p1)*/
450 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;
451 /*+IndexScan(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 /*+BitmapScan(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 /*+TidScan(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
458 -- quote test
459 /*+SeqScan("""t1 )      ")IndexScan("t  2 """)HashJoin("""t1 )  "T3"t   2 """)Leading("""t1 )   "T3"t   2 """)Set(application_name"a    a       a""     a       A")*/
460 EXPLAIN (COSTS false) SELECT * FROM t1 """t1 )  ", t2 "t        2 """, t3 "T3" WHERE """t1 )    ".id = "t       2 """.id AND """t1 )    ".id = "T3".id;
461
462 -- duplicate hint test
463 /*+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)*/
464 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
465
466 -- sub query Leading hint test
467 SET from_collapse_limit TO 100;
468 SET geqo_threshold TO 100;
469 EXPLAIN (COSTS false)
470 WITH c1_1(id) AS (
471 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
472 )
473 SELECT t1_1.id, (
474 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
475 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
476 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
477 ) 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 = (
478 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 
479 );
480 /*+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)*/
481 EXPLAIN (COSTS false)
482 WITH c1_1(id) AS (
483 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
484 )
485 SELECT t1_1.id, (
486 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
487 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
488 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
489 ) 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 = (
490 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 
491 );
492 /*+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)*/
493 EXPLAIN (COSTS false)
494 WITH c1_1(id) AS (
495 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
496 )
497 SELECT t1_1.id, (
498 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
499 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
500 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
501 ) 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 = (
502 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 
503 );
504 /*+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)*/
505 EXPLAIN (COSTS false)
506 WITH c1_1(id) AS (
507 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
508 )
509 SELECT t1_1.id, (
510 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
511 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
512 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
513 ) 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 = (
514 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 
515 );
516 /*+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)*/
517 EXPLAIN (COSTS false)
518 WITH c1_1(id) AS (
519 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
520 )
521 SELECT t1_1.id, (
522 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
523 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
524 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
525 ) 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 = (
526 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 
527 );
528
529 SET from_collapse_limit TO 1;
530 EXPLAIN (COSTS false)
531 WITH c1_1(id) AS (
532 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
533 )
534 SELECT t1_1.id, (
535 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
536 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
537 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
538 ) 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 = (
539 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 
540 );
541 /*+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)*/
542 EXPLAIN (COSTS false)
543 WITH c1_1(id) AS (
544 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
545 )
546 SELECT t1_1.id, (
547 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
548 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
549 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
550 ) 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 = (
551 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 
552 );
553 /*+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)*/
554 EXPLAIN (COSTS false)
555 WITH c1_1(id) AS (
556 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
557 )
558 SELECT t1_1.id, (
559 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
560 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
561 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
562 ) 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 = (
563 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 
564 );
565 /*+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)*/
566 EXPLAIN (COSTS false)
567 WITH c1_1(id) AS (
568 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
569 )
570 SELECT t1_1.id, (
571 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
572 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
573 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
574 ) 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 = (
575 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 
576 );
577 /*+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)*/
578 EXPLAIN (COSTS false)
579 WITH c1_1(id) AS (
580 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
581 )
582 SELECT t1_1.id, (
583 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
584 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
585 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
586 ) 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 = (
587 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 
588 );
589
590 -- ambigous error
591 EXPLAIN (COSTS false) SELECT * FROM t1, s0.t1, t2 WHERE public.t1.id = s0.t1.id AND public.t1.id = t2.id;
592 /*+NestLoop(t1 t2)*/
593 EXPLAIN (COSTS false) SELECT * FROM t1, s0.t1, t2 WHERE public.t1.id = s0.t1.id AND public.t1.id = t2.id;
594 /*+Leading(t1 t2 t1)*/
595 EXPLAIN (COSTS false) SELECT * FROM t1, s0.t1, t2 WHERE public.t1.id = s0.t1.id AND public.t1.id = t2.id;
596
597 -- identifier length test
598 EXPLAIN (COSTS false) SELECT * FROM t1 "123456789012345678901234567890123456789012345678901234567890123" JOIN t2 ON ("123456789012345678901234567890123456789012345678901234567890123".id = t2.id) JOIN t3 ON (t2.id = t3.id);
599 /*+
600 Leading(123456789012345678901234567890123456789012345678901234567890123 t2 t3)
601 SeqScan(123456789012345678901234567890123456789012345678901234567890123)
602 MergeJoin(123456789012345678901234567890123456789012345678901234567890123 t2)
603 Set(123456789012345678901234567890123456789012345678901234567890123 1)
604 */
605 EXPLAIN (COSTS false) SELECT * FROM t1 "123456789012345678901234567890123456789012345678901234567890123" JOIN t2 ON ("123456789012345678901234567890123456789012345678901234567890123".id = t2.id) JOIN t3 ON (t2.id = t3.id);
606 /*+
607 Leading(1234567890123456789012345678901234567890123456789012345678901234 t2 t3)
608 SeqScan(1234567890123456789012345678901234567890123456789012345678901234)
609 MergeJoin(1234567890123456789012345678901234567890123456789012345678901234 t2)
610 Set(1234567890123456789012345678901234567890123456789012345678901234 1)
611 Set(cursor_tuple_fraction 0.1234567890123456789012345678901234567890123456789012345678901234)
612 */
613 EXPLAIN (COSTS false) SELECT * FROM t1 "1234567890123456789012345678901234567890123456789012345678901234" JOIN t2 ON ("1234567890123456789012345678901234567890123456789012345678901234".id = t2.id) JOIN t3 ON (t2.id = t3.id);
614 SET "123456789012345678901234567890123456789012345678901234567890123" TO 1;
615 SET "1234567890123456789012345678901234567890123456789012345678901234" TO 1;
616 SET cursor_tuple_fraction TO 1234567890123456789012345678901234567890123456789012345678901234;
617
618 -- multi error
619 /*+ Set(enable_seqscan 100)Set(seq_page_cost on)*/
620 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
621
622 -- debug log of candidate index to use IndexScan
623 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
624 /*+IndexScan(t5 t5_id2)*/
625 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
626 /*+IndexScan(t5 no_exist)*/
627 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
628 /*+IndexScan(t5 t5_id1 t5_id2)*/
629 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
630 /*+IndexScan(t5 no_exist t5_id2)*/
631 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
632 /*+IndexScan(t5 no_exist5 no_exist2)*/
633 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
634
635 -- outer inner
636 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
637
638 /*+Leading((t1))*/
639 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
640 /*+Leading((t1 t2))*/
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 t3))*/
643 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
644
645 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.id < 10;
646 /*+Leading((t1 t2))*/
647 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.id < 10;
648
649 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
650 /*+Leading(((t1 t2) t3))*/
651 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
652
653 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;
654 /*+Leading((((t1 t2) t3) t4))*/
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
657 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
658 /*+Leading(((t1 t2) t3))*/
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
663 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;
664 /*+Leading(((t1 t2) (t3 t4)))*/
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
667 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);
668 /*+Leading(((t1 t2) t3)) Leading(((t3 t1) t2))*/
669 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);
670 /*+Leading(((t1 t2) t3)) Leading((t1_2 t2_2))*/
671 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);
672 /*+Leading(((((t1 t2) t3) 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
675 -- Specified outer/inner leading hint and join method hint at the same time
676 /*+Leading(((t1 t2) t3))*/
677 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
678 /*+Leading(((t1 t2) t3)) MergeJoin(t1 t2)*/
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 t3)*/
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 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
685 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;
686 /*+Leading(((t1 t2) t3)) MergeJoin(t3 t4)*/
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(t1 t2 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
691 /*+ Leading ( ( t1 ( t2 t3 ) ) ) */
692 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
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
704 /*+Leading((t1(t2(t3(t4 t5)))))*/
705 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;
706 /*+Leading((t5(t4(t3(t2 t1)))))*/
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(((((t1 t2)t3)t4)t5))*/
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(((((t5 t4)t3)t2)t1))*/
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(((t1 t2)(t3(t4 t5))))*/
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(((t5 t4)(t3(t2 t1))))*/
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((((t1 t2)t3)(t4 t5)))*/
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((((t5 t4)t3)(t2 t1)))*/
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
721 -- inherite table test to specify the index's name
722 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
723 /*+IndexScan(p2 p2_pkey)*/
724 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
725 /*+IndexScan(p2 p2_id_val_idx)*/
726 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
727 /*+IndexScan(p2 p2_val_id_idx)*/
728 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
729
730 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
731 /*+IndexScan(p2 p2_val)*/
732 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
733 /*+IndexScan(p2 p2_pkey)*/
734 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
735 /*+IndexScan(p2 p2_id2_val)*/
736 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
737 /*+IndexScan(p2 p2_val2_id)*/
738 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
739
740 /*+IndexScan(p2 p2_pkey)*/
741 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
742 /*+IndexScan(p2 p2_c1_id_val_idx)*/
743 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
744 /*+IndexScan(p2 no_exist)*/
745 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
746 /*+IndexScan(p2 p2_pkey p2_c1_id_val_idx)*/
747 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
748 /*+IndexScan(p2 p2_pkey no_exist)*/
749 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
750 /*+IndexScan(p2 p2_c1_id_val_idx no_exist)*/
751 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
752 /*+IndexScan(p2 p2_pkey p2_c1_id_val_idx no_exist)*/
753 EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
754
755 /*+IndexScan(p2 p2_val_idx)*/
756 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
757 /*+IndexScan(p2 p2_expr)*/
758 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
759 /*+IndexScan(p2 p2_val_idx6)*/
760 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
761 /*+IndexScan(p2 p2_val_idx p2_val_idx6)*/
762 EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
763
764 -- regular expression
765 -- ordinary table
766 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
767 /*+ IndexScanRegexp(t5 t5_[^i].*)*/
768 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
769 /*+ IndexScanRegexp(t5 t5_id[0-9].*)*/
770 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
771 /*+ IndexScanRegexp(t5 t5[^_].*)*/
772 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
773 /*+ IndexScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/
774 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
775 /*+ IndexScan(t5 t5_id[0-9].*)*/
776 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
777 /*+ IndexOnlyScanRegexp(t5 t5_[^i].*)*/
778 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
779 /*+ IndexOnlyScanRegexp(t5 t5_id[0-9].*)*/
780 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
781 /*+ IndexOnlyScanRegexp(t5 t5[^_].*)*/
782 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
783 /*+ IndexOnlyScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/
784 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
785 /*+ IndexOnlyScan(t5 t5_id[0-9].*)*/
786 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
787 /*+ BitmapScanRegexp(t5 t5_[^i].*)*/
788 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
789 /*+ BitmapScanRegexp(t5 t5_id[0-9].*)*/
790 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
791 /*+ BitmapScanRegexp(t5 t5[^_].*)*/
792 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
793 /*+ BitmapScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/
794 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
795 /*+ BitmapScan(t5 t5_id[0-9].*)*/
796 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
797
798 -- Inheritance
799 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
800 /*+ IndexScanRegexp(p1 p1_.*[^0-9]$)*/
801 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
802 /*+ IndexScanRegexp(p1 p1_.*val2.*)*/
803 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
804 /*+ IndexScanRegexp(p1 p1[^_].*)*/
805 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
806 /*+ IndexScan(p1 p1_.*val2.*)*/
807 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
808 /*+ IndexOnlyScanRegexp(p1 p1_.*[^0-9]$)*/
809 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
810 /*+ IndexOnlyScanRegexp(p1 p1_.*val2.*)*/
811 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
812 /*+ IndexOnlyScanRegexp(p1 p1[^_].*)*/
813 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
814 /*+ IndexOnlyScan(p1 p1_.*val2.*)*/
815 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
816 /*+ BitmapScanRegexp(p1 p1_.*[^0-9]$)*/
817 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
818 /*+ BitmapScanRegexp(p1 p1_.*val2.*)*/
819 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
820 /*+ BitmapScanRegexp(p1 p1[^_].*)*/
821 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
822 /*+ BitmapScan(p1 p1_.*val2.*)*/
823 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
824
825 -- search from hint table
826 INSERT INTO hint_plan.hints VALUES ('EXPLAIN (COSTS false) SELECT * FROM t1 WHERE t1.id = ?;', '', 'SeqScan(t1)');
827 SET pg_hint_plan.lookup_hint_in_table = on;
828 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE t1.id = 1;
829 SET pg_hint_plan.lookup_hint_in_table = off;
830 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE t1.id = 1;
831 TRUNCATE hint_plan.hints;
832 VACUUM ANALYZE;
833
834 -- plpgsql test
835 EXPLAIN SELECT id FROM t1 WHERE t1.id = 1;
836 SET client_min_messages = LOG;
837 DO LANGUAGE plpgsql $$
838 DECLARE
839     id integer;
840 BEGIN
841         SELECT /*+SeqScan(t1)*/ t1.id INTO id FROM t1 WHERE t1.id = 1;
842         RETURN;
843 END;
844 $$;
845 RESET client_min_messages;