OSDN Git Service

No.A-6の試験の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 ----
711 ---- No. A-9-1 parse error message output
712 ----
713
714 -- No. A-9-1-1
715 /*+"Set"(enable_indexscan on)*/SELECT 1;
716 /*+Set()(enable_indexscan on)*/SELECT 1;
717 /*+Set(enable_indexscan on*/SELECT 1;
718
719 ----
720 ---- No. A-9-3 hint state output
721 ----
722
723 SET pg_hint_plan.debug_print TO on;
724 SET client_min_messages TO LOG;
725
726 -- No. A-9-3-1
727 /*+SeqScan(t1)*/
728 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
729
730 -- No. A-9-3-2
731 /*+SeqScan(no_table)*/
732 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
733
734 -- No. A-9-3-3
735 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
736 /*+TidScan(t1)BitmapScan(t1)*/
737 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
738 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)*/
739 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
740 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)SeqScan(t1)*/
741 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
742
743 -- No. A-9-3-4
744 /*+Set(enable_indexscan enable)*/
745 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
746
747 ----
748 ---- No. A-10-1 hint state output
749 ----
750
751 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
752 EXPLAIN (COSTS false) EXECUTE p1;
753 DEALLOCATE p1;
754
755 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
756 EXPLAIN (COSTS false) EXECUTE p1 (1000);
757 EXPLAIN (COSTS false) EXECUTE p1 (1000);
758 EXPLAIN (COSTS false) EXECUTE p1 (1000);
759 EXPLAIN (COSTS false) EXECUTE p1 (1000);
760 EXPLAIN (COSTS false) EXECUTE p1 (1000);
761 EXPLAIN (COSTS false) EXECUTE p1 (1000);
762 DEALLOCATE p1;
763
764 -- No. A-10-1-1
765 -- No. A-10-1-2
766 /*+SeqScan(t1)*/
767 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
768 /*+BitmapScan(t1)*/
769 EXPLAIN (COSTS false) EXECUTE p1;
770 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
771 /*+BitmapScan(t1)*/
772 EXPLAIN (COSTS false) EXECUTE p1;
773 DEALLOCATE p1;
774
775 /*+BitmapScan(t1)*/
776 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
777 /*+SeqScan(t1)*/
778 EXPLAIN (COSTS false) EXECUTE p1 (1000);
779 /*+SeqScan(t1)*/
780 EXPLAIN (COSTS false) EXECUTE p1 (1000);
781 /*+SeqScan(t1)*/
782 EXPLAIN (COSTS false) EXECUTE p1 (1000);
783 /*+SeqScan(t1)*/
784 EXPLAIN (COSTS false) EXECUTE p1 (1000);
785 /*+SeqScan(t1)*/
786 EXPLAIN (COSTS false) EXECUTE p1 (1000);
787 /*+SeqScan(t1)*/
788 EXPLAIN (COSTS false) EXECUTE p1 (1000);
789 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
790 /*+SeqScan(t1)*/
791 EXPLAIN (COSTS false) EXECUTE p1 (1000);
792 DEALLOCATE p1;
793
794 -- No. A-10-1-3
795 -- No. A-10-1-4
796 /*+SeqScan(t1)*/
797 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
798 EXPLAIN (COSTS false) EXECUTE p1;
799 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = '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 EXPLAIN (COSTS false) EXECUTE p1 (1000);
806 EXPLAIN (COSTS false) EXECUTE p1 (1000);
807 EXPLAIN (COSTS false) EXECUTE p1 (1000);
808 EXPLAIN (COSTS false) EXECUTE p1 (1000);
809 EXPLAIN (COSTS false) EXECUTE p1 (1000);
810 EXPLAIN (COSTS false) EXECUTE p1 (1000);
811 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
812 EXPLAIN (COSTS false) EXECUTE p1 (1000);
813 DEALLOCATE p1;
814
815 -- No. A-10-1-5
816 -- No. A-10-1-6
817 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
818 /*+BitmapScan(t1)*/
819 EXPLAIN (COSTS false) EXECUTE p1;
820 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
821 /*+BitmapScan(t1)*/
822 EXPLAIN (COSTS false) EXECUTE p1;
823 DEALLOCATE p1;
824
825 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
826 /*+BitmapScan(t1)*/
827 EXPLAIN (COSTS false) EXECUTE p1 (1000);
828 EXPLAIN (COSTS false) EXECUTE p1 (1000);
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 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
834 /*+BitmapScan(t1)*/
835 EXPLAIN (COSTS false) EXECUTE p1 (1000);
836 DEALLOCATE p1;
837
838 -- No. A-10-1-9
839 -- No. A-10-1-10
840 /*+SeqScan(t1)*/
841 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
842 /*+BitmapScan(t1)*/
843 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
844 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
845 /*+BitmapScan(t1)*/
846 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
847 DEALLOCATE p1;
848
849 /*+BitmapScan(t1)*/
850 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
851 /*+SeqScan(t1)*/
852 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
853 /*+SeqScan(t1)*/
854 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
855 /*+SeqScan(t1)*/
856 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
857 /*+SeqScan(t1)*/
858 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
859 /*+SeqScan(t1)*/
860 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
861 /*+SeqScan(t1)*/
862 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
863 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
864 /*+SeqScan(t1)*/
865 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
866 DEALLOCATE p1;
867
868 -- No. A-10-1-11
869 -- No. A-10-1-12
870 /*+SeqScan(t1)*/
871 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
872 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
873 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = '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 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
880 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
881 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
882 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
883 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
884 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
885 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
886 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
887 DEALLOCATE p1;
888
889 -- No. A-10-1-13
890 -- No. A-10-1-14
891 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
892 /*+BitmapScan(t1)*/
893 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
894 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
895 /*+BitmapScan(t1)*/
896 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1;
897 DEALLOCATE p1;
898
899 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
900 /*+BitmapScan(t1)*/
901 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
902 /*+BitmapScan(t1)*/
903 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
904 /*+BitmapScan(t1)*/
905 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
906 /*+BitmapScan(t1)*/
907 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
908 /*+BitmapScan(t1)*/
909 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
910 /*+BitmapScan(t1)*/
911 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
912 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
913 /*+BitmapScan(t1)*/
914 EXPLAIN (COSTS false) CREATE TABLE test AS EXECUTE p1 (1000);
915 DEALLOCATE p1;
916
917 ----
918 ---- No. A-10-4 EXECUTE statement name error
919 ----
920
921 -- No. A-10-4-1
922 EXECUTE p1;
923 SHOW pg_hint_plan.debug_print;
924
925 ----
926 ---- No. A-11-5 EXECUTE statement name error
927 ----
928
929 -- No. A-11-5-1
930 SELECT pg_stat_statements_reset();
931 SELECT * FROM s1.t1 WHERE t1.c1 = 1;
932 /*+Set(enable_seqscan off)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
933 /*+SeqScan(t1)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
934 SELECT s.query, s.calls
935   FROM public.pg_stat_statements s
936   JOIN pg_catalog.pg_database d
937     ON (s.dbid = d.oid)
938  ORDER BY 1;
939
940 ----
941 ---- No. A-12-1 reset of global variable of core at the error
942 ---- No. A-12-2 reset of global variable of original at the error
943 ----
944
945 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
946 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
947 PREPARE p1 AS SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
948 EXPLAIN (COSTS false) EXECUTE p1;
949
950 -- No. A-12-1-1
951 -- No. A-12-2-1
952 SELECT name, setting FROM settings;
953 SET pg_hint_plan.parse_messages TO error;
954 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
955 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
956 SELECT name, setting FROM settings;
957 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
958 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
959
960 -- No. A-12-1-2
961 -- No. A-12-2-2
962 SELECT name, setting FROM settings;
963 SET pg_hint_plan.parse_messages TO error;
964 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
965 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
966 SELECT name, setting FROM settings;
967 EXPLAIN (COSTS false) EXECUTE p1;
968
969 -- No. A-12-1-3
970 -- No. A-12-2-3
971 SELECT name, setting FROM settings;
972 SET pg_hint_plan.parse_messages TO error;
973 EXPLAIN (COSTS false) EXECUTE p2;
974 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
975 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
976 EXPLAIN (COSTS false) EXECUTE p1;
977 SELECT name, setting FROM settings;
978
979 -- No. A-12-1-4
980 -- No. A-12-2-4
981 SELECT name, setting FROM settings;
982 SET pg_hint_plan.parse_messages TO error;
983 EXPLAIN (COSTS false) EXECUTE p2;
984 EXPLAIN (COSTS false) EXECUTE p1;
985 SELECT name, setting FROM settings;
986
987 DEALLOCATE p1;
988 SET pg_hint_plan.parse_messages TO LOG;
989
990 ----
991 ---- No. A-12-3 effective range of the hint
992 ----
993
994 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
995
996 -- No. A-12-3-1
997 SET enable_indexscan TO off;
998 SET enable_mergejoin TO off;
999 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1000 SELECT name, setting FROM settings;
1001 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
1002 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1003 SELECT name, setting FROM settings;
1004 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1005
1006 -- No. A-12-3-2
1007 SET enable_indexscan TO off;
1008 SET enable_mergejoin TO off;
1009 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1010 SELECT name, setting FROM settings;
1011 BEGIN;
1012 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
1013 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1014 COMMIT;
1015 BEGIN;
1016 SELECT name, setting FROM settings;
1017 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1018 COMMIT;
1019
1020 -- No. A-12-3-3
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 \connect
1028 SET enable_indexscan TO off;
1029 SET enable_mergejoin TO off;
1030 LOAD 'pg_hint_plan';
1031 SELECT name, setting FROM settings;
1032 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
1033
1034 SET pg_hint_plan.enable_hint TO on;
1035 SET pg_hint_plan.debug_print TO on;
1036 SET client_min_messages TO LOG;
1037 SET search_path TO public;
1038 RESET enable_indexscan;
1039 RESET enable_mergejoin;
1040
1041 ----
1042 ---- No. A-13 call planner recursively
1043 ----
1044
1045 CREATE OR REPLACE FUNCTION nested_planner(cnt int) RETURNS int AS $$
1046 DECLARE
1047     new_cnt int;
1048 BEGIN
1049     RAISE NOTICE 'nested_planner(%)', cnt;
1050
1051     /* 再帰終了の判断 */
1052     IF cnt <= 1 THEN
1053         RETURN 0;
1054     END IF;
1055
1056     EXECUTE '/*+ IndexScan(t_1) */'
1057             ' SELECT nested_planner($1) FROM s1.t1 t_1'
1058             ' JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)'
1059             ' ORDER BY t_1.c1 LIMIT 1'
1060         INTO new_cnt USING cnt - 1;
1061
1062     RETURN new_cnt;
1063 END;
1064 $$ LANGUAGE plpgsql IMMUTABLE;
1065
1066 ----
1067 ---- No. A-13-2 use hint of main query
1068 ----
1069
1070 --No.13-2-1
1071 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1072 /*+SeqScan(t_1)*/
1073 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1074
1075 ----
1076 ---- No. A-13-3 output number of times of debugging log
1077 ----
1078
1079 --No.13-3-1
1080 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1081 /*+SeqScan(t_2)*/
1082 EXPLAIN (COSTS false) SELECT nested_planner(1) FROM s1.t1 t_1 ORDER BY t_1.c1;
1083
1084 --No.13-3-2
1085 EXPLAIN (COSTS false) SELECT nested_planner(2) FROM s1.t1 t_1 ORDER BY t_1.c1;
1086 /*+SeqScan(t_2)*/
1087 EXPLAIN (COSTS false) SELECT nested_planner(2) FROM s1.t1 t_1 ORDER BY t_1.c1;
1088
1089 --No.13-3-3
1090 EXPLAIN (COSTS false) SELECT nested_planner(5) FROM s1.t1 t_1 ORDER BY t_1.c1;
1091 /*+SeqScan(t_2)*/
1092 EXPLAIN (COSTS false) SELECT nested_planner(5) FROM s1.t1 t_1 ORDER BY t_1.c1;
1093
1094 ----
1095 ---- No. A-13-4 output of debugging log on hint status
1096 ----
1097
1098 --No.13-4-1
1099 /*+HashJoin(t_1 t_2)*/
1100 EXPLAIN (COSTS false)
1101  SELECT nested_planner(2) FROM s1.t1 t_1
1102    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1103   ORDER BY t_1.c1;
1104
1105 --No.13-4-2
1106 /*+HashJoin(st_1 st_2)*/
1107 EXPLAIN (COSTS false)
1108  SELECT nested_planner(2) FROM s1.t1 st_1
1109    JOIN s1.t2 st_2 ON (st_1.c1 = st_2.c1)
1110   ORDER BY st_1.c1;
1111
1112 --No.13-4-3
1113 /*+HashJoin(t_1 t_2)*/
1114 EXPLAIN (COSTS false)
1115  SELECT nested_planner(2) FROM s1.t1 st_1
1116    JOIN s1.t2 st_2 ON (st_1.c1 = st_2.c1)
1117   ORDER BY st_1.c1;
1118
1119 --No.13-4-4
1120 /*+HashJoin(st_1 st_2)*/
1121 EXPLAIN (COSTS false)
1122  SELECT nested_planner(2) FROM s1.t1 t_1
1123    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1124   ORDER BY t_1.c1;
1125
1126 --No.13-4-5
1127 /*+HashJoin(t_1 t_1)*/
1128 EXPLAIN (COSTS false)
1129  SELECT nested_planner(2) FROM s1.t1 t_1
1130   ORDER BY t_1.c1;
1131
1132 --No.13-4-6
1133 CREATE OR REPLACE FUNCTION nested_planner_one_t(cnt int) RETURNS int AS $$
1134 DECLARE
1135     new_cnt int;
1136 BEGIN
1137     RAISE NOTICE 'nested_planner_one_t(%)', cnt;
1138
1139     IF cnt <= 1 THEN
1140         RETURN 0;
1141     END IF;
1142
1143     EXECUTE '/*+ IndexScan(t_1) */'
1144             ' SELECT nested_planner_one_t($1) FROM s1.t1 t_1'
1145             ' ORDER BY t_1.c1 LIMIT 1'
1146         INTO new_cnt USING cnt - 1;
1147
1148     RETURN new_cnt;
1149 END;
1150 $$ LANGUAGE plpgsql IMMUTABLE;
1151
1152 EXPLAIN (COSTS false)
1153  SELECT nested_planner_one_t(2) FROM s1.t1 t_1
1154    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1155   ORDER BY t_1.c1;
1156 /*+HashJoin(t_1 t_1)*/
1157 EXPLAIN (COSTS false)
1158  SELECT nested_planner_one_t(2) FROM s1.t1 t_1
1159    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1160   ORDER BY t_1.c1;
1161
1162 DROP FUNCTION nested_planner_one_t(int);
1163
1164 --No.13-4-7
1165 /*+HashJoin(t_1 t_1)*/
1166 EXPLAIN (COSTS false)
1167  SELECT nested_planner(2) FROM s1.t1 t_1
1168    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1169   ORDER BY t_1.c1;
1170
1171 --No.13-4-8
1172 /*+MergeJoin(t_1 t_2)HashJoin(t_1 t_2)*/
1173 EXPLAIN (COSTS false)
1174  SELECT nested_planner(2) FROM s1.t1 t_1
1175    JOIN s1.t2 t_2 ON (t_1.c1 = t_2.c1)
1176   ORDER BY t_1.c1;