OSDN Git Service

子テーブルindex指定のPOSIX正規表現方式を実装した。
[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 /*+ Set(enable_indexscan off) Set(enable_hashjoin off) */
29 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
30
31 /*+      Set     (       enable_indexscan        off     )       */
32 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
33 /*+      
34                 Set      
35                 (        
36                 enable_indexscan         
37                 off      
38                 )        
39                 */              
40 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
41 /*+ Set(enable_indexscan off)Set(enable_nestloop off)Set(enable_mergejoin off)          
42                 Set(enable_seqscan off)
43                 */
44 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
45 /*+Set(work_mem "1M")*/
46 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
47 /*+Set(work_mem "1MB")*/
48 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
49 /*+Set(work_mem TO "1MB")*/
50 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
51
52 /*+SeqScan(t1 t2)*/
53 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
54 /*+SeqScan(t1)*/
55 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
56 /*+SeqScan(t1)IndexScan(t2)*/
57 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
58 /*+BitmapScan(t2)*/
59 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
60 /*+BitmapScan(t2)NoSeqScan(t1)*/
61 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
62 /*+NoIndexScan(t1)*/
63 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
64
65 /*+NoBitmapScan(t1)*/
66 EXPLAIN (COSTS false) SELECT * FROM t1, t4 WHERE t1.val < 10;
67 /*+TidScan(t4)*/
68 EXPLAIN (COSTS false) SELECT * FROM t3, t4 WHERE t3.id = t4.id AND t4.ctid = '(1,1)';
69 /*+NoTidScan(t1)*/
70 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)';
71
72 /*+HashJoin(t1 t2)*/
73 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
74 /*+NestLoop(t1 t2)*/
75 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
76 /*+NoMergeJoin(t1 t2)*/
77 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
78
79 /*+MergeJoin(t1 t3)*/
80 EXPLAIN (COSTS false) SELECT * FROM t1, t3 WHERE t1.val = t3.val;
81 /*+NestLoop(t1 t3)*/
82 EXPLAIN (COSTS false) SELECT * FROM t1, t3 WHERE t1.val = t3.val;
83 /*+NoHashJoin(t1 t3)*/
84 EXPLAIN (COSTS false) SELECT * FROM t1, t3 WHERE t1.val = t3.val;
85
86 /*+MergeJoin(t4 t1 t2 t3)*/
87 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;
88 /*+HashJoin(t3 t4 t1 t2)*/
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 /*+NestLoop(t2 t3 t4 t1) IndexScan(t3)*/
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 /*+NoNestLoop(t4 t1 t3 t2)*/
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
95 /*+Leading( */
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 /*+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( t3 )*/
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 t4 )*/
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 t1)*/
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 t2)*/
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 t1)*/
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 t4)*/
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
112 EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) WHERE t1.id = t2.id;
113 /*+HashJoin(t1 t2)*/
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 *VALUES*)*/
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*) IndexScan(t1) IndexScan(*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
120 -- single table scan hint test
121 EXPLAIN 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);
122 /*+BitmapScan(v_1)*/
123 EXPLAIN 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_2)*/
125 EXPLAIN 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(t1)*/
127 EXPLAIN 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(v_1)BitmapScan(v_2)*/
129 EXPLAIN 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(t1)*/
131 EXPLAIN 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_2)BitmapScan(t1)*/
133 EXPLAIN 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_1)BitmapScan(v_2)BitmapScan(t1)*/
135 EXPLAIN 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
137 -- full scan hint pattern test
138 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
139 /*+SeqScan(t1)*/
140 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
141 /*+IndexScan(t1)*/
142 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
143 /*+BitmapScan(t1)*/
144 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
145 /*+TidScan(t1)*/
146 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
147 /*+NoSeqScan(t1)*/
148 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
149 /*+NoIndexScan(t1)*/
150 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
151 /*+NoBitmapScan(t1)*/
152 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
153 /*+NoTidScan(t1)*/
154 EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)';
155
156 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
157 /*+SeqScan(t1)*/
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(t2)*/
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(t1) 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) IndexScan(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) BitmapScan(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) TidScan(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) NoSeqScan(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) NoIndexScan(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) NoBitmapScan(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) NoTidScan(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
178 /*+IndexScan(t1)*/
179 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
180 /*+IndexScan(t2)*/
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(t1) SeqScan(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) IndexScan(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) BitmapScan(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) TidScan(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) NoSeqScan(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) NoIndexScan(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) NoBitmapScan(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) NoTidScan(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
199 /*+BitmapScan(t1)*/
200 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
201 /*+BitmapScan(t2)*/
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(t1) SeqScan(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) IndexScan(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) BitmapScan(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) TidScan(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) NoSeqScan(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) NoIndexScan(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) NoBitmapScan(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) NoTidScan(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
222 /*+TidScan(t1)*/
223 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
224 /*+TidScan(t2)*/
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(t1) SeqScan(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) IndexScan(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) BitmapScan(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) TidScan(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) NoSeqScan(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) NoIndexScan(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) NoBitmapScan(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) NoTidScan(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
243 /*+NoSeqScan(t1)*/
244 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
245 /*+NoSeqScan(t2)*/
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(t1) SeqScan(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) IndexScan(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) BitmapScan(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) TidScan(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) NoSeqScan(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) NoIndexScan(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) NoBitmapScan(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) NoTidScan(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
264 /*+NoIndexScan(t1)*/
265 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
266 /*+NoIndexScan(t2)*/
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(t1) SeqScan(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) IndexScan(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) BitmapScan(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) TidScan(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) NoSeqScan(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) NoIndexScan(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) NoBitmapScan(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) NoTidScan(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
285 /*+NoBitmapScan(t1)*/
286 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
287 /*+NoBitmapScan(t2)*/
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(t1) SeqScan(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) IndexScan(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) BitmapScan(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) TidScan(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) NoSeqScan(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) NoIndexScan(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) NoBitmapScan(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) NoTidScan(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
306 /*+NoTidScan(t1)*/
307 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
308 /*+NoTidScan(t2)*/
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(t1) SeqScan(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) IndexScan(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) BitmapScan(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) TidScan(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) NoSeqScan(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) NoIndexScan(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) NoBitmapScan(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) NoTidScan(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
327 -- additional test
328 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;
329 /*+BitmapScan(t1) BitmapScan(t2)*/
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
332 -- outer join test
333 EXPLAIN (COSTS false) SELECT * FROM t1 FULL OUTER JOIN  t2 ON (t1.id = t2.id);
334 /*+MergeJoin(t1 t2)*/
335 EXPLAIN (COSTS false) SELECT * FROM t1 FULL OUTER JOIN  t2 ON (t1.id = t2.id);
336 /*+NestLoop(t1 t2)*/
337 EXPLAIN (COSTS false) SELECT * FROM t1 FULL OUTER JOIN  t2 ON (t1.id = t2.id);
338
339 -- inherite table test
340 SET constraint_exclusion TO off;
341 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
342 SET constraint_exclusion TO on;
343 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
344 SET constraint_exclusion TO off;
345 /*+SeqScan(p1)*/
346 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
347 /*+IndexScan(p1)*/
348 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
349 /*+BitmapScan(p1)*/
350 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
351 /*+TidScan(p1)*/
352 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
353 SET constraint_exclusion TO on;
354 /*+SeqScan(p1)*/
355 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
356 /*+IndexScan(p1)*/
357 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
358 /*+BitmapScan(p1)*/
359 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
360 /*+TidScan(p1)*/
361 EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
362
363 SET constraint_exclusion TO off;
364 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;
365 SET constraint_exclusion TO on;
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 off;
368 /*+SeqScan(p1)*/
369 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;
370 /*+IndexScan(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 /*+BitmapScan(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 /*+TidScan(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 /*+NestLoop(p1 t1)*/
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 /*+MergeJoin(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 /*+HashJoin(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 SET constraint_exclusion TO on;
383 /*+SeqScan(p1)*/
384 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;
385 /*+IndexScan(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 /*+BitmapScan(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 /*+TidScan(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 /*+NestLoop(p1 t1)*/
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 /*+MergeJoin(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 /*+HashJoin(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
398 SET constraint_exclusion TO off;
399 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
400 SET constraint_exclusion TO on;
401 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
402 SET constraint_exclusion TO off;
403 /*+SeqScan(p1)*/
404 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
405 /*+IndexScan(p1)*/
406 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
407 /*+BitmapScan(p1)*/
408 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
409 /*+TidScan(p1)*/
410 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
411 /*+NestLoop(p1 t1)*/
412 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;
413 /*+MergeJoin(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 /*+HashJoin(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 SET constraint_exclusion TO on;
418 /*+SeqScan(p1)*/
419 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
420 /*+IndexScan(p1)*/
421 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
422 /*+BitmapScan(p1)*/
423 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
424 /*+TidScan(p1)*/
425 EXPLAIN (COSTS false) SELECT * FROM ONLY p1 WHERE id >= 50 AND id <= 51 AND p1.ctid = '(1,1)';
426 /*+NestLoop(p1 t1)*/
427 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;
428 /*+MergeJoin(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 /*+HashJoin(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
433 SET constraint_exclusion TO off;
434 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;
435 SET constraint_exclusion TO on;
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 off;
438 /*+SeqScan(p1)*/
439 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;
440 /*+IndexScan(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 /*+BitmapScan(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 /*+TidScan(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 SET constraint_exclusion TO on;
447 /*+SeqScan(p1)*/
448 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;
449 /*+IndexScan(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 /*+BitmapScan(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 /*+TidScan(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
456 -- quote test
457 /*+SeqScan("""t1 )      ")IndexScan("t  2 """)HashJoin("""t1 )  "T3"t   2 """)Leading("""t1 )   "T3"t   2 """)Set(application_name"a    a       a""     a       A")*/
458 EXPLAIN (COSTS false) SELECT * FROM t1 """t1 )  ", t2 "t        2 """, t3 "T3" WHERE """t1 )    ".id = "t       2 """.id AND """t1 )    ".id = "T3".id;
459
460 -- duplicate hint test
461 /*+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)*/
462 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
463
464 -- sub query Leading hint test
465 SET from_collapse_limit TO 100;
466 SET geqo_threshold TO 100;
467 EXPLAIN (COSTS false)
468 WITH c1_1(id) AS (
469 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
470 )
471 SELECT t1_1.id, (
472 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
473 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
474 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
475 ) 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 = (
476 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 
477 );
478 /*+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)*/
479 EXPLAIN (COSTS false)
480 WITH c1_1(id) AS (
481 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
482 )
483 SELECT t1_1.id, (
484 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
485 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
486 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
487 ) 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 = (
488 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 
489 );
490 /*+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)*/
491 EXPLAIN (COSTS false)
492 WITH c1_1(id) AS (
493 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
494 )
495 SELECT t1_1.id, (
496 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
497 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
498 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
499 ) 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 = (
500 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 
501 );
502 /*+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)*/
503 EXPLAIN (COSTS false)
504 WITH c1_1(id) AS (
505 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
506 )
507 SELECT t1_1.id, (
508 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
509 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
510 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
511 ) 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 = (
512 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 
513 );
514 /*+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)*/
515 EXPLAIN (COSTS false)
516 WITH c1_1(id) AS (
517 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
518 )
519 SELECT t1_1.id, (
520 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
521 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
522 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
523 ) 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 = (
524 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 
525 );
526
527 SET from_collapse_limit TO 1;
528 EXPLAIN (COSTS false)
529 WITH c1_1(id) AS (
530 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
531 )
532 SELECT t1_1.id, (
533 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
534 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
535 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
536 ) 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 = (
537 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 
538 );
539 /*+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)*/
540 EXPLAIN (COSTS false)
541 WITH c1_1(id) AS (
542 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
543 )
544 SELECT t1_1.id, (
545 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
546 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
547 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
548 ) 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 = (
549 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 
550 );
551 /*+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)*/
552 EXPLAIN (COSTS false)
553 WITH c1_1(id) AS (
554 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
555 )
556 SELECT t1_1.id, (
557 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
558 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
559 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
560 ) 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 = (
561 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 
562 );
563 /*+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)*/
564 EXPLAIN (COSTS false)
565 WITH c1_1(id) AS (
566 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
567 )
568 SELECT t1_1.id, (
569 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
570 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
571 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
572 ) 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 = (
573 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 
574 );
575 /*+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)*/
576 EXPLAIN (COSTS false)
577 WITH c1_1(id) AS (
578 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
579 )
580 SELECT t1_1.id, (
581 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
582 ) FROM t1 t1_1, t2 t2_1, t3 t3_1, (
583 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
584 ) 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 = (
585 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 
586 );
587
588 -- ambigous error
589 EXPLAIN (COSTS false) SELECT * FROM t1, s0.t1, t2 WHERE public.t1.id = s0.t1.id AND public.t1.id = t2.id;
590 /*+NestLoop(t1 t2)*/
591 EXPLAIN (COSTS false) SELECT * FROM t1, s0.t1, t2 WHERE public.t1.id = s0.t1.id AND public.t1.id = t2.id;
592 /*+Leading(t1 t2 t1)*/
593 EXPLAIN (COSTS false) SELECT * FROM t1, s0.t1, t2 WHERE public.t1.id = s0.t1.id AND public.t1.id = t2.id;
594
595 -- identifier length test
596 EXPLAIN (COSTS false) SELECT * FROM t1 "123456789012345678901234567890123456789012345678901234567890123" JOIN t2 ON ("123456789012345678901234567890123456789012345678901234567890123".id = t2.id) JOIN t3 ON (t2.id = t3.id);
597 /*+
598 Leading(123456789012345678901234567890123456789012345678901234567890123 t2 t3)
599 SeqScan(123456789012345678901234567890123456789012345678901234567890123)
600 MergeJoin(123456789012345678901234567890123456789012345678901234567890123 t2)
601 Set(123456789012345678901234567890123456789012345678901234567890123 1)
602 */
603 EXPLAIN (COSTS false) SELECT * FROM t1 "123456789012345678901234567890123456789012345678901234567890123" JOIN t2 ON ("123456789012345678901234567890123456789012345678901234567890123".id = t2.id) JOIN t3 ON (t2.id = t3.id);
604 /*+
605 Leading(1234567890123456789012345678901234567890123456789012345678901234 t2 t3)
606 SeqScan(1234567890123456789012345678901234567890123456789012345678901234)
607 MergeJoin(1234567890123456789012345678901234567890123456789012345678901234 t2)
608 Set(1234567890123456789012345678901234567890123456789012345678901234 1)
609 Set(cursor_tuple_fraction 0.1234567890123456789012345678901234567890123456789012345678901234)
610 */
611 EXPLAIN (COSTS false) SELECT * FROM t1 "1234567890123456789012345678901234567890123456789012345678901234" JOIN t2 ON ("1234567890123456789012345678901234567890123456789012345678901234".id = t2.id) JOIN t3 ON (t2.id = t3.id);
612 SET "123456789012345678901234567890123456789012345678901234567890123" TO 1;
613 SET "1234567890123456789012345678901234567890123456789012345678901234" TO 1;
614 SET cursor_tuple_fraction TO 1234567890123456789012345678901234567890123456789012345678901234;
615
616 -- multi error
617 /*+ Set(enable_seqscan 100)Set(seq_page_cost on)*/
618 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id;
619
620 -- debug log of candidate index to use IndexScan
621 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
622 /*+IndexScan(t5 t5_id2)*/
623 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
624 /*+IndexScan(t5 no_exist)*/
625 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
626 /*+IndexScan(t5 t5_id1 t5_id2)*/
627 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
628 /*+IndexScan(t5 no_exist t5_id2)*/
629 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
630 /*+IndexScan(t5 no_exist5 no_exist2)*/
631 EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1;
632
633 -- outer inner
634 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
635
636 /*+Leading((t1))*/
637 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
638 /*+Leading((t1 t2))*/
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 t3))*/
641 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
642
643 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.id < 10;
644 /*+Leading((t1 t2))*/
645 EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.id < 10;
646
647 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
648 /*+Leading(((t1 t2) t3))*/
649 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
650
651 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;
652 /*+Leading((((t1 t2) t3) t4))*/
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
655 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
656 /*+Leading(((t1 t2) t3))*/
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
661 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;
662 /*+Leading(((t1 t2) (t3 t4)))*/
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
665 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);
666 /*+Leading(((t1 t2) t3)) Leading(((t3 t1) t2))*/
667 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);
668 /*+Leading(((t1 t2) t3)) Leading((t1_2 t2_2))*/
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) 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
673 -- Specified outer/inner leading hint and join method hint at the same time
674 /*+Leading(((t1 t2) t3))*/
675 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
676 /*+Leading(((t1 t2) t3)) MergeJoin(t1 t2)*/
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 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 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
683 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;
684 /*+Leading(((t1 t2) t3)) MergeJoin(t3 t4)*/
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(t1 t2 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
689 /*+ Leading ( ( t1 ( t2 t3 ) ) ) */
690 EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10;
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
702 /*+Leading((t1(t2(t3(t4 t5)))))*/
703 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;
704 /*+Leading((t5(t4(t3(t2 t1)))))*/
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(((((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
719 -- regular expression
720 -- ordinary table
721 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
722 /*+ IndexScanRegexp(t5 t5_[^i].*)*/
723 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
724 /*+ IndexScanRegexp(t5 t5_id[0-9].*)*/
725 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
726 /*+ IndexScanRegexp(t5 t5[^_].*)*/
727 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
728 /*+ IndexScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/
729 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
730 /*+ IndexScan(t5 t5_id[0-9].*)*/
731 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
732 /*+ IndexOnlyScanRegexp(t5 t5_[^i].*)*/
733 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
734 /*+ IndexOnlyScanRegexp(t5 t5_id[0-9].*)*/
735 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
736 /*+ IndexOnlyScanRegexp(t5 t5[^_].*)*/
737 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
738 /*+ IndexOnlyScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/
739 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
740 /*+ IndexOnlyScan(t5 t5_id[0-9].*)*/
741 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
742 /*+ BitmapScanRegexp(t5 t5_[^i].*)*/
743 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
744 /*+ BitmapScanRegexp(t5 t5_id[0-9].*)*/
745 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
746 /*+ BitmapScanRegexp(t5 t5[^_].*)*/
747 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
748 /*+ BitmapScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/
749 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
750 /*+ BitmapScan(t5 t5_id[0-9].*)*/
751 EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1;
752
753 -- Inheritance
754 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
755 /*+ IndexScanRegexp(p1 p1_.*[^0-9]$)*/
756 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
757 /*+ IndexScanRegexp(p1 p1_.*val2.*)*/
758 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
759 /*+ IndexScanRegexp(p1 p1[^_].*)*/
760 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
761 /*+ IndexScan(p1 p1_.*val2.*)*/
762 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
763 /*+ IndexOnlyScanRegexp(p1 p1_.*[^0-9]$)*/
764 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
765 /*+ IndexOnlyScanRegexp(p1 p1_.*val2.*)*/
766 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
767 /*+ IndexOnlyScanRegexp(p1 p1[^_].*)*/
768 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
769 /*+ IndexOnlyScan(p1 p1_.*val2.*)*/
770 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
771 /*+ BitmapScanRegexp(p1 p1_.*[^0-9]$)*/
772 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
773 /*+ BitmapScanRegexp(p1 p1_.*val2.*)*/
774 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
775 /*+ BitmapScanRegexp(p1 p1[^_].*)*/
776 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
777 /*+ BitmapScan(p1 p1_.*val2.*)*/
778 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;