OSDN Git Service

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