OSDN Git Service

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