OSDN Git Service

99af9efc63c2938cd0f8a998aea8fe3b6c3602b9
[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 /*+SeqScan("(")*/
381 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(" WHERE "(".c1 = 1;
382 /*+SeqScan("(((")*/
383 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(((" WHERE "(((".c1 = 1;
384
385 -- No. A-7-3-4
386 -- No. A-9-2-4
387 /*+SeqScan())*/
388 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
389 /*+SeqScan(")")*/
390 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
391 /*+SeqScan(")))")*/
392 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")))" WHERE ")))".c1 = 1;
393
394 -- No. A-7-3-5
395 -- No. A-9-2-5
396 /*+SeqScan(")*/
397 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
398 /*+SeqScan("""")*/
399 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
400 /*+SeqScan("""""""")*/
401 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """""""" WHERE """""""".c1 = 1;
402
403 -- No. A-7-3-6
404 -- No. A-9-2-6
405 /*+SeqScan( )*/
406 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
407 /*+SeqScan(" ")*/
408 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
409 /*+SeqScan("   ")*/
410 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "   " WHERE "   ".c1 = 1;
411
412 -- No. A-7-3-7
413 -- No. A-9-2-7
414 /*+SeqScan(     )*/
415 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "     " WHERE "       ".c1 = 1;
416 /*+SeqScan("    ")*/
417 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "     " WHERE "       ".c1 = 1;
418 /*+SeqScan("                    ")*/
419 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "                     " WHERE "                       ".c1 = 1;
420
421 -- No. A-7-3-8
422 -- No. A-9-2-8
423 /*+SeqScan(
424 )*/
425 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
426 " WHERE "
427 ".c1 = 1;
428 /*+SeqScan("
429 ")*/
430 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
431 " WHERE "
432 ".c1 = 1;
433 /*+SeqScan("
434
435
436 ")*/
437 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
438
439
440 " WHERE "
441
442
443 ".c1 = 1;
444
445 -- No. A-7-3-9
446 -- No. A-9-2-9
447 /*+SeqScan(Set)*/
448 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
449 /*+SeqScan("Set")*/
450 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
451 /*+SeqScan("Set SeqScan Leading")*/
452 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set SeqScan Leading" WHERE "Set SeqScan Leading".c1 = 1;
453
454 -- No. A-7-3-10
455 -- No. A-9-2-10
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 /*+SeqScan("あ")*/
461 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あ WHERE あ.c1 = 1;
462 /*+SeqScan("あいう")*/
463 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あいう WHERE あいう.c1 = 1;
464
465 -- No. A-7-3-11
466 -- No. A-9-2-11
467 /*+SeqScan(/**/)*/
468 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**/" WHERE "/**/".c1 = 1;
469 /*+SeqScan(/**//**//**/)*/
470 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**//**//**/" WHERE "/**//**//**/".c1 = 1;
471
472 -- No. A-7-3-12
473 -- No. A-9-2-12
474 /*+SeqScan("tT()""      
475 Set/**/あ")*/
476 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""       
477 Set/**/あ" WHERE "tT()""       
478 Set/**/あ".c1 = 1;
479 --"
480
481 /*+SeqScan("tT()""      
482 Setあ")*/
483 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""       
484 Setあ" WHERE "tT()""   
485 Setあ".c1 = 1;
486
487 ----
488 ---- No. A-7-4 hint parse error
489 ----
490
491 -- No. A-7-4-1
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-2
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-3
500 /*+Set(enable_indexscan off)Set(enable_tidscan "off)Set(enable_bitmapscan off)SeqScan(t1)*/
501 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
502
503 -- No. A-7-4-4
504 /*+Set(enable_indexscan off)SeqScan("")Set(enable_bitmapscan off)*/
505 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
506
507 -- No. A-7-4-5
508 /*+Set(enable_indexscan off)NoSet(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-6
512 /*+Set(enable_indexscan off)"Set"(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
513 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
514
515 -- No. A-7-4-7
516 /*+Set(enable_indexscan off)Set(enable_tidscan /* value */off)Set(enable_bitmapscan off)SeqScan(t1)*/
517 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
518
519 ----
520 ---- No. A-8-1 original GUC parameter
521 ----
522
523 -- No. A-8-1-1
524 SET ROLE super_user;
525 SET pg_hint_plan.debug_print TO off;
526 SHOW pg_hint_plan.enable_hint;
527 SHOW pg_hint_plan.debug_print;
528 SHOW pg_hint_plan.parse_messages;
529 SET pg_hint_plan.enable_hint TO off;
530 SET pg_hint_plan.debug_print TO on;
531 SET pg_hint_plan.parse_messages TO error;
532 SHOW pg_hint_plan.enable_hint;
533 SHOW pg_hint_plan.debug_print;
534 SHOW pg_hint_plan.parse_messages;
535 RESET pg_hint_plan.enable_hint;
536 RESET pg_hint_plan.debug_print;
537 RESET pg_hint_plan.parse_messages;
538 SHOW pg_hint_plan.enable_hint;
539 SHOW pg_hint_plan.debug_print;
540 SHOW pg_hint_plan.parse_messages;
541
542 -- No. A-8-1-2
543 SET ROLE normal_user;
544 SHOW pg_hint_plan.enable_hint;
545 SHOW pg_hint_plan.debug_print;
546 SHOW pg_hint_plan.parse_messages;
547 SET pg_hint_plan.enable_hint TO off;
548 SET pg_hint_plan.debug_print TO on;
549 SET pg_hint_plan.parse_messages TO error;
550 SHOW pg_hint_plan.enable_hint;
551 SHOW pg_hint_plan.debug_print;
552 SHOW pg_hint_plan.parse_messages;
553 RESET pg_hint_plan.enable_hint;
554 RESET pg_hint_plan.debug_print;
555 RESET pg_hint_plan.parse_messages;
556 SHOW pg_hint_plan.enable_hint;
557 SHOW pg_hint_plan.debug_print;
558 SHOW pg_hint_plan.parse_messages;
559
560 RESET ROLE;
561
562 ----
563 ---- No. A-8-2 original GUC parameter pg_hint_plan.enable_hint
564 ----
565
566 -- No. A-8-2-1
567 SET pg_hint_plan.enable_hint TO on;
568 SHOW pg_hint_plan.enable_hint;
569 /*+Set(enable_indexscan off)*/
570 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
571
572 -- No. A-8-2-2
573 SET pg_hint_plan.enable_hint TO off;
574 SHOW pg_hint_plan.enable_hint;
575 /*+Set(enable_indexscan off)*/
576 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
577
578 -- No. A-8-2-3
579 SET pg_hint_plan.enable_hint TO DEFAULT;
580 SHOW pg_hint_plan.enable_hint;
581 /*+Set(enable_indexscan off)*/
582 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
583
584 -- No. A-8-2-4
585 SET pg_hint_plan.enable_hint TO enable;
586 SHOW pg_hint_plan.enable_hint;
587
588 ----
589 ---- No. A-8-3 original GUC parameter pg_hint_plan.debug_print
590 ----
591
592 -- No. A-8-3-1
593 SET pg_hint_plan.debug_print TO on;
594 SHOW pg_hint_plan.debug_print;
595 /*+Set(enable_indexscan off)*/
596 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
597
598 -- No. A-8-3-2
599 SET pg_hint_plan.debug_print TO off;
600 SHOW pg_hint_plan.debug_print;
601 /*+Set(enable_indexscan off)*/
602 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
603
604 -- No. A-8-3-3
605 SET pg_hint_plan.debug_print TO DEFAULT;
606 SHOW pg_hint_plan.debug_print;
607 /*+Set(enable_indexscan off)*/
608 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
609
610 -- No. A-8-3-4
611 SET pg_hint_plan.debug_print TO enable;
612 SHOW pg_hint_plan.debug_print;
613
614 ----
615 ---- No. A-8-4 original GUC parameter pg_hint_plan.parse_messages
616 ----
617
618 SET client_min_messages TO debug5;
619
620 -- No. A-8-4-1
621 SET pg_hint_plan.parse_messages TO debug5;
622 SHOW pg_hint_plan.parse_messages;
623 /*+Set*/SELECT 1;
624 SET client_min_messages TO debug4;
625 /*+Set*/SELECT 1;
626
627 -- No. A-8-4-2
628 SET pg_hint_plan.parse_messages TO debug4;
629 SHOW pg_hint_plan.parse_messages;
630 /*+Set*/SELECT 1;
631 SET client_min_messages TO debug3;
632 /*+Set*/SELECT 1;
633
634 -- No. A-8-4-3
635 SET pg_hint_plan.parse_messages TO debug3;
636 SHOW pg_hint_plan.parse_messages;
637 /*+Set*/SELECT 1;
638 SET client_min_messages TO debug2;
639 /*+Set*/SELECT 1;
640
641 -- No. A-8-4-4
642 SET pg_hint_plan.parse_messages TO debug2;
643 SHOW pg_hint_plan.parse_messages;
644 /*+Set*/SELECT 1;
645 SET client_min_messages TO debug1;
646 /*+Set*/SELECT 1;
647
648 -- No. A-8-4-5
649 SET pg_hint_plan.parse_messages TO debug1;
650 SHOW pg_hint_plan.parse_messages;
651 /*+Set*/SELECT 1;
652 SET client_min_messages TO log;
653 /*+Set*/SELECT 1;
654
655 -- No. A-8-4-6
656 SET pg_hint_plan.parse_messages TO log;
657 SHOW pg_hint_plan.parse_messages;
658 /*+Set*/SELECT 1;
659 SET client_min_messages TO info;
660 /*+Set*/SELECT 1;
661
662 -- No. A-8-4-7
663 SET pg_hint_plan.parse_messages TO info;
664 SHOW pg_hint_plan.parse_messages;
665 /*+Set*/SELECT 1;
666 SET client_min_messages TO notice;
667 /*+Set*/SELECT 1;
668
669 -- No. A-8-4-8
670 SET pg_hint_plan.parse_messages TO notice;
671 SHOW pg_hint_plan.parse_messages;
672 /*+Set*/SELECT 1;
673 SET client_min_messages TO warning;
674 /*+Set*/SELECT 1;
675
676 -- No. A-8-4-9
677 SET pg_hint_plan.parse_messages TO warning;
678 SHOW pg_hint_plan.parse_messages;
679 /*+Set*/SELECT 1;
680 SET client_min_messages TO error;
681 /*+Set*/SELECT 1;
682
683 -- No. A-8-4-10
684 SET pg_hint_plan.parse_messages TO error;
685 SHOW pg_hint_plan.parse_messages;
686 /*+Set*/SELECT 1;
687 SET client_min_messages TO fatal;
688 /*+Set*/SELECT 1;
689
690 -- No. A-8-4-11
691 RESET client_min_messages;
692 SET pg_hint_plan.parse_messages TO DEFAULT;
693 SHOW pg_hint_plan.parse_messages;
694 /*+Set*/SELECT 1;
695
696 -- No. A-8-4-12
697 SET pg_hint_plan.parse_messages TO fatal;
698 SHOW pg_hint_plan.parse_messages;
699
700 -- No. A-8-4-13
701 SET pg_hint_plan.parse_messages TO panic;
702 SHOW pg_hint_plan.parse_messages;
703
704 -- No. A-8-4-14
705 SET pg_hint_plan.parse_messages TO on;
706 SHOW pg_hint_plan.parse_messages;
707
708 ----
709 ---- No. A-8-5 original GUC parameter pg_hint_plan.enable_hint_table
710 ----
711
712 INSERT INTO hint_plan.hints VALUES (
713         'EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = ?;',
714         '',
715         'SeqScan(t1)');
716
717 -- No. A-8-5-1
718 SET pg_hint_plan.enable_hint_table TO on;
719 SHOW pg_hint_plan.enable_hint_table;
720 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
721
722 -- No. A-8-5-2
723 SET pg_hint_plan.enable_hint_table TO off;
724 SHOW pg_hint_plan.enable_hint_table;
725 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
726
727 -- No. A-8-5-3
728 SET pg_hint_plan.enable_hint_table TO DEFAULT;
729 SHOW pg_hint_plan.enable_hint_table;
730 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
731
732 -- No. A-8-5-4
733 SET pg_hint_plan.enable_hint_table TO enable;
734 SHOW pg_hint_plan.enable_hint_table;
735
736 TRUNCATE hint_plan.hints;
737
738 ----
739 ---- No. A-9-1 parse error message output
740 ----
741
742 -- No. A-9-1-1
743 /*+"Set"(enable_indexscan on)*/SELECT 1;
744 /*+Set()(enable_indexscan on)*/SELECT 1;
745 /*+Set(enable_indexscan on*/SELECT 1;
746
747 ----
748 ---- No. A-9-3 hint state output
749 ----
750
751 SET pg_hint_plan.debug_print TO on;
752 SET client_min_messages TO LOG;
753
754 -- No. A-9-3-1
755 /*+SeqScan(t1)*/
756 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
757
758 -- No. A-9-3-2
759 /*+SeqScan(no_table)*/
760 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
761
762 -- No. A-9-3-3
763 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
764 /*+TidScan(t1)BitmapScan(t1)*/
765 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
766 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)*/
767 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
768 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)SeqScan(t1)*/
769 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
770
771 -- No. A-9-3-4
772 /*+Set(enable_indexscan enable)*/
773 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
774
775 ----
776 ---- No. A-10-1 hint state output
777 ----
778
779 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
780 EXPLAIN (COSTS false) EXECUTE p1;
781 DEALLOCATE p1;
782
783 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
784 EXPLAIN (COSTS false) EXECUTE p1 (1000);
785 EXPLAIN (COSTS false) EXECUTE p1 (1000);
786 EXPLAIN (COSTS false) EXECUTE p1 (1000);
787 EXPLAIN (COSTS false) EXECUTE p1 (1000);
788 EXPLAIN (COSTS false) EXECUTE p1 (1000);
789 EXPLAIN (COSTS false) EXECUTE p1 (1000);
790 DEALLOCATE p1;
791
792 -- No. A-10-1-1
793 -- No. A-10-1-2
794 /*+SeqScan(t1)*/
795 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
796 /*+BitmapScan(t1)*/
797 EXPLAIN (COSTS false) EXECUTE p1;
798 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
799 /*+BitmapScan(t1)*/
800 EXPLAIN (COSTS false) EXECUTE p1;
801 DEALLOCATE p1;
802
803 /*+BitmapScan(t1)*/
804 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
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 /*+SeqScan(t1)*/
814 EXPLAIN (COSTS false) EXECUTE p1 (1000);
815 /*+SeqScan(t1)*/
816 EXPLAIN (COSTS false) EXECUTE p1 (1000);
817 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
818 /*+SeqScan(t1)*/
819 EXPLAIN (COSTS false) EXECUTE p1 (1000);
820 DEALLOCATE p1;
821
822 -- No. A-10-1-3
823 -- No. A-10-1-4
824 /*+SeqScan(t1)*/
825 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
826 EXPLAIN (COSTS false) EXECUTE p1;
827 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
828 EXPLAIN (COSTS false) EXECUTE p1;
829 DEALLOCATE p1;
830
831 /*+BitmapScan(t1)*/
832 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
833 EXPLAIN (COSTS false) EXECUTE p1 (1000);
834 EXPLAIN (COSTS false) EXECUTE p1 (1000);
835 EXPLAIN (COSTS false) EXECUTE p1 (1000);
836 EXPLAIN (COSTS false) EXECUTE p1 (1000);
837 EXPLAIN (COSTS false) EXECUTE p1 (1000);
838 EXPLAIN (COSTS false) EXECUTE p1 (1000);
839 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
840 EXPLAIN (COSTS false) EXECUTE p1 (1000);
841 DEALLOCATE p1;
842
843 -- No. A-10-1-5
844 -- No. A-10-1-6
845 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
846 /*+BitmapScan(t1)*/
847 EXPLAIN (COSTS false) EXECUTE p1;
848 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
849 /*+BitmapScan(t1)*/
850 EXPLAIN (COSTS false) EXECUTE p1;
851 DEALLOCATE p1;
852
853 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
854 /*+BitmapScan(t1)*/
855 EXPLAIN (COSTS false) EXECUTE p1 (1000);
856 EXPLAIN (COSTS false) EXECUTE p1 (1000);
857 EXPLAIN (COSTS false) EXECUTE p1 (1000);
858 EXPLAIN (COSTS false) EXECUTE p1 (1000);
859 EXPLAIN (COSTS false) EXECUTE p1 (1000);
860 EXPLAIN (COSTS false) EXECUTE p1 (1000);
861 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
862 /*+BitmapScan(t1)*/
863 EXPLAIN (COSTS false) EXECUTE p1 (1000);
864 DEALLOCATE p1;
865
866 -- No. A-10-1-9
867 -- No. A-10-1-10
868 /*+SeqScan(t1)*/
869 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
870 /*+BitmapScan(t1)*/
871 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
872 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
873 /*+BitmapScan(t1)*/
874 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
875 DEALLOCATE p1;
876
877 /*+BitmapScan(t1)*/
878 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
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 /*+SeqScan(t1)*/
888 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
889 /*+SeqScan(t1)*/
890 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
891 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
892 /*+SeqScan(t1)*/
893 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
894 DEALLOCATE p1;
895
896 -- No. A-10-1-11
897 -- No. A-10-1-12
898 /*+SeqScan(t1)*/
899 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
900 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
901 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
902 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
903 DEALLOCATE p1;
904
905 /*+BitmapScan(t1)*/
906 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
907 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
908 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
909 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
910 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
911 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
912 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
913 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
914 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
915 DEALLOCATE p1;
916
917 -- No. A-10-1-13
918 -- No. A-10-1-14
919 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
920 /*+BitmapScan(t1)*/
921 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
922 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
923 /*+BitmapScan(t1)*/
924 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
925 DEALLOCATE p1;
926
927 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
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 /*+BitmapScan(t1)*/
937 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
938 /*+BitmapScan(t1)*/
939 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
940 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
941 /*+BitmapScan(t1)*/
942 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
943 DEALLOCATE p1;
944
945 ----
946 ---- No. A-10-4 EXECUTE statement name error
947 ----
948
949 -- No. A-10-4-1
950 EXECUTE p1;
951 SHOW pg_hint_plan.debug_print;
952
953 ----
954 ---- No. A-11-5 EXECUTE statement name error
955 ----
956
957 -- No. A-11-5-1
958 SELECT pg_stat_statements_reset();
959 SELECT * FROM s1.t1 WHERE t1.c1 = 1;
960 /*+Set(enable_seqscan off)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
961 /*+SeqScan(t1)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
962 SELECT s.query, s.calls
963   FROM public.pg_stat_statements s
964   JOIN pg_catalog.pg_database d
965     ON (s.dbid = d.oid)
966  ORDER BY 1;
967
968 ----
969 ---- No. A-12-1 reset of global variable of core at the error
970 ---- No. A-12-2 reset of global variable of original at the error
971 ----
972
973 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
974 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
975 PREPARE p1 AS SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
976 EXPLAIN (COSTS false) EXECUTE p1;
977
978 -- No. A-12-1-1
979 -- No. A-12-2-1
980 SELECT name, setting FROM settings;
981 SET pg_hint_plan.parse_messages TO error;
982 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
983 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
984 SELECT name, setting FROM settings;
985 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
986 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
987
988 -- No. A-12-1-2
989 -- No. A-12-2-2
990 SELECT name, setting FROM settings;
991 SET pg_hint_plan.parse_messages TO error;
992 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
993 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
994 SELECT name, setting FROM settings;
995 EXPLAIN (COSTS false) EXECUTE p1;
996
997 -- No. A-12-1-3
998 -- No. A-12-2-3
999 SELECT name, setting FROM settings;
1000 SET pg_hint_plan.parse_messages TO error;
1001 EXPLAIN (COSTS false) EXECUTE p2;
1002 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
1003 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1004 EXPLAIN (COSTS false) EXECUTE p1;
1005 SELECT name, setting FROM settings;
1006
1007 -- No. A-12-1-4
1008 -- No. A-12-2-4
1009 SELECT name, setting FROM settings;
1010 SET pg_hint_plan.parse_messages TO error;
1011 EXPLAIN (COSTS false) EXECUTE p2;
1012 EXPLAIN (COSTS false) EXECUTE p1;
1013 SELECT name, setting FROM settings;
1014
1015 DEALLOCATE p1;
1016 SET pg_hint_plan.parse_messages TO LOG;
1017
1018 ----
1019 ---- No. A-12-3 effective range of the hint
1020 ----
1021
1022 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1023
1024 -- No. A-12-3-1
1025 SET enable_indexscan TO off;
1026 SET enable_mergejoin TO off;
1027 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1028 SELECT name, setting FROM settings;
1029 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
1030 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1031 SELECT name, setting FROM settings;
1032 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1033
1034 -- No. A-12-3-2
1035 SET enable_indexscan TO off;
1036 SET enable_mergejoin TO off;
1037 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1038 SELECT name, setting FROM settings;
1039 BEGIN;
1040 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
1041 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1042 COMMIT;
1043 BEGIN;
1044 SELECT name, setting FROM settings;
1045 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1046 COMMIT;
1047
1048 -- No. A-12-3-3
1049 SET enable_indexscan TO off;
1050 SET enable_mergejoin TO off;
1051 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1052 SELECT name, setting FROM settings;
1053 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
1054 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1055 \connect
1056 SET enable_indexscan TO off;
1057 SET enable_mergejoin TO off;
1058 LOAD 'pg_hint_plan';
1059 SELECT name, setting FROM settings;
1060 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1061
1062 SET pg_hint_plan.enable_hint TO on;
1063 SET pg_hint_plan.debug_print TO on;
1064 SET client_min_messages TO LOG;
1065 SET search_path TO public;
1066 RESET enable_indexscan;
1067 RESET enable_mergejoin;
1068
1069 ----
1070 ---- No. A-13 call planner recursively
1071 ----
1072
1073 CREATE OR REPLACE FUNCTION nested_planner(cnt int) RETURNS int AS $$
1074 DECLARE
1075     new_cnt int;
1076 BEGIN
1077     RAISE NOTICE 'nested_planner(%)', cnt;
1078
1079     /* 再帰終了の判断 */
1080     IF cnt <= 1 THEN
1081         RETURN 0;
1082     END IF;
1083
1084     EXECUTE '/*+ IndexScan(t_1) */'
1085             ' SELECT nested_planner($1) FROM s1.t1 t_1'
1086             ' JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)'
1087             ' ORDER BY t_1.c1 LIMIT 1'
1088         INTO new_cnt USING cnt - 1;
1089
1090     RETURN new_cnt;
1091 END;
1092 $$ LANGUAGE plpgsql IMMUTABLE;
1093
1094 ----
1095 ---- No. A-13-2 use hint of main query
1096 ----
1097
1098 --No.13-2-1
1099 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1100 /*+SeqScan(t_1)*/
1101 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1102
1103 ----
1104 ---- No. A-13-3 output number of times of debugging log
1105 ----
1106
1107 --No.13-3-1
1108 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1109 /*+SeqScan(t_2)*/
1110 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1111
1112 --No.13-3-2
1113 EXPLAIN (COSTS false) SELECT nested_planner(2) FROM s1.t1 t_1 ORDER BY t_1.c1;
1114 /*+SeqScan(t_2)*/
1115 EXPLAIN (COSTS false) SELECT nested_planner(2) FROM s1.t1 t_1 ORDER BY t_1.c1;
1116
1117 --No.13-3-3
1118 EXPLAIN (COSTS false) SELECT nested_planner(5) FROM s1.t1 t_1 ORDER BY t_1.c1;
1119 /*+SeqScan(t_2)*/
1120 EXPLAIN (COSTS false) SELECT nested_planner(5) FROM s1.t1 t_1 ORDER BY t_1.c1;
1121
1122 ----
1123 ---- No. A-13-4 output of debugging log on hint status
1124 ----
1125
1126 --No.13-4-1
1127 /*+HashJoin(t_1 t_2)*/
1128 EXPLAIN (COSTS false)
1129  SELECT nested_planner(2) FROM s1.t1 t_1
1130    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1131   ORDER BY t_1.c1;
1132
1133 --No.13-4-2
1134 /*+HashJoin(st_1 st_2)*/
1135 EXPLAIN (COSTS false)
1136  SELECT nested_planner(2) FROM s1.t1 st_1
1137    JOIN s1.t2 st_2 ON (st_1.c1 = st_2.c1)
1138   ORDER BY st_1.c1;
1139
1140 --No.13-4-3
1141 /*+HashJoin(t_1 t_2)*/
1142 EXPLAIN (COSTS false)
1143  SELECT nested_planner(2) FROM s1.t1 st_1
1144    JOIN s1.t2 st_2 ON (st_1.c1 = st_2.c1)
1145   ORDER BY st_1.c1;
1146
1147 --No.13-4-4
1148 /*+HashJoin(st_1 st_2)*/
1149 EXPLAIN (COSTS false)
1150  SELECT nested_planner(2) FROM s1.t1 t_1
1151    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1152   ORDER BY t_1.c1;
1153
1154 --No.13-4-5
1155 /*+HashJoin(t_1 t_1)*/
1156 EXPLAIN (COSTS false)
1157  SELECT nested_planner(2) FROM s1.t1 t_1
1158   ORDER BY t_1.c1;
1159
1160 --No.13-4-6
1161 CREATE OR REPLACE FUNCTION nested_planner_one_t(cnt int) RETURNS int AS $$
1162 DECLARE
1163     new_cnt int;
1164 BEGIN
1165     RAISE NOTICE 'nested_planner_one_t(%)', cnt;
1166
1167     IF cnt <= 1 THEN
1168         RETURN 0;
1169     END IF;
1170
1171     EXECUTE '/*+ IndexScan(t_1) */'
1172             ' SELECT nested_planner_one_t($1) FROM s1.t1 t_1'
1173             ' ORDER BY t_1.c1 LIMIT 1'
1174         INTO new_cnt USING cnt - 1;
1175
1176     RETURN new_cnt;
1177 END;
1178 $$ LANGUAGE plpgsql IMMUTABLE;
1179
1180 EXPLAIN (COSTS false)
1181  SELECT nested_planner_one_t(2) FROM s1.t1 t_1
1182    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1183   ORDER BY t_1.c1;
1184 /*+HashJoin(t_1 t_1)*/
1185 EXPLAIN (COSTS false)
1186  SELECT nested_planner_one_t(2) FROM s1.t1 t_1
1187    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1188   ORDER BY t_1.c1;
1189
1190 DROP FUNCTION nested_planner_one_t(int);
1191
1192 --No.13-4-7
1193 /*+HashJoin(t_1 t_1)*/
1194 EXPLAIN (COSTS false)
1195  SELECT nested_planner(2) FROM s1.t1 t_1
1196    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1197   ORDER BY t_1.c1;
1198
1199 --No.13-4-8
1200 /*+MergeJoin(t_1 t_2)HashJoin(t_1 t_2)*/
1201 EXPLAIN (COSTS false)
1202  SELECT nested_planner(2) FROM s1.t1 t_1
1203    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1204   ORDER BY t_1.c1;