OSDN Git Service

1fcf4cf877eba1ea4adcc5f2ce2988efe84d9976
[pghintplan/pg_hint_plan.git] / sql / ut-A.sql
1 LOAD 'pg_hint_plan';
2 SET pg_hint_plan.enable_hint TO on;
3 SET pg_hint_plan.debug_print TO on;
4 SET client_min_messages TO LOG;
5 SET search_path TO public;
6
7 ----
8 ---- No.A-1-1 install
9 ---- No.A-2-1 uninstall
10 ----
11
12 -- No.A-1-1-3
13 CREATE EXTENSION pg_hint_plan;
14
15 -- No.A-1-2-3
16 DROP EXTENSION pg_hint_plan;
17
18 -- No.A-1-1-4
19 CREATE EXTENSION pg_hint_plan SCHEMA other_name;
20
21 CREATE EXTENSION pg_hint_plan;
22
23 ----
24 ---- No. A-5-1 comment pattern
25 ----
26
27 -- No. A-5-1-1
28 /*+SeqScan(t1)*/
29 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
30
31 -- No. A-5-1-2
32 /* +SeqScan(t1)*/
33 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
34
35 -- No. A-5-1-3
36 --+SeqScan(t1)
37 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
38
39 -- No. A-5-1-4
40 --+SeqScan(t1)
41 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
42
43 -- No. A-5-1-5
44 -- +SeqScan(t1)
45 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
46
47 -- No. A-5-1-6
48 --SeqScan(t1)
49 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
50
51 -- No. A-5-1-7
52 /*+SeqScan(t1) /* nest comment */ */
53 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
54
55 -- No. A-5-1-8
56 /* +SeqScan(t1) /* nest comment */ */
57 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
58
59 -- No. A-5-1-9
60 /*SeqScan(t1) /* nest comment */ */
61 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
62
63 ----
64 ---- No. A-5-2 hint position
65 ----
66
67 -- No. A-5-2-1
68 EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 = 1;
69 /*+SeqScan(t1)*/
70 EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 = 1;
71
72 -- No. A-5-2-2
73 EXPLAIN (COSTS false) SELECT c1, c2 AS c_2 /*+SeqScan(t1)*/ FROM s1.t1 WHERE t1.c1 = 1;
74
75 -- No. A-5-2-3
76 EXPLAIN (COSTS false) SELECT c1 AS "c1"/*+SeqScan(t1)*/ FROM s1.t1 WHERE t1.c1 = 1;
77
78 -- No. A-5-2-4
79 EXPLAIN (COSTS false) SELECT * /*+SeqScan(t1)*/ FROM s1.t1 WHERE t1.c1 = 1;
80
81 ----
82 ---- No. A-6-1 hint's table definition
83 ----
84
85 SET pg_hint_plan.enable_hint_table TO on;
86 -- No. A-6-1-1
87 \d hint_plan.hints
88
89 ----
90 ---- No. A-6-2 search condition
91 ----
92 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
93 -- No. A-6-2-1
94 INSERT INTO hint_plan.hints VALUES (
95         'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
96         '',
97         'SeqScan(t1)');
98 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
99
100 -- No. A-6-2-2
101 INSERT INTO hint_plan.hints VALUES (
102         'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
103         'psql',
104         'BitmapScan(t1)');
105 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
106 TRUNCATE hint_plan.hints;
107
108 -- No. A-6-2-3
109 INSERT INTO hint_plan.hints VALUES (
110         'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
111         'dummy_application_name',
112         'SeqScan(t1)'
113 );
114 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
115 TRUNCATE hint_plan.hints;
116
117 -- No. A-6-2-4
118 INSERT INTO hint_plan.hints VALUES (
119         'EXPLAIN (COSTS false) SELECT * FROM s1.t1;',
120         '',
121         'SeqScan(t1)'
122 );
123 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
124 TRUNCATE hint_plan.hints;
125
126 ----
127 ---- No. A-6-3 number of constant
128 ----
129
130 -- No. A-6-3-1
131 INSERT INTO hint_plan.hints VALUES (
132         'EXPLAIN (COSTS false) SELECT c1 FROM s1.t1;',
133         '',
134         'SeqScan(t1)'
135 );
136 EXPLAIN (COSTS false) SELECT c1 FROM s1.t1;
137 TRUNCATE hint_plan.hints;
138
139 -- No. A-6-3-2
140 INSERT INTO hint_plan.hints VALUES (
141         'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
142         '',
143         'SeqScan(t1)'
144 );
145 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
146 TRUNCATE hint_plan.hints;
147
148 -- No. A-6-3-3
149 INSERT INTO hint_plan.hints VALUES (
150         'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ? OR t1.c1 = ?;',
151         '',
152         'SeqScan(t1)'
153 );
154 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 OR t1.c1 = 0;
155 TRUNCATE hint_plan.hints;
156 SET pg_hint_plan.enable_hint_table TO off;
157
158 ----
159 ---- No. A-7-2 hint delimiter
160 ----
161
162 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
163 -- No. A-7-2-1
164 -- No. A-7-2-2
165 -- No. A-7-2-3
166 -- No. A-7-2-4
167 -- No. A-7-2-5
168 -- No. A-7-2-6
169 -- No. A-7-2-7
170 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
171 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
172
173 -- No. A-7-2-8
174 /*+ Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
175 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
176
177 -- No. A-7-2-9
178 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off") */
179 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
180
181 -- No. A-7-2-10
182 /*+ Set (enable_indexscan"off") Set (enable_bitmapscan"off")*/
183 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
184
185 -- No. A-7-2-11
186 /*+Set ( enable_indexscan"off")Set ( enable_bitmapscan"off")*/
187 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
188
189 -- No. A-7-2-12
190 /*+Set(enable_indexscan"off" ) Set(enable_bitmapscan"off" ) */
191 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
192
193 -- No. A-7-2-13
194 /*+Set( enable_indexscan "off" )Set( enable_bitmapscan "off" )*/
195 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
196
197 -- No. A-7-2-14
198 /*+ Set ( enable_indexscan "off" ) Set ( enable_bitmapscan "off" ) */
199 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
200
201 -- No. A-7-2-15
202 /*+     Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
203 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
204
205 -- No. A-7-2-16
206 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")        */
207 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
208
209 -- No. A-7-2-17
210 /*+     Set     (enable_indexscan"off") Set     (enable_bitmapscan"off")*/
211 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
212
213 -- No. A-7-2-18
214 /*+Set  (       enable_indexscan"off")Set       (       enable_bitmapscan"off")*/
215 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
216
217 -- No. A-7-2-19
218 /*+Set(enable_indexscan"off"    )       Set(enable_bitmapscan"off"      )       */
219 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
220
221 -- No. A-7-2-20
222 /*+Set( enable_indexscan        "off"   )Set(   enable_bitmapscan       "off"   )*/
223 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
224
225 -- No. A-7-2-21
226 /*+     Set     (       enable_indexscan        "off"   )       Set     (       enable_bitmapscan       "off"   )       */
227 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
228
229 -- No. A-7-2-22
230 /*+
231 Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
232 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
233
234 -- No. A-7-2-23
235 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")
236 */
237 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
238
239 -- No. A-7-2-24
240 /*+
241 Set
242 (enable_indexscan"off")
243 Set
244 (enable_bitmapscan"off")*/
245 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
246
247 -- No. A-7-2-25
248 /*+Set
249 (
250 enable_indexscan"off")Set
251 (
252 enable_bitmapscan"off")*/
253 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
254
255 -- No. A-7-2-26
256 /*+Set(enable_indexscan"off"
257 )
258 Set(enable_bitmapscan"off"
259 )
260 */
261 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
262
263 -- No. A-7-2-27
264 /*+Set(
265 enable_indexscan
266 "off"
267 )Set(
268 enable_bitmapscan
269 "off"
270 )*/
271 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
272
273 -- No. A-7-2-28
274 /*+
275 Set
276 (
277 enable_indexscan
278 "off"
279 )
280 Set
281 (
282 enable_bitmapscan
283 "off"
284 )
285 */
286 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
287
288 -- No. A-7-2-29
289 /*+     
290          Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
291 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
292
293 -- No. A-7-2-30
294 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")        
295          */
296 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
297
298 -- No. A-7-2-31
299 /*+     
300          Set    
301          (enable_indexscan"off")        
302          Set    
303          (enable_bitmapscan"off")*/
304 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
305
306 -- No. A-7-2-32
307 /*+Set  
308          (      
309          enable_indexscan"off")Set      
310          (      
311          enable_bitmapscan"off")*/
312 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
313
314 -- No. A-7-2-33
315 /*+Set(enable_indexscan"off"    
316          )      
317          Set(enable_bitmapscan"off"     
318          )      
319          */
320 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
321
322 -- No. A-7-2-34
323 /*+Set(         
324          enable_indexscan       
325          "off"  
326          )Set(  
327          enable_bitmapscan      
328          "off"  
329          )*/
330 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
331
332 -- No. A-7-2-35
333 /*+     
334          Set    
335          (      
336          enable_indexscan       
337          "off"  
338          )      
339          Set    
340          (      
341          enable_bitmapscan      
342          "off"  
343          )      
344          */
345 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
346
347 ----
348 ---- No. A-7-3 hint object pattern
349 ---- No. A-9-2 message object pattern
350 ----
351
352 -- No. A-7-3-1
353 -- No. A-9-2-1
354 /*+SeqScan(t)*/
355 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t WHERE t.c1 = 1;
356 /*+SeqScan(ttt)*/
357 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ttt WHERE ttt.c1 = 1;
358 /*+SeqScan("t")*/
359 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t WHERE t.c1 = 1;
360 /*+SeqScan("ttt")*/
361 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ttt WHERE ttt.c1 = 1;
362
363 -- No. A-7-3-2
364 -- No. A-9-2-2
365 /*+SeqScan(T)*/
366 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "T" WHERE "T".c1 = 1;
367 /*+SeqScan(TTT)*/
368 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "TTT" WHERE "TTT".c1 = 1;
369 /*+SeqScan("T")*/
370 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "T" WHERE "T".c1 = 1;
371 /*+SeqScan("TTT")*/
372 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "TTT" WHERE "TTT".c1 = 1;
373
374 -- No. A-7-3-3
375 -- No. A-9-2-3
376 /*+SeqScan(()*/
377 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(" WHERE "(".c1 = 1;
378 /*+SeqScan("(")*/
379 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(" WHERE "(".c1 = 1;
380
381 -- No. A-7-3-4
382 -- No. A-9-2-4
383 /*+SeqScan())*/
384 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
385 /*+SeqScan(")")*/
386 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
387 /*+SeqScan(")))")*/
388 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")))" WHERE ")))".c1 = 1;
389
390 -- No. A-7-3-5
391 -- No. A-9-2-5
392 /*+SeqScan(")*/
393 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
394 /*+SeqScan("""")*/
395 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
396 /*+SeqScan("""""""")*/
397 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """""""" WHERE """""""".c1 = 1;
398
399 -- No. A-7-3-6
400 -- No. A-9-2-6
401 /*+SeqScan( )*/
402 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
403 /*+SeqScan(" ")*/
404 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
405 /*+SeqScan("   ")*/
406 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "   " WHERE "   ".c1 = 1;
407
408 -- No. A-7-3-7
409 -- No. A-9-2-7
410 /*+SeqScan(     )*/
411 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "     " WHERE "       ".c1 = 1;
412 /*+SeqScan("    ")*/
413 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "     " WHERE "       ".c1 = 1;
414 /*+SeqScan("                    ")*/
415 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "                     " WHERE "                       ".c1 = 1;
416
417 -- No. A-7-3-8
418 -- No. A-9-2-8
419 /*+SeqScan(
420 )*/
421 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
422 " WHERE "
423 ".c1 = 1;
424 /*+SeqScan("
425 ")*/
426 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
427 " WHERE "
428 ".c1 = 1;
429 /*+SeqScan("
430
431
432 ")*/
433 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
434
435
436 " WHERE "
437
438
439 ".c1 = 1;
440
441 -- No. A-7-3-9
442 -- No. A-9-2-9
443 /*+SeqScan(Set)*/
444 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
445 /*+SeqScan("Set")*/
446 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
447 /*+SeqScan("Set SeqScan Leading")*/
448 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set SeqScan Leading" WHERE "Set SeqScan Leading".c1 = 1;
449
450 -- No. A-7-3-10
451 -- No. A-9-2-10
452 /*+SeqScan(あ)*/
453 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あ WHERE あ.c1 = 1;
454 /*+SeqScan(あいう)*/
455 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あいう WHERE あいう.c1 = 1;
456 /*+SeqScan("あ")*/
457 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あ WHERE あ.c1 = 1;
458 /*+SeqScan("あいう")*/
459 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あいう WHERE あいう.c1 = 1;
460
461 -- No. A-7-3-11
462 -- No. A-9-2-11
463 /*+SeqScan(/**/)*/
464 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**/" WHERE "/**/".c1 = 1;
465 /*+SeqScan(/**//**//**/)*/
466 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**//**//**/" WHERE "/**//**//**/".c1 = 1;
467
468 -- No. A-7-3-12
469 -- No. A-9-2-12
470 /*+SeqScan("tT()""      
471 Set/**/あ")*/
472 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""       
473 Set/**/あ" WHERE "tT()""       
474 Set/**/あ".c1 = 1;
475 --"
476
477 /*+SeqScan("tT()""      
478 Setあ")*/
479 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""       
480 Setあ" WHERE "tT()""   
481 Setあ".c1 = 1;
482
483 ----
484 ---- No. A-7-4 hint parse error
485 ----
486
487 -- No. A-7-4-1
488 /*+Set(enable_indexscan off)Set enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
489 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
490
491 -- No. A-7-4-2
492 /*+Set(enable_indexscan off)Set(enable_tidscan off Set(enable_bitmapscan off)SeqScan(t1)*/
493 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
494
495 -- No. A-7-4-3
496 /*+Set(enable_indexscan off)Set(enable_tidscan "off)Set(enable_bitmapscan off)SeqScan(t1)*/
497 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
498
499 -- No. A-7-4-4
500 /*+Set(enable_indexscan off)SeqScan("")Set(enable_bitmapscan off)*/
501 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
502
503 -- No. A-7-4-5
504 /*+Set(enable_indexscan off)NoSet(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
505 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
506
507 -- No. A-7-4-6
508 /*+Set(enable_indexscan off)"Set"(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
509 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
510
511 -- No. A-7-4-7
512 /*+Set(enable_indexscan off)Set(enable_tidscan /* value */off)Set(enable_bitmapscan off)SeqScan(t1)*/
513 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
514
515 ----
516 ---- No. A-8-1 original GUC parameter
517 ----
518
519 -- No. A-8-1-1
520 SET ROLE super_user;
521 SET pg_hint_plan.debug_print TO off;
522 SHOW pg_hint_plan.enable_hint;
523 SHOW pg_hint_plan.debug_print;
524 SHOW pg_hint_plan.parse_messages;
525 SET pg_hint_plan.enable_hint TO off;
526 SET pg_hint_plan.debug_print TO on;
527 SET pg_hint_plan.parse_messages TO error;
528 SHOW pg_hint_plan.enable_hint;
529 SHOW pg_hint_plan.debug_print;
530 SHOW pg_hint_plan.parse_messages;
531 RESET pg_hint_plan.enable_hint;
532 RESET pg_hint_plan.debug_print;
533 RESET pg_hint_plan.parse_messages;
534 SHOW pg_hint_plan.enable_hint;
535 SHOW pg_hint_plan.debug_print;
536 SHOW pg_hint_plan.parse_messages;
537
538 -- No. A-8-1-2
539 SET ROLE normal_user;
540 SHOW pg_hint_plan.enable_hint;
541 SHOW pg_hint_plan.debug_print;
542 SHOW pg_hint_plan.parse_messages;
543 SET pg_hint_plan.enable_hint TO off;
544 SET pg_hint_plan.debug_print TO on;
545 SET pg_hint_plan.parse_messages TO error;
546 SHOW pg_hint_plan.enable_hint;
547 SHOW pg_hint_plan.debug_print;
548 SHOW pg_hint_plan.parse_messages;
549 RESET pg_hint_plan.enable_hint;
550 RESET pg_hint_plan.debug_print;
551 RESET pg_hint_plan.parse_messages;
552 SHOW pg_hint_plan.enable_hint;
553 SHOW pg_hint_plan.debug_print;
554 SHOW pg_hint_plan.parse_messages;
555
556 RESET ROLE;
557
558 ----
559 ---- No. A-8-2 original GUC parameter pg_hint_plan.enable_hint
560 ----
561
562 -- No. A-8-2-1
563 SET pg_hint_plan.enable_hint TO on;
564 SHOW pg_hint_plan.enable_hint;
565 /*+Set(enable_indexscan off)*/
566 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
567
568 -- No. A-8-2-2
569 SET pg_hint_plan.enable_hint TO off;
570 SHOW pg_hint_plan.enable_hint;
571 /*+Set(enable_indexscan off)*/
572 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
573
574 -- No. A-8-2-3
575 SET pg_hint_plan.enable_hint TO DEFAULT;
576 SHOW pg_hint_plan.enable_hint;
577 /*+Set(enable_indexscan off)*/
578 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
579
580 -- No. A-8-2-4
581 SET pg_hint_plan.enable_hint TO enable;
582 SHOW pg_hint_plan.enable_hint;
583
584 ----
585 ---- No. A-8-3 original GUC parameter pg_hint_plan.debug_print
586 ----
587
588 -- No. A-8-3-1
589 SET pg_hint_plan.debug_print TO on;
590 SHOW pg_hint_plan.debug_print;
591 /*+Set(enable_indexscan off)*/
592 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
593
594 -- No. A-8-3-2
595 SET pg_hint_plan.debug_print TO off;
596 SHOW pg_hint_plan.debug_print;
597 /*+Set(enable_indexscan off)*/
598 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
599
600 -- No. A-8-3-3
601 SET pg_hint_plan.debug_print TO DEFAULT;
602 SHOW pg_hint_plan.debug_print;
603 /*+Set(enable_indexscan off)*/
604 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
605
606 -- No. A-8-3-4
607 SET pg_hint_plan.debug_print TO enable;
608 SHOW pg_hint_plan.debug_print;
609
610 ----
611 ---- No. A-8-4 original GUC parameter pg_hint_plan.parse_messages
612 ----
613
614 SET client_min_messages TO debug5;
615
616 -- No. A-8-4-1
617 SET pg_hint_plan.parse_messages TO debug5;
618 SHOW pg_hint_plan.parse_messages;
619 /*+Set*/SELECT 1;
620 SET client_min_messages TO debug4;
621 /*+Set*/SELECT 1;
622
623 -- No. A-8-4-2
624 SET pg_hint_plan.parse_messages TO debug4;
625 SHOW pg_hint_plan.parse_messages;
626 /*+Set*/SELECT 1;
627 SET client_min_messages TO debug3;
628 /*+Set*/SELECT 1;
629
630 -- No. A-8-4-3
631 SET pg_hint_plan.parse_messages TO debug3;
632 SHOW pg_hint_plan.parse_messages;
633 /*+Set*/SELECT 1;
634 SET client_min_messages TO debug2;
635 /*+Set*/SELECT 1;
636
637 -- No. A-8-4-4
638 SET pg_hint_plan.parse_messages TO debug2;
639 SHOW pg_hint_plan.parse_messages;
640 /*+Set*/SELECT 1;
641 SET client_min_messages TO debug1;
642 /*+Set*/SELECT 1;
643
644 -- No. A-8-4-5
645 SET pg_hint_plan.parse_messages TO debug1;
646 SHOW pg_hint_plan.parse_messages;
647 /*+Set*/SELECT 1;
648 SET client_min_messages TO log;
649 /*+Set*/SELECT 1;
650
651 -- No. A-8-4-6
652 SET pg_hint_plan.parse_messages TO log;
653 SHOW pg_hint_plan.parse_messages;
654 /*+Set*/SELECT 1;
655 SET client_min_messages TO info;
656 /*+Set*/SELECT 1;
657
658 -- No. A-8-4-7
659 SET pg_hint_plan.parse_messages TO info;
660 SHOW pg_hint_plan.parse_messages;
661 /*+Set*/SELECT 1;
662 SET client_min_messages TO notice;
663 /*+Set*/SELECT 1;
664
665 -- No. A-8-4-8
666 SET pg_hint_plan.parse_messages TO notice;
667 SHOW pg_hint_plan.parse_messages;
668 /*+Set*/SELECT 1;
669 SET client_min_messages TO warning;
670 /*+Set*/SELECT 1;
671
672 -- No. A-8-4-9
673 SET pg_hint_plan.parse_messages TO warning;
674 SHOW pg_hint_plan.parse_messages;
675 /*+Set*/SELECT 1;
676 SET client_min_messages TO error;
677 /*+Set*/SELECT 1;
678
679 -- No. A-8-4-10
680 SET pg_hint_plan.parse_messages TO error;
681 SHOW pg_hint_plan.parse_messages;
682 /*+Set*/SELECT 1;
683 SET client_min_messages TO fatal;
684 /*+Set*/SELECT 1;
685
686 -- No. A-8-4-11
687 RESET client_min_messages;
688 SET pg_hint_plan.parse_messages TO DEFAULT;
689 SHOW pg_hint_plan.parse_messages;
690 /*+Set*/SELECT 1;
691
692 -- No. A-8-4-12
693 SET pg_hint_plan.parse_messages TO fatal;
694 SHOW pg_hint_plan.parse_messages;
695
696 -- No. A-8-4-13
697 SET pg_hint_plan.parse_messages TO panic;
698 SHOW pg_hint_plan.parse_messages;
699
700 -- No. A-8-4-14
701 SET pg_hint_plan.parse_messages TO on;
702 SHOW pg_hint_plan.parse_messages;
703
704 ----
705 ---- No. A-8-5 original GUC parameter pg_hint_plan.enable_hint_table
706 ----
707
708 INSERT INTO hint_plan.hints VALUES (
709         'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
710         '',
711         'SeqScan(t1)');
712
713 -- No. A-8-5-1
714 SET pg_hint_plan.enable_hint_table TO on;
715 SHOW pg_hint_plan.enable_hint_table;
716 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
717
718 -- No. A-8-5-2
719 SET pg_hint_plan.enable_hint_table TO off;
720 SHOW pg_hint_plan.enable_hint_table;
721 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
722
723 -- No. A-8-5-3
724 SET pg_hint_plan.enable_hint_table TO DEFAULT;
725 SHOW pg_hint_plan.enable_hint_table;
726 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
727
728 -- No. A-8-5-4
729 SET pg_hint_plan.enable_hint_table TO enable;
730 SHOW pg_hint_plan.enable_hint_table;
731
732 TRUNCATE hint_plan.hints;
733
734 ----
735 ---- No. A-9-1 parse error message output
736 ----
737
738 -- No. A-9-1-1
739 /*+"Set"(enable_indexscan on)*/SELECT 1;
740 /*+Set()(enable_indexscan on)*/SELECT 1;
741 /*+Set(enable_indexscan on*/SELECT 1;
742
743 ----
744 ---- No. A-9-3 hint state output
745 ----
746
747 SET pg_hint_plan.debug_print TO on;
748 SET client_min_messages TO LOG;
749
750 -- No. A-9-3-1
751 /*+SeqScan(t1)*/
752 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
753
754 -- No. A-9-3-2
755 /*+SeqScan(no_table)*/
756 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
757
758 -- No. A-9-3-3
759 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
760 /*+TidScan(t1)BitmapScan(t1)*/
761 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
762 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)*/
763 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
764 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)SeqScan(t1)*/
765 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
766
767 -- No. A-9-3-4
768 /*+Set(enable_indexscan enable)*/
769 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
770
771 ----
772 ---- No. A-10-1 hint state output
773 ----
774
775 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
776 EXPLAIN (COSTS false) EXECUTE p1;
777 DEALLOCATE p1;
778
779 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
780 EXPLAIN (COSTS false) EXECUTE p1 (1000);
781 EXPLAIN (COSTS false) EXECUTE p1 (1000);
782 EXPLAIN (COSTS false) EXECUTE p1 (1000);
783 EXPLAIN (COSTS false) EXECUTE p1 (1000);
784 EXPLAIN (COSTS false) EXECUTE p1 (1000);
785 EXPLAIN (COSTS false) EXECUTE p1 (1000);
786 DEALLOCATE p1;
787
788 -- No. A-10-1-1
789 -- No. A-10-1-2
790 /*+SeqScan(t1)*/
791 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
792 /*+BitmapScan(t1)*/
793 EXPLAIN (COSTS false) EXECUTE p1;
794 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
795 /*+BitmapScan(t1)*/
796 EXPLAIN (COSTS false) EXECUTE p1;
797 DEALLOCATE p1;
798
799 /*+BitmapScan(t1)*/
800 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
801 /*+SeqScan(t1)*/
802 EXPLAIN (COSTS false) EXECUTE p1 (1000);
803 /*+SeqScan(t1)*/
804 EXPLAIN (COSTS false) EXECUTE p1 (1000);
805 /*+SeqScan(t1)*/
806 EXPLAIN (COSTS false) EXECUTE p1 (1000);
807 /*+SeqScan(t1)*/
808 EXPLAIN (COSTS false) EXECUTE p1 (1000);
809 /*+SeqScan(t1)*/
810 EXPLAIN (COSTS false) EXECUTE p1 (1000);
811 /*+SeqScan(t1)*/
812 EXPLAIN (COSTS false) EXECUTE p1 (1000);
813 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
814 /*+SeqScan(t1)*/
815 EXPLAIN (COSTS false) EXECUTE p1 (1000);
816 DEALLOCATE p1;
817
818 -- No. A-10-1-3
819 -- No. A-10-1-4
820 /*+SeqScan(t1)*/
821 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
822 EXPLAIN (COSTS false) EXECUTE p1;
823 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
824 EXPLAIN (COSTS false) EXECUTE p1;
825 DEALLOCATE p1;
826
827 /*+BitmapScan(t1)*/
828 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
829 EXPLAIN (COSTS false) EXECUTE p1 (1000);
830 EXPLAIN (COSTS false) EXECUTE p1 (1000);
831 EXPLAIN (COSTS false) EXECUTE p1 (1000);
832 EXPLAIN (COSTS false) EXECUTE p1 (1000);
833 EXPLAIN (COSTS false) EXECUTE p1 (1000);
834 EXPLAIN (COSTS false) EXECUTE p1 (1000);
835 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
836 EXPLAIN (COSTS false) EXECUTE p1 (1000);
837 DEALLOCATE p1;
838
839 -- No. A-10-1-5
840 -- No. A-10-1-6
841 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
842 /*+BitmapScan(t1)*/
843 EXPLAIN (COSTS false) EXECUTE p1;
844 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
845 /*+BitmapScan(t1)*/
846 EXPLAIN (COSTS false) EXECUTE p1;
847 DEALLOCATE p1;
848
849 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
850 /*+BitmapScan(t1)*/
851 EXPLAIN (COSTS false) EXECUTE p1 (1000);
852 EXPLAIN (COSTS false) EXECUTE p1 (1000);
853 EXPLAIN (COSTS false) EXECUTE p1 (1000);
854 EXPLAIN (COSTS false) EXECUTE p1 (1000);
855 EXPLAIN (COSTS false) EXECUTE p1 (1000);
856 EXPLAIN (COSTS false) EXECUTE p1 (1000);
857 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
858 /*+BitmapScan(t1)*/
859 EXPLAIN (COSTS false) EXECUTE p1 (1000);
860 DEALLOCATE p1;
861
862 -- No. A-10-1-9
863 -- No. A-10-1-10
864 /*+SeqScan(t1)*/
865 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
866 /*+BitmapScan(t1)*/
867 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
868 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
869 /*+BitmapScan(t1)*/
870 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
871 DEALLOCATE p1;
872
873 /*+BitmapScan(t1)*/
874 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
875 /*+SeqScan(t1)*/
876 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
877 /*+SeqScan(t1)*/
878 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
879 /*+SeqScan(t1)*/
880 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
881 /*+SeqScan(t1)*/
882 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
883 /*+SeqScan(t1)*/
884 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
885 /*+SeqScan(t1)*/
886 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
887 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
888 /*+SeqScan(t1)*/
889 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
890 DEALLOCATE p1;
891
892 -- No. A-10-1-11
893 -- No. A-10-1-12
894 /*+SeqScan(t1)*/
895 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
896 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
897 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
898 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
899 DEALLOCATE p1;
900
901 /*+BitmapScan(t1)*/
902 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
903 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
904 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
905 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
906 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
907 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
908 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
909 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
910 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
911 DEALLOCATE p1;
912
913 -- No. A-10-1-13
914 -- No. A-10-1-14
915 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
916 /*+BitmapScan(t1)*/
917 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
918 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
919 /*+BitmapScan(t1)*/
920 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
921 DEALLOCATE p1;
922
923 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
924 /*+BitmapScan(t1)*/
925 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
926 /*+BitmapScan(t1)*/
927 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
928 /*+BitmapScan(t1)*/
929 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
930 /*+BitmapScan(t1)*/
931 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
932 /*+BitmapScan(t1)*/
933 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
934 /*+BitmapScan(t1)*/
935 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
936 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
937 /*+BitmapScan(t1)*/
938 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
939 DEALLOCATE p1;
940
941 ----
942 ---- No. A-10-4 EXECUTE statement name error
943 ----
944
945 -- No. A-10-4-1
946 EXECUTE p1;
947 SHOW pg_hint_plan.debug_print;
948
949 ----
950 ---- No. A-11-5 EXECUTE statement name error
951 ----
952
953 -- No. A-11-5-1
954 SELECT pg_stat_statements_reset();
955 SELECT * FROM s1.t1 WHERE t1.c1 = 1;
956 /*+Set(enable_seqscan off)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
957 /*+SeqScan(t1)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
958 SELECT s.query, s.calls
959   FROM public.pg_stat_statements s
960   JOIN pg_catalog.pg_database d
961     ON (s.dbid = d.oid)
962  ORDER BY 1;
963
964 ----
965 ---- No. A-12-1 reset of global variable of core at the error
966 ---- No. A-12-2 reset of global variable of original at the error
967 ----
968
969 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
970 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
971 PREPARE p1 AS SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
972 EXPLAIN (COSTS false) EXECUTE p1;
973
974 -- No. A-12-1-1
975 -- No. A-12-2-1
976 SELECT name, setting FROM settings;
977 SET pg_hint_plan.parse_messages TO error;
978 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
979 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
980 SELECT name, setting FROM settings;
981 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
982 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
983
984 -- No. A-12-1-2
985 -- No. A-12-2-2
986 SELECT name, setting FROM settings;
987 SET pg_hint_plan.parse_messages TO error;
988 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
989 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
990 SELECT name, setting FROM settings;
991 EXPLAIN (COSTS false) EXECUTE p1;
992
993 -- No. A-12-1-3
994 -- No. A-12-2-3
995 SELECT name, setting FROM settings;
996 SET pg_hint_plan.parse_messages TO error;
997 EXPLAIN (COSTS false) EXECUTE p2;
998 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
999 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1000 EXPLAIN (COSTS false) EXECUTE p1;
1001 SELECT name, setting FROM settings;
1002
1003 -- No. A-12-1-4
1004 -- No. A-12-2-4
1005 SELECT name, setting FROM settings;
1006 SET pg_hint_plan.parse_messages TO error;
1007 EXPLAIN (COSTS false) EXECUTE p2;
1008 EXPLAIN (COSTS false) EXECUTE p1;
1009 SELECT name, setting FROM settings;
1010
1011 DEALLOCATE p1;
1012 SET pg_hint_plan.parse_messages TO LOG;
1013
1014 ----
1015 ---- No. A-12-3 effective range of the hint
1016 ----
1017
1018 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1019
1020 -- No. A-12-3-1
1021 SET enable_indexscan TO off;
1022 SET enable_mergejoin TO off;
1023 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1024 SELECT name, setting FROM settings;
1025 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
1026 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1027 SELECT name, setting FROM settings;
1028 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1029
1030 -- No. A-12-3-2
1031 SET enable_indexscan TO off;
1032 SET enable_mergejoin TO off;
1033 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1034 SELECT name, setting FROM settings;
1035 BEGIN;
1036 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
1037 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1038 COMMIT;
1039 BEGIN;
1040 SELECT name, setting FROM settings;
1041 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1042 COMMIT;
1043
1044 -- No. A-12-3-3
1045 SET enable_indexscan TO off;
1046 SET enable_mergejoin TO off;
1047 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1048 SELECT name, setting FROM settings;
1049 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
1050 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1051 \connect
1052 SET enable_indexscan TO off;
1053 SET enable_mergejoin TO off;
1054 LOAD 'pg_hint_plan';
1055 SELECT name, setting FROM settings;
1056 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1057
1058 SET pg_hint_plan.enable_hint TO on;
1059 SET pg_hint_plan.debug_print TO on;
1060 SET client_min_messages TO LOG;
1061 SET search_path TO public;
1062 RESET enable_indexscan;
1063 RESET enable_mergejoin;
1064
1065 ----
1066 ---- No. A-13 call planner recursively
1067 ----
1068
1069 CREATE OR REPLACE FUNCTION nested_planner(cnt int) RETURNS int AS $$
1070 DECLARE
1071     new_cnt int;
1072 BEGIN
1073     RAISE NOTICE 'nested_planner(%)', cnt;
1074
1075     /* 再帰終了の判断 */
1076     IF cnt <= 1 THEN
1077         RETURN 0;
1078     END IF;
1079
1080     EXECUTE '/*+ IndexScan(t_1) */'
1081             ' SELECT nested_planner($1) FROM s1.t1 t_1'
1082             ' JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)'
1083             ' ORDER BY t_1.c1 LIMIT 1'
1084         INTO new_cnt USING cnt - 1;
1085
1086     RETURN new_cnt;
1087 END;
1088 $$ LANGUAGE plpgsql IMMUTABLE;
1089
1090 ----
1091 ---- No. A-13-2 use hint of main query
1092 ----
1093
1094 --No.13-2-1
1095 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1096 /*+SeqScan(t_1)*/
1097 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1098
1099 ----
1100 ---- No. A-13-3 output number of times of debugging log
1101 ----
1102
1103 --No.13-3-1
1104 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1105 /*+SeqScan(t_2)*/
1106 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1107
1108 --No.13-3-2
1109 EXPLAIN (COSTS false) SELECT nested_planner(2) FROM s1.t1 t_1 ORDER BY t_1.c1;
1110 /*+SeqScan(t_2)*/
1111 EXPLAIN (COSTS false) SELECT nested_planner(2) FROM s1.t1 t_1 ORDER BY t_1.c1;
1112
1113 --No.13-3-3
1114 EXPLAIN (COSTS false) SELECT nested_planner(5) FROM s1.t1 t_1 ORDER BY t_1.c1;
1115 /*+SeqScan(t_2)*/
1116 EXPLAIN (COSTS false) SELECT nested_planner(5) FROM s1.t1 t_1 ORDER BY t_1.c1;
1117
1118 ----
1119 ---- No. A-13-4 output of debugging log on hint status
1120 ----
1121
1122 --No.13-4-1
1123 /*+HashJoin(t_1 t_2)*/
1124 EXPLAIN (COSTS false)
1125  SELECT nested_planner(2) FROM s1.t1 t_1
1126    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1127   ORDER BY t_1.c1;
1128
1129 --No.13-4-2
1130 /*+HashJoin(st_1 st_2)*/
1131 EXPLAIN (COSTS false)
1132  SELECT nested_planner(2) FROM s1.t1 st_1
1133    JOIN s1.t2 st_2 ON (st_1.c1 = st_2.c1)
1134   ORDER BY st_1.c1;
1135
1136 --No.13-4-3
1137 /*+HashJoin(t_1 t_2)*/
1138 EXPLAIN (COSTS false)
1139  SELECT nested_planner(2) FROM s1.t1 st_1
1140    JOIN s1.t2 st_2 ON (st_1.c1 = st_2.c1)
1141   ORDER BY st_1.c1;
1142
1143 --No.13-4-4
1144 /*+HashJoin(st_1 st_2)*/
1145 EXPLAIN (COSTS false)
1146  SELECT nested_planner(2) FROM s1.t1 t_1
1147    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1148   ORDER BY t_1.c1;
1149
1150 --No.13-4-5
1151 /*+HashJoin(t_1 t_1)*/
1152 EXPLAIN (COSTS false)
1153  SELECT nested_planner(2) FROM s1.t1 t_1
1154   ORDER BY t_1.c1;
1155
1156 --No.13-4-6
1157 CREATE OR REPLACE FUNCTION nested_planner_one_t(cnt int) RETURNS int AS $$
1158 DECLARE
1159     new_cnt int;
1160 BEGIN
1161     RAISE NOTICE 'nested_planner_one_t(%)', cnt;
1162
1163     IF cnt <= 1 THEN
1164         RETURN 0;
1165     END IF;
1166
1167     EXECUTE '/*+ IndexScan(t_1) */'
1168             ' SELECT nested_planner_one_t($1) FROM s1.t1 t_1'
1169             ' ORDER BY t_1.c1 LIMIT 1'
1170         INTO new_cnt USING cnt - 1;
1171
1172     RETURN new_cnt;
1173 END;
1174 $$ LANGUAGE plpgsql IMMUTABLE;
1175
1176 EXPLAIN (COSTS false)
1177  SELECT nested_planner_one_t(2) FROM s1.t1 t_1
1178    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1179   ORDER BY t_1.c1;
1180 /*+HashJoin(t_1 t_1)*/
1181 EXPLAIN (COSTS false)
1182  SELECT nested_planner_one_t(2) FROM s1.t1 t_1
1183    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1184   ORDER BY t_1.c1;
1185
1186 DROP FUNCTION nested_planner_one_t(int);
1187
1188 --No.13-4-7
1189 /*+HashJoin(t_1 t_1)*/
1190 EXPLAIN (COSTS false)
1191  SELECT nested_planner(2) FROM s1.t1 t_1
1192    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1193   ORDER BY t_1.c1;
1194
1195 --No.13-4-8
1196 /*+MergeJoin(t_1 t_2)HashJoin(t_1 t_2)*/
1197 EXPLAIN (COSTS false)
1198  SELECT nested_planner(2) FROM s1.t1 t_1
1199    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1200   ORDER BY t_1.c1;