OSDN Git Service

A-11-1-4,5 A-12-4:-*の試験を追加した。
[pghintplan/pg_hint_plan.git] / sql / ut-A.sql
1 LOAD 'pg_hint_plan';
2 SET pg_hint_plan.enable 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-5-1 hint format
9 ----
10
11 -- No. A-5-1-1
12 /*+SeqScan(t1)*/
13 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
14
15 -- No. A-5-1-2
16 /* +SeqScan(t1)*/
17 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
18
19 -- No. A-5-1-3
20 --+SeqScan(t1)
21 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
22
23 -- No. A-5-1-4
24 --+SeqScan(t1)
25 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
26
27 -- No. A-5-1-5
28 -- +SeqScan(t1)
29 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
30
31 -- No. A-5-1-6
32 --SeqScan(t1)
33 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
34
35 -- No. A-5-1-7
36 /*+SeqScan(t1) /* nest comment */ */
37 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
38
39 -- No. A-5-1-8
40 /* +SeqScan(t1) /* nest comment */ */
41 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
42
43 -- No. A-5-1-9
44 /*SeqScan(t1) /* nest comment */ */
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 /*+SeqScan(t1)*/
53 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
54
55 -- No. A-5-2-2
56 /* normal comment */
57 /*+SeqScan(t1)*/
58 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
59
60 -- No. A-5-2-3
61 EXPLAIN (COSTS false) SELECT /*+SeqScan(t1)*/ * FROM s1.t1 WHERE t1.c1 = 1;
62
63 ----
64 ---- No. A-5-4 hint delimiter
65 ----
66
67 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
68 -- No. A-5-4-1
69 -- No. A-5-4-2
70 -- No. A-5-4-3
71 -- No. A-5-4-4
72 -- No. A-5-4-5
73 -- No. A-5-4-6
74 -- No. A-5-4-7
75 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
76 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
77
78 -- No. A-5-4-8
79 /*+ Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
80 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
81
82 -- No. A-5-4-9
83 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off") */
84 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
85
86 -- No. A-5-4-10
87 /*+ Set (enable_indexscan"off") Set (enable_bitmapscan"off")*/
88 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
89
90 -- No. A-5-4-11
91 /*+Set ( enable_indexscan"off")Set ( enable_bitmapscan"off")*/
92 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
93
94 -- No. A-5-4-12
95 /*+Set(enable_indexscan"off" ) Set(enable_bitmapscan"off" ) */
96 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
97
98 -- No. A-5-4-13
99 /*+Set( enable_indexscan "off" )Set( enable_bitmapscan "off" )*/
100 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
101
102 -- No. A-5-4-14
103 /*+ Set ( enable_indexscan "off" ) Set ( enable_bitmapscan "off" ) */
104 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
105
106 -- No. A-5-4-15
107 /*+     Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
108 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
109
110 -- No. A-5-4-16
111 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")        */
112 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
113
114 -- No. A-5-4-17
115 /*+     Set     (enable_indexscan"off") Set     (enable_bitmapscan"off")*/
116 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
117
118 -- No. A-5-4-18
119 /*+Set  (       enable_indexscan"off")Set       (       enable_bitmapscan"off")*/
120 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
121
122 -- No. A-5-4-19
123 /*+Set(enable_indexscan"off"    )       Set(enable_bitmapscan"off"      )       */
124 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
125
126 -- No. A-5-4-20
127 /*+Set( enable_indexscan        "off"   )Set(   enable_bitmapscan       "off"   )*/
128 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
129
130 -- No. A-5-4-21
131 /*+     Set     (       enable_indexscan        "off"   )       Set     (       enable_bitmapscan       "off"   )       */
132 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
133
134 -- No. A-5-4-22
135 /*+
136 Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
137 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
138
139 -- No. A-5-4-23
140 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")
141 */
142 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
143
144 -- No. A-5-4-24
145 /*+
146 Set
147 (enable_indexscan"off")
148 Set
149 (enable_bitmapscan"off")*/
150 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
151
152 -- No. A-5-4-25
153 /*+Set
154 (
155 enable_indexscan"off")Set
156 (
157 enable_bitmapscan"off")*/
158 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
159
160 -- No. A-5-4-26
161 /*+Set(enable_indexscan"off"
162 )
163 Set(enable_bitmapscan"off"
164 )
165 */
166 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
167
168 -- No. A-5-4-27
169 /*+Set(
170 enable_indexscan
171 "off"
172 )Set(
173 enable_bitmapscan
174 "off"
175 )*/
176 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
177
178 -- No. A-5-4-28
179 /*+
180 Set
181 (
182 enable_indexscan
183 "off"
184 )
185 Set
186 (
187 enable_bitmapscan
188 "off"
189 )
190 */
191 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
192
193 -- No. A-5-4-29
194 /*+     
195          Set(enable_indexscan"off")Set(enable_bitmapscan"off")*/
196 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
197
198 -- No. A-5-4-30
199 /*+Set(enable_indexscan"off")Set(enable_bitmapscan"off")        
200          */
201 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
202
203 -- No. A-5-4-31
204 /*+     
205          Set    
206          (enable_indexscan"off")        
207          Set    
208          (enable_bitmapscan"off")*/
209 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
210
211 -- No. A-5-4-32
212 /*+Set  
213          (      
214          enable_indexscan"off")Set      
215          (      
216          enable_bitmapscan"off")*/
217 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
218
219 -- No. A-5-4-33
220 /*+Set(enable_indexscan"off"    
221          )      
222          Set(enable_bitmapscan"off"     
223          )      
224          */
225 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
226
227 -- No. A-5-4-34
228 /*+Set(         
229          enable_indexscan       
230          "off"  
231          )Set(  
232          enable_bitmapscan      
233          "off"  
234          )*/
235 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
236
237 -- No. A-5-4-35
238 /*+     
239          Set    
240          (      
241          enable_indexscan       
242          "off"  
243          )      
244          Set    
245          (      
246          enable_bitmapscan      
247          "off"  
248          )      
249          */
250 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
251
252 ----
253 ---- No. A-5-5 hint object pattern
254 ---- No. A-7-2 message object pattern
255 ----
256
257 -- No. A-5-5-1
258 -- No. A-7-2-1
259 /*+SeqScan(t)*/
260 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t WHERE t.c1 = 1;
261 /*+SeqScan(ttt)*/
262 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ttt WHERE ttt.c1 = 1;
263 /*+SeqScan("t")*/
264 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t WHERE t.c1 = 1;
265 /*+SeqScan("ttt")*/
266 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ttt WHERE ttt.c1 = 1;
267
268 -- No. A-5-5-2
269 -- No. A-7-2-2
270 /*+SeqScan(T)*/
271 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "T" WHERE "T".c1 = 1;
272 /*+SeqScan(TTT)*/
273 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "TTT" WHERE "TTT".c1 = 1;
274 /*+SeqScan("T")*/
275 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "T" WHERE "T".c1 = 1;
276 /*+SeqScan("TTT")*/
277 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "TTT" WHERE "TTT".c1 = 1;
278
279 -- No. A-5-5-3
280 -- No. A-7-2-3
281 /*+SeqScan(()*/
282 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(" WHERE "(".c1 = 1;
283 /*+SeqScan(((()*/
284 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(((" WHERE "(((".c1 = 1;
285 /*+SeqScan("(")*/
286 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(" WHERE "(".c1 = 1;
287 /*+SeqScan("(((")*/
288 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "(((" WHERE "(((".c1 = 1;
289
290 -- No. A-5-5-4
291 -- No. A-7-2-4
292 /*+SeqScan())*/
293 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
294 /*+SeqScan(")")*/
295 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")" WHERE ")".c1 = 1;
296 /*+SeqScan(")))")*/
297 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ")))" WHERE ")))".c1 = 1;
298
299 -- No. A-5-5-5
300 -- No. A-7-2-5
301 /*+SeqScan(")*/
302 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
303 /*+SeqScan("""")*/
304 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """" WHERE """".c1 = 1;
305 /*+SeqScan("""""""")*/
306 EXPLAIN (COSTS false) SELECT * FROM s1.t1 """""""" WHERE """""""".c1 = 1;
307
308 -- No. A-5-5-6
309 -- No. A-7-2-6
310 /*+SeqScan( )*/
311 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
312 /*+SeqScan(" ")*/
313 EXPLAIN (COSTS false) SELECT * FROM s1.t1 " " WHERE " ".c1 = 1;
314 /*+SeqScan("   ")*/
315 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "   " WHERE "   ".c1 = 1;
316
317 -- No. A-5-5-7
318 -- No. A-7-2-7
319 /*+SeqScan(     )*/
320 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "     " WHERE "       ".c1 = 1;
321 /*+SeqScan("    ")*/
322 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "     " WHERE "       ".c1 = 1;
323 /*+SeqScan("                    ")*/
324 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "                     " WHERE "                       ".c1 = 1;
325
326 -- No. A-5-5-8
327 -- No. A-7-2-8
328 /*+SeqScan(
329 )*/
330 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
331 " WHERE "
332 ".c1 = 1;
333 /*+SeqScan("
334 ")*/
335 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
336 " WHERE "
337 ".c1 = 1;
338 /*+SeqScan("
339
340
341 ")*/
342 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "
343
344
345 " WHERE "
346
347
348 ".c1 = 1;
349
350 -- No. A-5-5-9
351 -- No. A-7-2-9
352 /*+SeqScan(Set)*/
353 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
354 /*+SeqScan("Set")*/
355 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set" WHERE "Set".c1 = 1;
356 /*+SeqScan("Set SeqScan Leading")*/
357 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "Set SeqScan Leading" WHERE "Set SeqScan Leading".c1 = 1;
358
359 -- No. A-5-5-10
360 -- No. A-7-2-10
361 /*+SeqScan(あ)*/
362 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あ WHERE あ.c1 = 1;
363 /*+SeqScan(あいう)*/
364 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あいう WHERE あいう.c1 = 1;
365 /*+SeqScan("あ")*/
366 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あ WHERE あ.c1 = 1;
367 /*+SeqScan("あいう")*/
368 EXPLAIN (COSTS false) SELECT * FROM s1.t1 あいう WHERE あいう.c1 = 1;
369
370 -- No. A-5-5-11
371 -- No. A-7-2-11
372 /*+SeqScan(/**/)*/
373 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**/" WHERE "/**/".c1 = 1;
374 /*+SeqScan(/**//**//**/)*/
375 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "/**//**//**/" WHERE "/**//**//**/".c1 = 1;
376
377 -- No. A-5-5-12
378 -- No. A-7-2-12
379 /*+SeqScan("tT()""      
380 Set/**/あ")*/
381 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""       
382 Set/**/あ" WHERE "tT()""       
383 Set/**/あ".c1 = 1;
384 --"
385
386 /*+SeqScan("tT()""      
387 Setあ")*/
388 EXPLAIN (COSTS false) SELECT * FROM s1.t1 "tT()""       
389 Setあ" WHERE "tT()""   
390 Setあ".c1 = 1;
391
392 ----
393 ---- No. A-5-6 hint parse error
394 ----
395
396 -- No. A-5-6-1
397 /*+Set(enable_indexscan off)Set enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
398 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
399
400 -- No. A-5-6-2
401 /*+Set(enable_indexscan off)Set(enable_tidscan off Set(enable_bitmapscan off)SeqScan(t1)*/
402 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
403
404 -- No. A-5-6-3
405 /*+Set(enable_indexscan off)Set(enable_tidscan "off)Set(enable_bitmapscan off)SeqScan(t1)*/
406 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
407
408 -- No. A-5-6-4
409 /*+Set(enable_indexscan off)SeqScan("")Set(enable_bitmapscan off)*/
410 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
411
412 -- No. A-5-6-5
413 /*+Set(enable_indexscan off)NoSet(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
414 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
415
416 -- No. A-5-6-6
417 /*+Set(enable_indexscan off)"Set"(enable_tidscan off)Set(enable_bitmapscan off)SeqScan(t1)*/
418 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
419
420 -- No. A-5-6-7
421 /*+Set(enable_indexscan off)Set(enable_tidscan /* value */off)Set(enable_bitmapscan off)SeqScan(t1)*/
422 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
423
424 ----
425 ---- No. A-6-1 original GUC parameter
426 ----
427
428 -- No. A-6-1-1
429 SET ROLE super_user;
430 SET pg_hint_plan.debug_print TO off;
431 SHOW pg_hint_plan.enable;
432 SHOW pg_hint_plan.debug_print;
433 SHOW pg_hint_plan.parse_messages;
434 SET pg_hint_plan.enable TO off;
435 SET pg_hint_plan.debug_print TO on;
436 SET pg_hint_plan.parse_messages TO error;
437 SHOW pg_hint_plan.enable;
438 SHOW pg_hint_plan.debug_print;
439 SHOW pg_hint_plan.parse_messages;
440 RESET pg_hint_plan.enable;
441 RESET pg_hint_plan.debug_print;
442 RESET pg_hint_plan.parse_messages;
443 SHOW pg_hint_plan.enable;
444 SHOW pg_hint_plan.debug_print;
445 SHOW pg_hint_plan.parse_messages;
446
447 -- No. A-6-1-2
448 SET ROLE normal_user;
449 SHOW pg_hint_plan.enable;
450 SHOW pg_hint_plan.debug_print;
451 SHOW pg_hint_plan.parse_messages;
452 SET pg_hint_plan.enable TO off;
453 SET pg_hint_plan.debug_print TO on;
454 SET pg_hint_plan.parse_messages TO error;
455 SHOW pg_hint_plan.enable;
456 SHOW pg_hint_plan.debug_print;
457 SHOW pg_hint_plan.parse_messages;
458 RESET pg_hint_plan.enable;
459 RESET pg_hint_plan.debug_print;
460 RESET pg_hint_plan.parse_messages;
461 SHOW pg_hint_plan.enable;
462 SHOW pg_hint_plan.debug_print;
463 SHOW pg_hint_plan.parse_messages;
464
465 RESET ROLE;
466
467 ----
468 ---- No. A-6-2 original GUC parameter pg_hint_plan.enable
469 ----
470
471 -- No. A-6-2-1
472 SET pg_hint_plan.enable TO on;
473 SHOW pg_hint_plan.enable;
474 /*+Set(enable_indexscan off)*/
475 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
476
477 -- No. A-6-2-2
478 SET pg_hint_plan.enable TO off;
479 SHOW pg_hint_plan.enable;
480 /*+Set(enable_indexscan off)*/
481 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
482
483 -- No. A-6-2-3
484 SET pg_hint_plan.enable TO DEFAULT;
485 SHOW pg_hint_plan.enable;
486 /*+Set(enable_indexscan off)*/
487 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
488
489 -- No. A-6-2-4
490 SET pg_hint_plan.enable TO enable;
491 SHOW pg_hint_plan.enable;
492
493 ----
494 ---- No. A-6-3 original GUC parameter pg_hint_plan.debug_print
495 ----
496
497 -- No. A-6-3-1
498 SET pg_hint_plan.debug_print TO on;
499 SHOW pg_hint_plan.debug_print;
500 /*+Set(enable_indexscan off)*/
501 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
502
503 -- No. A-6-3-2
504 SET pg_hint_plan.debug_print TO off;
505 SHOW pg_hint_plan.debug_print;
506 /*+Set(enable_indexscan off)*/
507 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
508
509 -- No. A-6-3-3
510 SET pg_hint_plan.debug_print TO DEFAULT;
511 SHOW pg_hint_plan.debug_print;
512 /*+Set(enable_indexscan off)*/
513 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
514
515 -- No. A-6-3-4
516 SET pg_hint_plan.debug_print TO enable;
517 SHOW pg_hint_plan.debug_print;
518
519 ----
520 ---- No. A-6-4 original GUC parameter pg_hint_plan.parse_messages
521 ----
522
523 SET client_min_messages TO debug5;
524
525 -- No. A-6-4-1
526 SET pg_hint_plan.parse_messages TO debug5;
527 SHOW pg_hint_plan.parse_messages;
528 /*+Set*/SELECT 1;
529 SET client_min_messages TO debug4;
530 /*+Set*/SELECT 1;
531
532 -- No. A-6-4-2
533 SET pg_hint_plan.parse_messages TO debug4;
534 SHOW pg_hint_plan.parse_messages;
535 /*+Set*/SELECT 1;
536 SET client_min_messages TO debug3;
537 /*+Set*/SELECT 1;
538
539 -- No. A-6-4-3
540 SET pg_hint_plan.parse_messages TO debug3;
541 SHOW pg_hint_plan.parse_messages;
542 /*+Set*/SELECT 1;
543 SET client_min_messages TO debug2;
544 /*+Set*/SELECT 1;
545
546 -- No. A-6-4-4
547 SET pg_hint_plan.parse_messages TO debug2;
548 SHOW pg_hint_plan.parse_messages;
549 /*+Set*/SELECT 1;
550 SET client_min_messages TO debug1;
551 /*+Set*/SELECT 1;
552
553 -- No. A-6-4-5
554 SET pg_hint_plan.parse_messages TO debug1;
555 SHOW pg_hint_plan.parse_messages;
556 /*+Set*/SELECT 1;
557 SET client_min_messages TO log;
558 /*+Set*/SELECT 1;
559
560 -- No. A-6-4-6
561 SET pg_hint_plan.parse_messages TO log;
562 SHOW pg_hint_plan.parse_messages;
563 /*+Set*/SELECT 1;
564 SET client_min_messages TO info;
565 /*+Set*/SELECT 1;
566
567 -- No. A-6-4-7
568 SET pg_hint_plan.parse_messages TO info;
569 SHOW pg_hint_plan.parse_messages;
570 /*+Set*/SELECT 1;
571 SET client_min_messages TO notice;
572 /*+Set*/SELECT 1;
573
574 -- No. A-6-4-8
575 SET pg_hint_plan.parse_messages TO notice;
576 SHOW pg_hint_plan.parse_messages;
577 /*+Set*/SELECT 1;
578 SET client_min_messages TO warning;
579 /*+Set*/SELECT 1;
580
581 -- No. A-6-4-9
582 SET pg_hint_plan.parse_messages TO warning;
583 SHOW pg_hint_plan.parse_messages;
584 /*+Set*/SELECT 1;
585 SET client_min_messages TO error;
586 /*+Set*/SELECT 1;
587
588 -- No. A-6-4-10
589 SET pg_hint_plan.parse_messages TO error;
590 SHOW pg_hint_plan.parse_messages;
591 /*+Set*/SELECT 1;
592 SET client_min_messages TO fatal;
593 /*+Set*/SELECT 1;
594
595 -- No. A-6-4-11
596 RESET client_min_messages;
597 SET pg_hint_plan.parse_messages TO DEFAULT;
598 SHOW pg_hint_plan.parse_messages;
599 /*+Set*/SELECT 1;
600
601 -- No. A-6-4-12
602 SET pg_hint_plan.parse_messages TO fatal;
603 SHOW pg_hint_plan.parse_messages;
604
605 -- No. A-6-4-13
606 SET pg_hint_plan.parse_messages TO panic;
607 SHOW pg_hint_plan.parse_messages;
608
609 -- No. A-6-4-14
610 SET pg_hint_plan.parse_messages TO on;
611 SHOW pg_hint_plan.parse_messages;
612
613 ----
614 ---- No. A-7-1 parse error message output
615 ----
616
617 -- No. A-7-1-1
618 /*+"Set"(enable_indexscan on)*/SELECT 1;
619 /*+Set()(enable_indexscan on)*/SELECT 1;
620 /*+Set(enable_indexscan on*/SELECT 1;
621
622 ----
623 ---- No. A-7-3 hint state output
624 ----
625
626 SET pg_hint_plan.debug_print TO on;
627 SET client_min_messages TO LOG;
628
629 -- No. A-7-3-1
630 /*+SeqScan(t1)*/
631 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
632
633 -- No. A-7-3-2
634 /*+SeqScan(no_table)*/
635 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
636
637 -- No. A-7-3-3
638 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
639 /*+TidScan(t1)BitmapScan(t1)*/
640 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
641 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)*/
642 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
643 /*+TidScan(t1)BitmapScan(t1)IndexScan(t1)SeqScan(t1)*/
644 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
645
646 -- No. A-7-3-4
647 /*+Set(enable_indexscan enable)*/
648 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
649
650 ----
651 ---- No. A-8-1 hint state output
652 ----
653
654 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
655 EXPLAIN (COSTS false) EXECUTE p1;
656 DEALLOCATE p1;
657
658 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
659 EXPLAIN (COSTS false) EXECUTE p1 (1);
660 DEALLOCATE p1;
661
662 -- No. A-8-1-1
663 -- No. A-8-1-2
664 /*+SeqScan(t1)*/
665 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
666 /*+BitmapScan(t1)*/
667 EXPLAIN (COSTS false) EXECUTE p1;
668 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
669 /*+BitmapScan(t1)*/
670 EXPLAIN (COSTS false) EXECUTE p1;
671 DEALLOCATE p1;
672
673 /*+BitmapScan(t1)*/
674 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
675 /*+SeqScan(t1)*/
676 EXPLAIN (COSTS false) EXECUTE p1 (1);
677 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
678 /*+SeqScan(t1)*/
679 EXPLAIN (COSTS false) EXECUTE p1 (1);
680 DEALLOCATE p1;
681
682 -- No. A-8-1-3
683 -- No. A-8-1-4
684 /*+SeqScan(t1)*/
685 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
686 EXPLAIN (COSTS false) EXECUTE p1;
687 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
688 EXPLAIN (COSTS false) EXECUTE p1;
689 DEALLOCATE p1;
690
691 /*+BitmapScan(t1)*/
692 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
693 EXPLAIN (COSTS false) EXECUTE p1 (1);
694 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
695 EXPLAIN (COSTS false) EXECUTE p1 (1);
696 DEALLOCATE p1;
697
698 -- No. A-8-1-5
699 -- No. A-8-1-6
700 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 = 1;
701 /*+BitmapScan(t1)*/
702 EXPLAIN (COSTS false) EXECUTE p1;
703 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
704 /*+BitmapScan(t1)*/
705 EXPLAIN (COSTS false) EXECUTE p1;
706 DEALLOCATE p1;
707
708 PREPARE p1 AS SELECT * FROM s1.t1 WHERE t1.c1 < $1;
709 /*+BitmapScan(t1)*/
710 EXPLAIN (COSTS false) EXECUTE p1 (1);
711 UPDATE pg_catalog.pg_class SET relpages = relpages WHERE relname = 't1';
712 /*+BitmapScan(t1)*/
713 EXPLAIN (COSTS false) EXECUTE p1 (1);
714 DEALLOCATE p1;
715
716 ----
717 ---- No. A-8-4 EXECUTE statement name error
718 ----
719
720 -- No. A-8-4-1
721 EXECUTE p1;
722 SHOW pg_hint_plan.debug_print;
723
724 ----
725 ---- No. A-9-5 EXECUTE statement name error
726 ----
727
728 -- No. A-9-5-1
729 SELECT pg_stat_statements_reset();
730 SELECT * FROM s1.t1 WHERE t1.c1 = 1;
731 /*+Set(enable_seqscan off)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
732 /*+SeqScan(t1)*/ SELECT * FROM s1.t1 WHERE t1.c1 = 1;
733 SELECT s.query, s.calls
734   FROM public.pg_stat_statements s
735   JOIN pg_catalog.pg_database d
736     ON (s.dbid = d.oid)
737  ORDER BY 1;
738
739 ----
740 ---- No. A-10-1 duplicate hint
741 ----
742
743 -- No. A-10-1-1
744 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.ctid = '(1,1)' AND t1.c1 = t2.c1 AND t2.ctid = '(1,1)' AND t1.c1 = t3.c1 AND t3.ctid = '(1,1)' AND t1.c1 = t4.c1 AND t4.ctid = '(1,1)';
745 /*+
746 Set(enable_tidscan aaa)
747 Set(enable_tidscan on)
748 Set(enable_tidscan off)
749 SeqScan(t4)
750 IndexScan(t4)
751 BitmapScan(t4)
752 TidScan(t4)
753 NestLoop(t4 t3)
754 MergeJoin(t4 t3)
755 HashJoin(t4 t3)
756 Leading(t2 t1 t4 t3)
757 Leading(t1 t4 t3 t2)
758 Leading(t4 t3 t2 t1)
759 */
760 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.ctid = '(1,1)' AND t1.c1 = t2.c1 AND t2.ctid = '(1,1)' AND t1.c1 = t3.c1 AND t3.ctid = '(1,1)' AND t1.c1 = t4.c1 AND t4.ctid = '(1,1)';
761
762 -- No. A-10-1-2
763 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.ctid = '(1,1)' AND t1.c1 = t2.c1 AND t2.ctid = '(1,1)' AND t1.c1 = t3.c1 AND t3.ctid = '(1,1)' AND t1.c1 = t4.c1 AND t4.ctid = '(1,1)';
764 /*+
765 SeqScan(t4)
766 Set(enable_tidscan aaa)
767 IndexScan(t4)
768 NestLoop(t4 t3)
769 Leading(t2 t1 t4 t3)
770 Set(enable_tidscan on)
771 BitmapScan(t4)
772 MergeJoin(t4 t3)
773 Leading(t1 t4 t3 t2)
774 Set(enable_tidscan off)
775 TidScan(t4)
776 HashJoin(t4 t3)
777 Leading(t4 t3 t2 t1)
778 */
779 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.ctid = '(1,1)' AND t1.c1 = t2.c1 AND t2.ctid = '(1,1)' AND t1.c1 = t3.c1 AND t3.ctid = '(1,1)' AND t1.c1 = t4.c1 AND t4.ctid = '(1,1)';
780
781 ----
782 ---- No. A-10-2 restrict query type
783 ----
784
785 -- No. A-10-2-1
786 EXPLAIN (COSTS false) SELECT * FROM s1.t1 FULL OUTER JOIN s1.t2 ON (t1.c1 = t2.c1);
787 /*+HashJoin(t1 t2)*/
788 EXPLAIN (COSTS false) SELECT * FROM s1.t1 FULL OUTER JOIN s1.t2 ON (t1.c1 = t2.c1);
789 /*+MergeJoin(t1 t2)*/
790 EXPLAIN (COSTS false) SELECT * FROM s1.t1 FULL OUTER JOIN s1.t2 ON (t1.c1 = t2.c1);
791 /*+NestLoop(t1 t2)*/
792 EXPLAIN (COSTS true) SELECT * FROM s1.t1 FULL OUTER JOIN s1.t2 ON (t1.c1 = t2.c1);
793
794 -- No. A-10-2-2
795 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c3 = 1 AND t1.ctid = '(1,1)';
796 /*+IndexScan(t1)*/
797 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c3 = 1 AND t1.ctid = '(1,1)';
798 /*+IndexScan(t1 t1_i)*/
799 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c3 = 1 AND t1.ctid = '(1,1)';
800 /*+IndexScan(t1 t1_i1)*/
801 EXPLAIN (COSTS true) SELECT * FROM s1.t1 WHERE t1.c3 = 1 AND t1.ctid = '(1,1)';
802
803 -- No. A-10-2-3
804 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
805 /*+TidScan(t1)*/
806 EXPLAIN (COSTS true) SELECT * FROM s1.t1 WHERE t1.c1 = 1;
807 /*+TidScan(t1)*/
808 EXPLAIN (COSTS false) SELECT * FROM s1.t1 WHERE t1.c1 = 1 AND t1.ctid = '(1,1)';
809
810 ----
811 ---- No. A-10-3 VIEW, RULE multi specified
812 ----
813
814 -- No. A-10-3-1
815 EXPLAIN (COSTS false) SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
816 /*+Leading(v1t1 v1t1)HashJoin(v1t1 v1t1)BitmapScan(v1t1)*/
817 EXPLAIN (COSTS false) SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
818
819 -- No. A-10-3-2
820 EXPLAIN (COSTS false) SELECT * FROM s1.v1 v1, s1.v1_ v2 WHERE v1.c1 = v2.c1;
821 /*+Leading(v1t1 v1t1_)NestLoop(v1t1 v1t1_)SeqScan(v1t1)BitmapScan(v1t1_)*/
822 EXPLAIN (COSTS false) SELECT * FROM s1.v1 v1, s1.v1_ v2 WHERE v1.c1 = v2.c1;
823
824 -- No. A-10-3-3
825 EXPLAIN (COSTS false) SELECT * FROM s1.r4 t1, s1.r4 t2 WHERE t1.c1 = t2.c1;
826 /*+Leading(r4t1 r4t1)HashJoin(r4t1 r4t1)BitmapScan(r4t1)*/
827 EXPLAIN (COSTS false) SELECT * FROM s1.r4 t1, s1.r4 t2 WHERE t1.c1 = t2.c1;
828
829 -- No. A-10-3-4
830 EXPLAIN (COSTS false) SELECT * FROM s1.r4 t1, s1.r5 t2 WHERE t1.c1 = t2.c1;
831 /*+Leading(r4t1 r5t1)NestLoop(r4t1 r5t1)SeqScan(r4t1)BitmapScan(r5t1)*/
832 EXPLAIN (COSTS false) SELECT * FROM s1.r4 t1, s1.r5 t2 WHERE t1.c1 = t2.c1;
833
834 ----
835 ---- No. A-11-1 psql command
836 ----
837
838 SELECT count(*) FROM s1.t1 WHERE t1.c1 = 1;
839 /*+SeqScan(t1)*/
840 SELECT count(*) FROM s1.t1 WHERE t1.c1 = 1;
841 -- No. A-11-1-4
842 \set FETCH_COUNT 0
843 /*+SeqScan(t1)*/
844 SELECT count(*) FROM s1.t1 WHERE t1.c1 = 1;
845 -- No. A-11-1-5
846 \set FETCH_COUNT 1
847 /*+SeqScan(t1)*/
848 SELECT count(*) FROM s1.t1 WHERE t1.c1 = 1;
849 \unset FETCH_COUNT
850
851 ----
852 ---- No. A-12-4 PL/pgSQL function
853 ----
854
855 -- No. A-12-4-1
856 CREATE OR REPLACE FUNCTION f1() RETURNS SETOF text LANGUAGE plpgsql AS $$
857 DECLARE
858     r text;
859 BEGIN
860     FOR r IN EXPLAIN SELECT c4 FROM s1.t1 WHERE t1.c1 = 1
861     LOOP
862         RETURN NEXT r; -- return current row of SELECT
863     END LOOP;
864     RETURN;
865 END
866 $$;
867 SELECT f1();
868 /*+SeqScan(t1)*/
869 SELECT f1();
870
871 -- No. A-12-4-2
872 /*+SeqScan(t1)*/CREATE OR REPLACE FUNCTION f1() RETURNS SETOF text LANGUAGE plpgsql AS $$
873 DECLARE
874     r text;
875 BEGIN
876     /*+SeqScan(t1)*/FOR r IN EXPLAIN /*+SeqScan(t1)*/SELECT c4 FROM s1.t1 WHERE t1.c1 = 1
877     LOOP
878         /*+SeqScan(t1)*/RETURN NEXT r; -- return current row of SELECT
879     END LOOP;
880     /*+SeqScan(t1)*/RETURN;
881 END
882 $$;
883 SELECT f1();
884
885 ----
886 ---- No. A-12-1 reset of global variable of core at the error
887 ---- No. A-12-2 reset of global variable of original at the error
888 ----
889
890 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
891 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
892 PREPARE p1 AS SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
893 EXPLAIN (COSTS false) EXECUTE p1;
894
895 -- No. A-12-1-1
896 -- No. A-12-2-1
897 SELECT name, setting FROM settings;
898 SET pg_hint_plan.parse_messages TO error;
899 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
900 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
901 SELECT name, setting FROM settings;
902 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
903 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
904
905 -- No. A-12-1-2
906 -- No. A-12-2-2
907 SELECT name, setting FROM settings;
908 SET pg_hint_plan.parse_messages TO error;
909 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
910 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
911 SELECT name, setting FROM settings;
912 EXPLAIN (COSTS false) EXECUTE p1;
913
914 -- No. A-12-1-3
915 -- No. A-12-2-3
916 SELECT name, setting FROM settings;
917 SET pg_hint_plan.parse_messages TO error;
918 EXPLAIN (COSTS false) EXECUTE p2;
919 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
920 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
921 EXPLAIN (COSTS false) EXECUTE p1;
922 SELECT name, setting FROM settings;
923
924 -- No. A-12-1-4
925 -- No. A-12-2-4
926 SELECT name, setting FROM settings;
927 SET pg_hint_plan.parse_messages TO error;
928 EXPLAIN (COSTS false) EXECUTE p2;
929 EXPLAIN (COSTS false) EXECUTE p1;
930 SELECT name, setting FROM settings;
931
932 DEALLOCATE p1;
933 SET pg_hint_plan.parse_messages TO LOG;
934
935 ----
936 ---- No. A-12-3 effective range of the hint
937 ----
938
939 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
940
941 -- No. A-12-3-1
942 SET enable_indexscan TO off;
943 SET enable_mergejoin TO off;
944 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
945 SELECT name, setting FROM settings;
946 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
947 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
948 SELECT name, setting FROM settings;
949 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
950
951 -- No. A-12-3-2
952 SET enable_indexscan TO off;
953 SET enable_mergejoin TO off;
954 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
955 SELECT name, setting FROM settings;
956 BEGIN;
957 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
958 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
959 COMMIT;
960 BEGIN;
961 SELECT name, setting FROM settings;
962 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
963 COMMIT;
964
965 -- No. A-12-3-3
966 SET enable_indexscan TO off;
967 SET enable_mergejoin TO off;
968 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
969 SELECT name, setting FROM settings;
970 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
971 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
972 \connect
973 LOAD 'pg_hint_plan';
974 SELECT name, setting FROM settings;
975 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
976
977 SET pg_hint_plan.enable TO on;
978 SET pg_hint_plan.debug_print TO on;
979 SET client_min_messages TO LOG;
980 SET search_path TO public;
981