OSDN Git Service

Support PostgreSQL 13.
[pghintplan/pg_hint_plan.git] / expected / ut-W.out
1 LOAD 'pg_hint_plan';
2 ALTER SYSTEM SET session_preload_libraries TO 'pg_hint_plan';
3 SET pg_hint_plan.enable_hint TO on;
4 SET pg_hint_plan.debug_print TO on;
5 SET client_min_messages TO LOG;
6 CREATE TABLE s1.tl (a int);
7 INSERT INTO s1.tl (SELECT a FROM generate_series(0, 100000) a);
8 -- Queries on ordinary tables with default setting
9 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
10    QUERY PLAN   
11 ----------------
12  Seq Scan on t1
13 (1 row)
14
15 SET parallel_setup_cost to 0;
16 SET parallel_tuple_cost to 0;
17 SET min_parallel_table_scan_size to 0;
18 SET min_parallel_index_scan_size to 0;
19 SET max_parallel_workers_per_gather to DEFAULT;
20 /*+Parallel(t1 8)*/
21 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
22 LOG:  pg_hint_plan:
23 used hint:
24 Parallel(t1 8 soft)
25 not used hint:
26 duplication hint:
27 error hint:
28
29           QUERY PLAN           
30 -------------------------------
31  Gather
32    Workers Planned: 2
33    ->  Parallel Seq Scan on t1
34 (3 rows)
35
36 /*+Parallel(t1 8 soft)*/
37 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
38 LOG:  pg_hint_plan:
39 used hint:
40 Parallel(t1 8 soft)
41 not used hint:
42 duplication hint:
43 error hint:
44
45           QUERY PLAN           
46 -------------------------------
47  Gather
48    Workers Planned: 2
49    ->  Parallel Seq Scan on t1
50 (3 rows)
51
52 /*+Parallel(t1 8 hard)*/
53 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
54 LOG:  pg_hint_plan:
55 used hint:
56 Parallel(t1 8 hard)
57 not used hint:
58 duplication hint:
59 error hint:
60
61           QUERY PLAN           
62 -------------------------------
63  Gather
64    Workers Planned: 8
65    ->  Parallel Seq Scan on t1
66 (3 rows)
67
68 /*+Parallel(t1 4 hard) */ /* to be gather merge*/
69 EXPLAIN (COSTS false) SELECT * FROM s1.t1 ORDER BY s1.t1.c1 LIMIT 4;
70 LOG:  pg_hint_plan:
71 used hint:
72 Parallel(t1 4 hard)
73 not used hint:
74 duplication hint:
75 error hint:
76
77                     QUERY PLAN                     
78 ---------------------------------------------------
79  Limit
80    ->  Gather Merge
81          Workers Planned: 4
82          ->  Parallel Index Scan using t1_i1 on t1
83 (4 rows)
84
85 -- Queries on inheritance tables
86 SET parallel_setup_cost to 0;
87 SET parallel_tuple_cost to 0;
88 SET min_parallel_table_scan_size to 0;
89 SET min_parallel_index_scan_size to 0;
90 SET enable_parallel_append to false;
91 /*+Parallel(p1 8)*/
92 EXPLAIN (COSTS false) SELECT * FROM p1;
93 LOG:  pg_hint_plan:
94 used hint:
95 Parallel(p1 8 soft)
96 not used hint:
97 duplication hint:
98 error hint:
99
100                    QUERY PLAN                   
101 ------------------------------------------------
102  Gather
103    Workers Planned: 1
104    ->  Append
105          ->  Parallel Seq Scan on p1 p1_1
106          ->  Parallel Seq Scan on p1_c1 p1_2
107          ->  Parallel Seq Scan on p1_c2 p1_3
108          ->  Parallel Seq Scan on p1_c3 p1_4
109          ->  Parallel Seq Scan on p1_c4 p1_5
110          ->  Parallel Seq Scan on p1_c1_c1 p1_6
111          ->  Parallel Seq Scan on p1_c1_c2 p1_7
112          ->  Parallel Seq Scan on p1_c3_c1 p1_8
113          ->  Parallel Seq Scan on p1_c3_c2 p1_9
114 (12 rows)
115
116 SET enable_parallel_append to true;
117 /*+Parallel(p1 8)*/
118 EXPLAIN (COSTS false) SELECT * FROM p1;
119 LOG:  pg_hint_plan:
120 used hint:
121 Parallel(p1 8 soft)
122 not used hint:
123 duplication hint:
124 error hint:
125
126                    QUERY PLAN                   
127 ------------------------------------------------
128  Gather
129    Workers Planned: 2
130    ->  Parallel Append
131          ->  Seq Scan on p1 p1_1
132          ->  Seq Scan on p1_c1 p1_2
133          ->  Seq Scan on p1_c3 p1_4
134          ->  Parallel Seq Scan on p1_c2 p1_3
135          ->  Parallel Seq Scan on p1_c4 p1_5
136          ->  Parallel Seq Scan on p1_c1_c1 p1_6
137          ->  Parallel Seq Scan on p1_c1_c2 p1_7
138          ->  Parallel Seq Scan on p1_c3_c1 p1_8
139          ->  Parallel Seq Scan on p1_c3_c2 p1_9
140 (12 rows)
141
142 SET parallel_setup_cost to DEFAULT;
143 SET parallel_tuple_cost to DEFAULT;
144 SET min_parallel_table_scan_size to DEFAULT;
145 SET min_parallel_index_scan_size to DEFAULT;
146 SET enable_parallel_append to false;
147 /*+Parallel(p1 8 hard)*/
148 EXPLAIN (COSTS false) SELECT * FROM p1;
149 LOG:  pg_hint_plan:
150 used hint:
151 Parallel(p1 8 hard)
152 not used hint:
153 duplication hint:
154 error hint:
155
156                    QUERY PLAN                   
157 ------------------------------------------------
158  Gather
159    Workers Planned: 8
160    ->  Append
161          ->  Parallel Seq Scan on p1 p1_1
162          ->  Parallel Seq Scan on p1_c1 p1_2
163          ->  Parallel Seq Scan on p1_c2 p1_3
164          ->  Parallel Seq Scan on p1_c3 p1_4
165          ->  Parallel Seq Scan on p1_c4 p1_5
166          ->  Parallel Seq Scan on p1_c1_c1 p1_6
167          ->  Parallel Seq Scan on p1_c1_c2 p1_7
168          ->  Parallel Seq Scan on p1_c3_c1 p1_8
169          ->  Parallel Seq Scan on p1_c3_c2 p1_9
170 (12 rows)
171
172 SET enable_parallel_append to true;
173 /*+Parallel(p1 8 hard)*/
174 EXPLAIN (COSTS false) SELECT * FROM p1;
175 LOG:  pg_hint_plan:
176 used hint:
177 Parallel(p1 8 hard)
178 not used hint:
179 duplication hint:
180 error hint:
181
182                    QUERY PLAN                   
183 ------------------------------------------------
184  Gather
185    Workers Planned: 8
186    ->  Parallel Append
187          ->  Seq Scan on p1 p1_1
188          ->  Seq Scan on p1_c1 p1_2
189          ->  Seq Scan on p1_c3 p1_4
190          ->  Parallel Seq Scan on p1_c2 p1_3
191          ->  Parallel Seq Scan on p1_c4 p1_5
192          ->  Parallel Seq Scan on p1_c1_c1 p1_6
193          ->  Parallel Seq Scan on p1_c1_c2 p1_7
194          ->  Parallel Seq Scan on p1_c3_c1 p1_8
195          ->  Parallel Seq Scan on p1_c3_c2 p1_9
196 (12 rows)
197
198 -- hinting on children doesn't work (changed as of pg_hint_plan 10)
199 SET enable_parallel_append to false;
200 /*+Parallel(p1_c1 8 hard)*/
201 EXPLAIN (COSTS false) SELECT * FROM p1;
202 LOG:  pg_hint_plan:
203 used hint:
204 Parallel(p1_c1 8 hard)
205 not used hint:
206 duplication hint:
207 error hint:
208
209            QUERY PLAN            
210 ---------------------------------
211  Append
212    ->  Seq Scan on p1 p1_1
213    ->  Seq Scan on p1_c1 p1_2
214    ->  Seq Scan on p1_c2 p1_3
215    ->  Seq Scan on p1_c3 p1_4
216    ->  Seq Scan on p1_c4 p1_5
217    ->  Seq Scan on p1_c1_c1 p1_6
218    ->  Seq Scan on p1_c1_c2 p1_7
219    ->  Seq Scan on p1_c3_c1 p1_8
220    ->  Seq Scan on p1_c3_c2 p1_9
221 (10 rows)
222
223 SET enable_parallel_append to true;
224 /*+Parallel(p1_c1 8 hard)*/
225 EXPLAIN (COSTS false) SELECT * FROM p1;
226 LOG:  pg_hint_plan:
227 used hint:
228 Parallel(p1_c1 8 hard)
229 not used hint:
230 duplication hint:
231 error hint:
232
233            QUERY PLAN            
234 ---------------------------------
235  Append
236    ->  Seq Scan on p1 p1_1
237    ->  Seq Scan on p1_c1 p1_2
238    ->  Seq Scan on p1_c2 p1_3
239    ->  Seq Scan on p1_c3 p1_4
240    ->  Seq Scan on p1_c4 p1_5
241    ->  Seq Scan on p1_c1_c1 p1_6
242    ->  Seq Scan on p1_c1_c2 p1_7
243    ->  Seq Scan on p1_c3_c1 p1_8
244    ->  Seq Scan on p1_c3_c2 p1_9
245 (10 rows)
246
247 -- Joins
248 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
249                 QUERY PLAN                
250 ------------------------------------------
251  Hash Join
252    Hash Cond: (p1_c1_c1.id = p2_c1_c1.id)
253    ->  Seq Scan on p1_c1_c1
254    ->  Hash
255          ->  Seq Scan on p2_c1_c1
256 (5 rows)
257
258 /*+Parallel(p1_c1_c1 8 hard)*/
259 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
260 LOG:  pg_hint_plan:
261 used hint:
262 Parallel(p1_c1_c1 8 hard)
263 not used hint:
264 duplication hint:
265 error hint:
266
267                    QUERY PLAN                    
268 -------------------------------------------------
269  Hash Join
270    Hash Cond: (p2_c1_c1.id = p1_c1_c1.id)
271    ->  Seq Scan on p2_c1_c1
272    ->  Hash
273          ->  Gather
274                Workers Planned: 8
275                ->  Parallel Seq Scan on p1_c1_c1
276 (7 rows)
277
278 SET parallel_setup_cost to 0;
279 SET parallel_tuple_cost to 0;
280 SET min_parallel_table_scan_size to 0;
281 SET min_parallel_index_scan_size to 0;
282 /*+Parallel(p1_c1_c1 8 soft) Parallel(p2_c1_c1 0)*/
283 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
284 LOG:  pg_hint_plan:
285 used hint:
286 Parallel(p1_c1_c1 8 soft)
287 Parallel(p2_c1_c1 0 soft)
288 not used hint:
289 duplication hint:
290 error hint:
291
292                    QUERY PLAN                   
293 ------------------------------------------------
294  Gather
295    Workers Planned: 1
296    ->  Hash Join
297          Hash Cond: (p1_c1_c1.id = p2_c1_c1.id)
298          ->  Parallel Seq Scan on p1_c1_c1
299          ->  Hash
300                ->  Seq Scan on p2_c1_c1
301 (7 rows)
302
303 /*+Parallel(p1_c1_c1 8 hard) Parallel(p2_c1_c1 0)*/
304 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
305 LOG:  pg_hint_plan:
306 used hint:
307 Parallel(p1_c1_c1 8 hard)
308 Parallel(p2_c1_c1 0 soft)
309 not used hint:
310 duplication hint:
311 error hint:
312
313                    QUERY PLAN                   
314 ------------------------------------------------
315  Gather
316    Workers Planned: 8
317    ->  Hash Join
318          Hash Cond: (p1_c1_c1.id = p2_c1_c1.id)
319          ->  Parallel Seq Scan on p1_c1_c1
320          ->  Hash
321                ->  Seq Scan on p2_c1_c1
322 (7 rows)
323
324 /*+Parallel(p1_c1_c1 8 hard) Parallel(p2_c1_c1 8 hard)*/
325 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
326 LOG:  pg_hint_plan:
327 used hint:
328 Parallel(p1_c1_c1 8 hard)
329 Parallel(p2_c1_c1 8 hard)
330 not used hint:
331 duplication hint:
332 error hint:
333
334                    QUERY PLAN                    
335 -------------------------------------------------
336  Gather
337    Workers Planned: 8
338    ->  Parallel Hash Join
339          Hash Cond: (p1_c1_c1.id = p2_c1_c1.id)
340          ->  Parallel Seq Scan on p1_c1_c1
341          ->  Parallel Hash
342                ->  Parallel Seq Scan on p2_c1_c1
343 (7 rows)
344
345 -- Joins on inheritance tables
346 SET parallel_setup_cost to 0;
347 SET parallel_tuple_cost to 0;
348 SET min_parallel_table_scan_size to 0;
349 SET min_parallel_index_scan_size to 0;
350 SET enable_parallel_append to false;
351 /*+Parallel(p1 8)*/
352 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
353 LOG:  pg_hint_plan:
354 used hint:
355 Parallel(p1 8 soft)
356 not used hint:
357 duplication hint:
358 error hint:
359
360                          QUERY PLAN                         
361 ------------------------------------------------------------
362  Gather
363    Workers Planned: 1
364    ->  Parallel Hash Join
365          Hash Cond: (p1.id = p2.id)
366          ->  Append
367                ->  Parallel Seq Scan on p1 p1_1
368                ->  Parallel Seq Scan on p1_c1 p1_2
369                ->  Parallel Seq Scan on p1_c2 p1_3
370                ->  Parallel Seq Scan on p1_c3 p1_4
371                ->  Parallel Seq Scan on p1_c4 p1_5
372                ->  Parallel Seq Scan on p1_c1_c1 p1_6
373                ->  Parallel Seq Scan on p1_c1_c2 p1_7
374                ->  Parallel Seq Scan on p1_c3_c1 p1_8
375                ->  Parallel Seq Scan on p1_c3_c2 p1_9
376          ->  Parallel Hash
377                ->  Append
378                      ->  Parallel Seq Scan on p2 p2_1
379                      ->  Parallel Seq Scan on p2_c1 p2_2
380                      ->  Parallel Seq Scan on p2_c2 p2_3
381                      ->  Parallel Seq Scan on p2_c3 p2_4
382                      ->  Parallel Seq Scan on p2_c4 p2_5
383                      ->  Parallel Seq Scan on p2_c1_c1 p2_6
384                      ->  Parallel Seq Scan on p2_c1_c2 p2_7
385                      ->  Parallel Seq Scan on p2_c3_c1 p2_8
386                      ->  Parallel Seq Scan on p2_c3_c2 p2_9
387 (25 rows)
388
389 SET enable_parallel_append to true;
390 /*+Parallel(p1 8)*/
391 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
392 LOG:  pg_hint_plan:
393 used hint:
394 Parallel(p1 8 soft)
395 not used hint:
396 duplication hint:
397 error hint:
398
399                          QUERY PLAN                         
400 ------------------------------------------------------------
401  Gather
402    Workers Planned: 2
403    ->  Parallel Hash Join
404          Hash Cond: (p1.id = p2.id)
405          ->  Parallel Append
406                ->  Seq Scan on p1 p1_1
407                ->  Seq Scan on p1_c1 p1_2
408                ->  Seq Scan on p1_c3 p1_4
409                ->  Parallel Seq Scan on p1_c2 p1_3
410                ->  Parallel Seq Scan on p1_c4 p1_5
411                ->  Parallel Seq Scan on p1_c1_c1 p1_6
412                ->  Parallel Seq Scan on p1_c1_c2 p1_7
413                ->  Parallel Seq Scan on p1_c3_c1 p1_8
414                ->  Parallel Seq Scan on p1_c3_c2 p1_9
415          ->  Parallel Hash
416                ->  Parallel Append
417                      ->  Seq Scan on p2 p2_1
418                      ->  Seq Scan on p2_c1 p2_2
419                      ->  Seq Scan on p2_c3 p2_4
420                      ->  Parallel Seq Scan on p2_c2 p2_3
421                      ->  Parallel Seq Scan on p2_c4 p2_5
422                      ->  Parallel Seq Scan on p2_c1_c1 p2_6
423                      ->  Parallel Seq Scan on p2_c1_c2 p2_7
424                      ->  Parallel Seq Scan on p2_c3_c1 p2_8
425                      ->  Parallel Seq Scan on p2_c3_c2 p2_9
426 (25 rows)
427
428 SET enable_parallel_append to false;
429 /*+Parallel(p1 8)Parallel(p2 0)*/
430 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
431 LOG:  pg_hint_plan:
432 used hint:
433 Parallel(p1 8 soft)
434 Parallel(p2 0 soft)
435 not used hint:
436 duplication hint:
437 error hint:
438
439                       QUERY PLAN                      
440 ------------------------------------------------------
441  Gather
442    Workers Planned: 1
443    ->  Hash Join
444          Hash Cond: (p1.id = p2.id)
445          ->  Append
446                ->  Parallel Seq Scan on p1 p1_1
447                ->  Parallel Seq Scan on p1_c1 p1_2
448                ->  Parallel Seq Scan on p1_c2 p1_3
449                ->  Parallel Seq Scan on p1_c3 p1_4
450                ->  Parallel Seq Scan on p1_c4 p1_5
451                ->  Parallel Seq Scan on p1_c1_c1 p1_6
452                ->  Parallel Seq Scan on p1_c1_c2 p1_7
453                ->  Parallel Seq Scan on p1_c3_c1 p1_8
454                ->  Parallel Seq Scan on p1_c3_c2 p1_9
455          ->  Hash
456                ->  Append
457                      ->  Seq Scan on p2 p2_1
458                      ->  Seq Scan on p2_c1 p2_2
459                      ->  Seq Scan on p2_c2 p2_3
460                      ->  Seq Scan on p2_c3 p2_4
461                      ->  Seq Scan on p2_c4 p2_5
462                      ->  Seq Scan on p2_c1_c1 p2_6
463                      ->  Seq Scan on p2_c1_c2 p2_7
464                      ->  Seq Scan on p2_c3_c1 p2_8
465                      ->  Seq Scan on p2_c3_c2 p2_9
466 (25 rows)
467
468 SET enable_parallel_append to true;
469 /*+Parallel(p1 8)Parallel(p2 0)*/
470 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
471 LOG:  pg_hint_plan:
472 used hint:
473 Parallel(p1 8 soft)
474 Parallel(p2 0 soft)
475 not used hint:
476 duplication hint:
477 error hint:
478
479                       QUERY PLAN                      
480 ------------------------------------------------------
481  Gather
482    Workers Planned: 2
483    ->  Parallel Hash Join
484          Hash Cond: (p1.id = p2.id)
485          ->  Parallel Append
486                ->  Seq Scan on p1 p1_1
487                ->  Seq Scan on p1_c1 p1_2
488                ->  Seq Scan on p1_c3 p1_4
489                ->  Parallel Seq Scan on p1_c2 p1_3
490                ->  Parallel Seq Scan on p1_c4 p1_5
491                ->  Parallel Seq Scan on p1_c1_c1 p1_6
492                ->  Parallel Seq Scan on p1_c1_c2 p1_7
493                ->  Parallel Seq Scan on p1_c3_c1 p1_8
494                ->  Parallel Seq Scan on p1_c3_c2 p1_9
495          ->  Parallel Hash
496                ->  Parallel Append
497                      ->  Seq Scan on p2_c2 p2_3
498                      ->  Seq Scan on p2_c4 p2_5
499                      ->  Seq Scan on p2_c1_c1 p2_6
500                      ->  Seq Scan on p2_c1_c2 p2_7
501                      ->  Seq Scan on p2_c3_c1 p2_8
502                      ->  Seq Scan on p2_c3_c2 p2_9
503                      ->  Seq Scan on p2 p2_1
504                      ->  Seq Scan on p2_c1 p2_2
505                      ->  Seq Scan on p2_c3 p2_4
506 (25 rows)
507
508 SET parallel_setup_cost to DEFAULT;
509 SET parallel_tuple_cost to DEFAULT;
510 SET min_parallel_table_scan_size to DEFAULT;
511 SET min_parallel_index_scan_size to DEFAULT;
512 /*+Parallel(p2 8 soft)*/
513 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
514 LOG:  pg_hint_plan:
515 used hint:
516 Parallel(p2 8 soft)
517 not used hint:
518 duplication hint:
519 error hint:
520
521                  QUERY PLAN                  
522 ---------------------------------------------
523  Hash Join
524    Hash Cond: (p1.id = p2.id)
525    ->  Append
526          ->  Seq Scan on p1 p1_1
527          ->  Seq Scan on p1_c1 p1_2
528          ->  Seq Scan on p1_c2 p1_3
529          ->  Seq Scan on p1_c3 p1_4
530          ->  Seq Scan on p1_c4 p1_5
531          ->  Seq Scan on p1_c1_c1 p1_6
532          ->  Seq Scan on p1_c1_c2 p1_7
533          ->  Seq Scan on p1_c3_c1 p1_8
534          ->  Seq Scan on p1_c3_c2 p1_9
535    ->  Hash
536          ->  Append
537                ->  Seq Scan on p2 p2_1
538                ->  Seq Scan on p2_c1 p2_2
539                ->  Seq Scan on p2_c2 p2_3
540                ->  Seq Scan on p2_c3 p2_4
541                ->  Seq Scan on p2_c4 p2_5
542                ->  Seq Scan on p2_c1_c1 p2_6
543                ->  Seq Scan on p2_c1_c2 p2_7
544                ->  Seq Scan on p2_c3_c1 p2_8
545                ->  Seq Scan on p2_c3_c2 p2_9
546 (23 rows)
547
548 /*+Parallel(p2 8 hard)*/
549 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
550 LOG:  pg_hint_plan:
551 used hint:
552 Parallel(p2 8 hard)
553 not used hint:
554 duplication hint:
555 error hint:
556
557                          QUERY PLAN                         
558 ------------------------------------------------------------
559  Gather
560    Workers Planned: 8
561    ->  Parallel Hash Join
562          Hash Cond: (p2.id = p1.id)
563          ->  Parallel Append
564                ->  Seq Scan on p2 p2_1
565                ->  Seq Scan on p2_c1 p2_2
566                ->  Seq Scan on p2_c3 p2_4
567                ->  Parallel Seq Scan on p2_c2 p2_3
568                ->  Parallel Seq Scan on p2_c4 p2_5
569                ->  Parallel Seq Scan on p2_c1_c1 p2_6
570                ->  Parallel Seq Scan on p2_c1_c2 p2_7
571                ->  Parallel Seq Scan on p2_c3_c1 p2_8
572                ->  Parallel Seq Scan on p2_c3_c2 p2_9
573          ->  Parallel Hash
574                ->  Parallel Append
575                      ->  Seq Scan on p1 p1_1
576                      ->  Seq Scan on p1_c1 p1_2
577                      ->  Seq Scan on p1_c3 p1_4
578                      ->  Parallel Seq Scan on p1_c2 p1_3
579                      ->  Parallel Seq Scan on p1_c4 p1_5
580                      ->  Parallel Seq Scan on p1_c1_c1 p1_6
581                      ->  Parallel Seq Scan on p1_c1_c2 p1_7
582                      ->  Parallel Seq Scan on p1_c3_c1 p1_8
583                      ->  Parallel Seq Scan on p1_c3_c2 p1_9
584 (25 rows)
585
586 -- Number of workers results to the largest number
587 SET enable_parallel_append to false;
588 /*+Parallel(p2 8 hard) Parallel(p1 5 hard) */
589 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
590 LOG:  pg_hint_plan:
591 used hint:
592 Parallel(p1 5 hard)
593 Parallel(p2 8 hard)
594 not used hint:
595 duplication hint:
596 error hint:
597
598                          QUERY PLAN                         
599 ------------------------------------------------------------
600  Gather
601    Workers Planned: 8
602    ->  Parallel Hash Join
603          Hash Cond: (p1.id = p2.id)
604          ->  Append
605                ->  Parallel Seq Scan on p1 p1_1
606                ->  Parallel Seq Scan on p1_c1 p1_2
607                ->  Parallel Seq Scan on p1_c2 p1_3
608                ->  Parallel Seq Scan on p1_c3 p1_4
609                ->  Parallel Seq Scan on p1_c4 p1_5
610                ->  Parallel Seq Scan on p1_c1_c1 p1_6
611                ->  Parallel Seq Scan on p1_c1_c2 p1_7
612                ->  Parallel Seq Scan on p1_c3_c1 p1_8
613                ->  Parallel Seq Scan on p1_c3_c2 p1_9
614          ->  Parallel Hash
615                ->  Append
616                      ->  Parallel Seq Scan on p2 p2_1
617                      ->  Parallel Seq Scan on p2_c1 p2_2
618                      ->  Parallel Seq Scan on p2_c2 p2_3
619                      ->  Parallel Seq Scan on p2_c3 p2_4
620                      ->  Parallel Seq Scan on p2_c4 p2_5
621                      ->  Parallel Seq Scan on p2_c1_c1 p2_6
622                      ->  Parallel Seq Scan on p2_c1_c2 p2_7
623                      ->  Parallel Seq Scan on p2_c3_c1 p2_8
624                      ->  Parallel Seq Scan on p2_c3_c2 p2_9
625 (25 rows)
626
627 SET enable_parallel_append to true;
628 /*+Parallel(p2 8 hard) Parallel(p1 5 hard) */
629 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
630 LOG:  pg_hint_plan:
631 used hint:
632 Parallel(p1 5 hard)
633 Parallel(p2 8 hard)
634 not used hint:
635 duplication hint:
636 error hint:
637
638                          QUERY PLAN                         
639 ------------------------------------------------------------
640  Gather
641    Workers Planned: 8
642    ->  Parallel Hash Join
643          Hash Cond: (p2.id = p1.id)
644          ->  Parallel Append
645                ->  Seq Scan on p2 p2_1
646                ->  Seq Scan on p2_c1 p2_2
647                ->  Seq Scan on p2_c3 p2_4
648                ->  Parallel Seq Scan on p2_c2 p2_3
649                ->  Parallel Seq Scan on p2_c4 p2_5
650                ->  Parallel Seq Scan on p2_c1_c1 p2_6
651                ->  Parallel Seq Scan on p2_c1_c2 p2_7
652                ->  Parallel Seq Scan on p2_c3_c1 p2_8
653                ->  Parallel Seq Scan on p2_c3_c2 p2_9
654          ->  Parallel Hash
655                ->  Parallel Append
656                      ->  Seq Scan on p1 p1_1
657                      ->  Seq Scan on p1_c1 p1_2
658                      ->  Seq Scan on p1_c3 p1_4
659                      ->  Parallel Seq Scan on p1_c2 p1_3
660                      ->  Parallel Seq Scan on p1_c4 p1_5
661                      ->  Parallel Seq Scan on p1_c1_c1 p1_6
662                      ->  Parallel Seq Scan on p1_c1_c2 p1_7
663                      ->  Parallel Seq Scan on p1_c3_c1 p1_8
664                      ->  Parallel Seq Scan on p1_c3_c2 p1_9
665 (25 rows)
666
667 -- Mixture with scan hints
668 -- p1 can be parallel
669 SET enable_parallel_append to false;
670 /*+Parallel(p1 8 hard) IndexScan(p2) */
671 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
672 LOG:  pg_hint_plan:
673 used hint:
674 IndexScan(p2)
675 Parallel(p1 8 hard)
676 not used hint:
677 duplication hint:
678 error hint:
679
680                             QUERY PLAN                             
681 -------------------------------------------------------------------
682  Hash Join
683    Hash Cond: (p2.id = p1.id)
684    ->  Append
685          ->  Index Scan using p2_id2_val on p2 p2_1
686          ->  Index Scan using p2_c1_id2_val on p2_c1 p2_2
687          ->  Index Scan using p2_c2_id2_val on p2_c2 p2_3
688          ->  Index Scan using p2_c3_id_val_idx on p2_c3 p2_4
689          ->  Index Scan using p2_c4_id_val_idx on p2_c4 p2_5
690          ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1 p2_6
691          ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2 p2_7
692          ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1 p2_8
693          ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2 p2_9
694    ->  Hash
695          ->  Gather
696                Workers Planned: 8
697                ->  Append
698                      ->  Parallel Seq Scan on p1 p1_1
699                      ->  Parallel Seq Scan on p1_c1 p1_2
700                      ->  Parallel Seq Scan on p1_c2 p1_3
701                      ->  Parallel Seq Scan on p1_c3 p1_4
702                      ->  Parallel Seq Scan on p1_c4 p1_5
703                      ->  Parallel Seq Scan on p1_c1_c1 p1_6
704                      ->  Parallel Seq Scan on p1_c1_c2 p1_7
705                      ->  Parallel Seq Scan on p1_c3_c1 p1_8
706                      ->  Parallel Seq Scan on p1_c3_c2 p1_9
707 (25 rows)
708
709 SET enable_parallel_append to true;
710 /*+Parallel(p1 8 hard) IndexScan(p2) */
711 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
712 LOG:  pg_hint_plan:
713 used hint:
714 IndexScan(p2)
715 Parallel(p1 8 hard)
716 not used hint:
717 duplication hint:
718 error hint:
719
720                             QUERY PLAN                             
721 -------------------------------------------------------------------
722  Hash Join
723    Hash Cond: (p2.id = p1.id)
724    ->  Append
725          ->  Index Scan using p2_id2_val on p2 p2_1
726          ->  Index Scan using p2_c1_id2_val on p2_c1 p2_2
727          ->  Index Scan using p2_c2_id2_val on p2_c2 p2_3
728          ->  Index Scan using p2_c3_id_val_idx on p2_c3 p2_4
729          ->  Index Scan using p2_c4_id_val_idx on p2_c4 p2_5
730          ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1 p2_6
731          ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2 p2_7
732          ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1 p2_8
733          ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2 p2_9
734    ->  Hash
735          ->  Gather
736                Workers Planned: 8
737                ->  Parallel Append
738                      ->  Seq Scan on p1 p1_1
739                      ->  Seq Scan on p1_c1 p1_2
740                      ->  Seq Scan on p1_c3 p1_4
741                      ->  Parallel Seq Scan on p1_c2 p1_3
742                      ->  Parallel Seq Scan on p1_c4 p1_5
743                      ->  Parallel Seq Scan on p1_c1_c1 p1_6
744                      ->  Parallel Seq Scan on p1_c1_c2 p1_7
745                      ->  Parallel Seq Scan on p1_c3_c1 p1_8
746                      ->  Parallel Seq Scan on p1_c3_c2 p1_9
747 (25 rows)
748
749 -- Parallel sequential scan
750 SET enable_parallel_append to false;
751 /*+Parallel(p1 8 hard) SeqScan(p1) */
752 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
753 LOG:  pg_hint_plan:
754 used hint:
755 SeqScan(p1)
756 Parallel(p1 8 hard)
757 not used hint:
758 duplication hint:
759 error hint:
760
761                          QUERY PLAN                         
762 ------------------------------------------------------------
763  Gather
764    Workers Planned: 8
765    ->  Parallel Hash Join
766          Hash Cond: (p1.id = p2.id)
767          ->  Append
768                ->  Parallel Seq Scan on p1 p1_1
769                ->  Parallel Seq Scan on p1_c1 p1_2
770                ->  Parallel Seq Scan on p1_c2 p1_3
771                ->  Parallel Seq Scan on p1_c3 p1_4
772                ->  Parallel Seq Scan on p1_c4 p1_5
773                ->  Parallel Seq Scan on p1_c1_c1 p1_6
774                ->  Parallel Seq Scan on p1_c1_c2 p1_7
775                ->  Parallel Seq Scan on p1_c3_c1 p1_8
776                ->  Parallel Seq Scan on p1_c3_c2 p1_9
777          ->  Parallel Hash
778                ->  Append
779                      ->  Parallel Seq Scan on p2 p2_1
780                      ->  Parallel Seq Scan on p2_c1 p2_2
781                      ->  Parallel Seq Scan on p2_c2 p2_3
782                      ->  Parallel Seq Scan on p2_c3 p2_4
783                      ->  Parallel Seq Scan on p2_c4 p2_5
784                      ->  Parallel Seq Scan on p2_c1_c1 p2_6
785                      ->  Parallel Seq Scan on p2_c1_c2 p2_7
786                      ->  Parallel Seq Scan on p2_c3_c1 p2_8
787                      ->  Parallel Seq Scan on p2_c3_c2 p2_9
788 (25 rows)
789
790 SET enable_parallel_append to true;
791 /*+Parallel(p1 8 hard) SeqScan(p1) */
792 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
793 LOG:  pg_hint_plan:
794 used hint:
795 SeqScan(p1)
796 Parallel(p1 8 hard)
797 not used hint:
798 duplication hint:
799 error hint:
800
801                          QUERY PLAN                         
802 ------------------------------------------------------------
803  Gather
804    Workers Planned: 8
805    ->  Parallel Hash Join
806          Hash Cond: (p1.id = p2.id)
807          ->  Parallel Append
808                ->  Seq Scan on p1 p1_1
809                ->  Seq Scan on p1_c1 p1_2
810                ->  Seq Scan on p1_c3 p1_4
811                ->  Parallel Seq Scan on p1_c2 p1_3
812                ->  Parallel Seq Scan on p1_c4 p1_5
813                ->  Parallel Seq Scan on p1_c1_c1 p1_6
814                ->  Parallel Seq Scan on p1_c1_c2 p1_7
815                ->  Parallel Seq Scan on p1_c3_c1 p1_8
816                ->  Parallel Seq Scan on p1_c3_c2 p1_9
817          ->  Parallel Hash
818                ->  Parallel Append
819                      ->  Seq Scan on p2 p2_1
820                      ->  Seq Scan on p2_c1 p2_2
821                      ->  Seq Scan on p2_c3 p2_4
822                      ->  Parallel Seq Scan on p2_c2 p2_3
823                      ->  Parallel Seq Scan on p2_c4 p2_5
824                      ->  Parallel Seq Scan on p2_c1_c1 p2_6
825                      ->  Parallel Seq Scan on p2_c1_c2 p2_7
826                      ->  Parallel Seq Scan on p2_c3_c1 p2_8
827                      ->  Parallel Seq Scan on p2_c3_c2 p2_9
828 (25 rows)
829
830 -- Parallel index scan
831 SET enable_parallel_append to false;
832 /*+Parallel(p1 8 hard) IndexScan(p1) */
833 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
834 LOG:  pg_hint_plan:
835 used hint:
836 IndexScan(p1)
837 Parallel(p1 8 hard)
838 not used hint:
839 duplication hint:
840 error hint:
841
842                                  QUERY PLAN                                 
843 ----------------------------------------------------------------------------
844  Gather
845    Workers Planned: 8
846    ->  Parallel Hash Join
847          Hash Cond: (p1.id = p2.id)
848          ->  Append
849                ->  Parallel Index Scan using p1_pkey on p1 p1_1
850                ->  Parallel Index Scan using p1_c1_pkey on p1_c1 p1_2
851                ->  Parallel Index Scan using p1_c2_pkey on p1_c2 p1_3
852                ->  Parallel Index Scan using p1_c3_pkey on p1_c3 p1_4
853                ->  Parallel Index Scan using p1_c4_pkey on p1_c4 p1_5
854                ->  Parallel Index Scan using p1_c1_c1_pkey on p1_c1_c1 p1_6
855                ->  Parallel Index Scan using p1_c1_c2_pkey on p1_c1_c2 p1_7
856                ->  Parallel Index Scan using p1_c3_c1_pkey on p1_c3_c1 p1_8
857                ->  Parallel Index Scan using p1_c3_c2_pkey on p1_c3_c2 p1_9
858          ->  Parallel Hash
859                ->  Append
860                      ->  Parallel Seq Scan on p2 p2_1
861                      ->  Parallel Seq Scan on p2_c1 p2_2
862                      ->  Parallel Seq Scan on p2_c2 p2_3
863                      ->  Parallel Seq Scan on p2_c3 p2_4
864                      ->  Parallel Seq Scan on p2_c4 p2_5
865                      ->  Parallel Seq Scan on p2_c1_c1 p2_6
866                      ->  Parallel Seq Scan on p2_c1_c2 p2_7
867                      ->  Parallel Seq Scan on p2_c3_c1 p2_8
868                      ->  Parallel Seq Scan on p2_c3_c2 p2_9
869 (25 rows)
870
871 SET enable_parallel_append to true;
872 /*+Parallel(p1 8 hard) IndexScan(p1) */
873 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
874 LOG:  pg_hint_plan:
875 used hint:
876 IndexScan(p1)
877 Parallel(p1 8 hard)
878 not used hint:
879 duplication hint:
880 error hint:
881
882                                  QUERY PLAN                                 
883 ----------------------------------------------------------------------------
884  Gather
885    Workers Planned: 8
886    ->  Parallel Hash Join
887          Hash Cond: (p1.id = p2.id)
888          ->  Parallel Append
889                ->  Parallel Index Scan using p1_pkey on p1 p1_1
890                ->  Parallel Index Scan using p1_c1_pkey on p1_c1 p1_2
891                ->  Parallel Index Scan using p1_c2_pkey on p1_c2 p1_3
892                ->  Parallel Index Scan using p1_c3_pkey on p1_c3 p1_4
893                ->  Parallel Index Scan using p1_c4_pkey on p1_c4 p1_5
894                ->  Parallel Index Scan using p1_c1_c1_pkey on p1_c1_c1 p1_6
895                ->  Parallel Index Scan using p1_c1_c2_pkey on p1_c1_c2 p1_7
896                ->  Parallel Index Scan using p1_c3_c1_pkey on p1_c3_c1 p1_8
897                ->  Parallel Index Scan using p1_c3_c2_pkey on p1_c3_c2 p1_9
898          ->  Parallel Hash
899                ->  Parallel Append
900                      ->  Seq Scan on p2 p2_1
901                      ->  Seq Scan on p2_c1 p2_2
902                      ->  Seq Scan on p2_c3 p2_4
903                      ->  Parallel Seq Scan on p2_c2 p2_3
904                      ->  Parallel Seq Scan on p2_c4 p2_5
905                      ->  Parallel Seq Scan on p2_c1_c1 p2_6
906                      ->  Parallel Seq Scan on p2_c1_c2 p2_7
907                      ->  Parallel Seq Scan on p2_c3_c1 p2_8
908                      ->  Parallel Seq Scan on p2_c3_c2 p2_9
909 (25 rows)
910
911 -- This hint doesn't turn on parallel, so the Parallel hint is ignored
912 set max_parallel_workers_per_gather TO 0;
913 /*+Parallel(p1 0 hard) IndexScan(p1) */
914 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
915 LOG:  pg_hint_plan:
916 used hint:
917 IndexScan(p1)
918 not used hint:
919 Parallel(p1 0 hard)
920 duplication hint:
921 error hint:
922
923                          QUERY PLAN                          
924 -------------------------------------------------------------
925  Hash Join
926    Hash Cond: (p1.id = p2.id)
927    ->  Append
928          ->  Index Scan using p1_pkey on p1 p1_1
929          ->  Index Scan using p1_c1_pkey on p1_c1 p1_2
930          ->  Index Scan using p1_c2_pkey on p1_c2 p1_3
931          ->  Index Scan using p1_c3_pkey on p1_c3 p1_4
932          ->  Index Scan using p1_c4_pkey on p1_c4 p1_5
933          ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1 p1_6
934          ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2 p1_7
935          ->  Index Scan using p1_c3_c1_pkey on p1_c3_c1 p1_8
936          ->  Index Scan using p1_c3_c2_pkey on p1_c3_c2 p1_9
937    ->  Hash
938          ->  Append
939                ->  Seq Scan on p2 p2_1
940                ->  Seq Scan on p2_c1 p2_2
941                ->  Seq Scan on p2_c2 p2_3
942                ->  Seq Scan on p2_c3 p2_4
943                ->  Seq Scan on p2_c4 p2_5
944                ->  Seq Scan on p2_c1_c1 p2_6
945                ->  Seq Scan on p2_c1_c2 p2_7
946                ->  Seq Scan on p2_c3_c1 p2_8
947                ->  Seq Scan on p2_c3_c2 p2_9
948 (23 rows)
949
950 -- Parallel on UNION
951 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
952            QUERY PLAN            
953 ---------------------------------
954  Append
955    ->  Seq Scan on p1
956    ->  Seq Scan on p1_c1 p1_1
957    ->  Seq Scan on p1_c2 p1_2
958    ->  Seq Scan on p1_c3 p1_3
959    ->  Seq Scan on p1_c4 p1_4
960    ->  Seq Scan on p1_c1_c1 p1_5
961    ->  Seq Scan on p1_c1_c2 p1_6
962    ->  Seq Scan on p1_c3_c1 p1_7
963    ->  Seq Scan on p1_c3_c2 p1_8
964    ->  Seq Scan on p2
965    ->  Seq Scan on p2_c1 p2_1
966    ->  Seq Scan on p2_c2 p2_2
967    ->  Seq Scan on p2_c3 p2_3
968    ->  Seq Scan on p2_c4 p2_4
969    ->  Seq Scan on p2_c1_c1 p2_5
970    ->  Seq Scan on p2_c1_c2 p2_6
971    ->  Seq Scan on p2_c3_c1 p2_7
972    ->  Seq Scan on p2_c3_c2 p2_8
973 (19 rows)
974
975 -- parallel hinting on any relation enables parallel
976 SET parallel_setup_cost to 0;
977 SET parallel_tuple_cost to 0;
978 SET min_parallel_table_scan_size to 0;
979 SET min_parallel_index_scan_size to 0;
980 SET max_parallel_workers_per_gather to 0;
981 /*+Parallel(p1 8) */
982 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
983 LOG:  pg_hint_plan:
984 used hint:
985 Parallel(p1 8 soft)
986 not used hint:
987 duplication hint:
988 error hint:
989
990                    QUERY PLAN                   
991 ------------------------------------------------
992  Gather
993    Workers Planned: 1
994    ->  Parallel Append
995          ->  Parallel Seq Scan on p2_c2 p2_2
996          ->  Parallel Seq Scan on p2_c4 p2_4
997          ->  Parallel Seq Scan on p2_c1_c1 p2_5
998          ->  Parallel Seq Scan on p2_c1_c2 p2_6
999          ->  Parallel Seq Scan on p2_c3_c1 p2_7
1000          ->  Parallel Seq Scan on p2_c3_c2 p2_8
1001          ->  Parallel Seq Scan on p1
1002          ->  Parallel Seq Scan on p1_c1 p1_1
1003          ->  Parallel Seq Scan on p1_c2 p1_2
1004          ->  Parallel Seq Scan on p1_c3 p1_3
1005          ->  Parallel Seq Scan on p1_c4 p1_4
1006          ->  Parallel Seq Scan on p1_c1_c1 p1_5
1007          ->  Parallel Seq Scan on p1_c1_c2 p1_6
1008          ->  Parallel Seq Scan on p1_c3_c1 p1_7
1009          ->  Parallel Seq Scan on p1_c3_c2 p1_8
1010          ->  Parallel Seq Scan on p2
1011          ->  Parallel Seq Scan on p2_c1 p2_1
1012          ->  Parallel Seq Scan on p2_c3 p2_3
1013 (21 rows)
1014
1015 -- set hint has the same effect
1016 /*+Set(max_parallel_workers_per_gather 1)*/
1017 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
1018 LOG:  pg_hint_plan:
1019 used hint:
1020 Set(max_parallel_workers_per_gather 1)
1021 not used hint:
1022 duplication hint:
1023 error hint:
1024
1025                    QUERY PLAN                   
1026 ------------------------------------------------
1027  Gather
1028    Workers Planned: 1
1029    ->  Parallel Append
1030          ->  Parallel Seq Scan on p1_c2 p1_2
1031          ->  Parallel Seq Scan on p1_c4 p1_4
1032          ->  Parallel Seq Scan on p2_c2 p2_2
1033          ->  Parallel Seq Scan on p2_c4 p2_4
1034          ->  Parallel Seq Scan on p1_c1_c1 p1_5
1035          ->  Parallel Seq Scan on p1_c1_c2 p1_6
1036          ->  Parallel Seq Scan on p1_c3_c1 p1_7
1037          ->  Parallel Seq Scan on p1_c3_c2 p1_8
1038          ->  Parallel Seq Scan on p2_c1_c1 p2_5
1039          ->  Parallel Seq Scan on p2_c1_c2 p2_6
1040          ->  Parallel Seq Scan on p2_c3_c1 p2_7
1041          ->  Parallel Seq Scan on p2_c3_c2 p2_8
1042          ->  Parallel Seq Scan on p1
1043          ->  Parallel Seq Scan on p1_c1 p1_1
1044          ->  Parallel Seq Scan on p1_c3 p1_3
1045          ->  Parallel Seq Scan on p2
1046          ->  Parallel Seq Scan on p2_c1 p2_1
1047          ->  Parallel Seq Scan on p2_c3 p2_3
1048 (21 rows)
1049
1050 -- applies largest number of workers on merged parallel paths
1051 SET parallel_setup_cost to DEFAULT;
1052 SET parallel_tuple_cost to DEFAULT;
1053 SET min_parallel_table_scan_size to DEFAULT;
1054 SET min_parallel_index_scan_size to DEFAULT;
1055 SET max_parallel_workers_per_gather to 8;
1056 /*+Parallel(p1 5 hard)Parallel(p2 6 hard) */
1057 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
1058 LOG:  pg_hint_plan:
1059 used hint:
1060 Parallel(p1 5 hard)
1061 Parallel(p2 6 hard)
1062 not used hint:
1063 duplication hint:
1064 error hint:
1065
1066                    QUERY PLAN                   
1067 ------------------------------------------------
1068  Gather
1069    Workers Planned: 6
1070    ->  Parallel Append
1071          ->  Seq Scan on p1
1072          ->  Seq Scan on p1_c1 p1_1
1073          ->  Seq Scan on p1_c3 p1_3
1074          ->  Seq Scan on p2
1075          ->  Seq Scan on p2_c1 p2_1
1076          ->  Seq Scan on p2_c3 p2_3
1077          ->  Parallel Seq Scan on p1_c2 p1_2
1078          ->  Parallel Seq Scan on p1_c4 p1_4
1079          ->  Parallel Seq Scan on p1_c1_c1 p1_5
1080          ->  Parallel Seq Scan on p1_c1_c2 p1_6
1081          ->  Parallel Seq Scan on p1_c3_c1 p1_7
1082          ->  Parallel Seq Scan on p1_c3_c2 p1_8
1083          ->  Parallel Seq Scan on p2_c2 p2_2
1084          ->  Parallel Seq Scan on p2_c4 p2_4
1085          ->  Parallel Seq Scan on p2_c1_c1 p2_5
1086          ->  Parallel Seq Scan on p2_c1_c2 p2_6
1087          ->  Parallel Seq Scan on p2_c3_c1 p2_7
1088          ->  Parallel Seq Scan on p2_c3_c2 p2_8
1089 (21 rows)
1090
1091 -- Negative hints
1092 SET enable_indexscan to DEFAULT;
1093 SET parallel_setup_cost to 0;
1094 SET parallel_tuple_cost to 0;
1095 SET min_parallel_table_scan_size to 0;
1096 SET min_parallel_index_scan_size to 0;
1097 SET max_parallel_workers_per_gather to 5;
1098 EXPLAIN (COSTS false) SELECT * FROM p1;
1099                    QUERY PLAN                   
1100 ------------------------------------------------
1101  Gather
1102    Workers Planned: 4
1103    ->  Parallel Append
1104          ->  Parallel Seq Scan on p1_c2 p1_3
1105          ->  Parallel Seq Scan on p1_c4 p1_5
1106          ->  Parallel Seq Scan on p1_c1_c1 p1_6
1107          ->  Parallel Seq Scan on p1_c1_c2 p1_7
1108          ->  Parallel Seq Scan on p1_c3_c1 p1_8
1109          ->  Parallel Seq Scan on p1_c3_c2 p1_9
1110          ->  Parallel Seq Scan on p1 p1_1
1111          ->  Parallel Seq Scan on p1_c1 p1_2
1112          ->  Parallel Seq Scan on p1_c3 p1_4
1113 (12 rows)
1114
1115 SET enable_parallel_append to false;
1116 /*+Parallel(p1 0 hard)*/
1117 EXPLAIN (COSTS false) SELECT * FROM p1;
1118 LOG:  pg_hint_plan:
1119 used hint:
1120 Parallel(p1 0 hard)
1121 not used hint:
1122 duplication hint:
1123 error hint:
1124
1125            QUERY PLAN            
1126 ---------------------------------
1127  Append
1128    ->  Seq Scan on p1 p1_1
1129    ->  Seq Scan on p1_c1 p1_2
1130    ->  Seq Scan on p1_c2 p1_3
1131    ->  Seq Scan on p1_c3 p1_4
1132    ->  Seq Scan on p1_c4 p1_5
1133    ->  Seq Scan on p1_c1_c1 p1_6
1134    ->  Seq Scan on p1_c1_c2 p1_7
1135    ->  Seq Scan on p1_c3_c1 p1_8
1136    ->  Seq Scan on p1_c3_c2 p1_9
1137 (10 rows)
1138
1139 SET enable_parallel_append to true;
1140 /*+Parallel(p1 0 hard)*/
1141 EXPLAIN (COSTS false) SELECT * FROM p1;
1142 LOG:  pg_hint_plan:
1143 used hint:
1144 Parallel(p1 0 hard)
1145 not used hint:
1146 duplication hint:
1147 error hint:
1148
1149            QUERY PLAN            
1150 ---------------------------------
1151  Append
1152    ->  Seq Scan on p1 p1_1
1153    ->  Seq Scan on p1_c1 p1_2
1154    ->  Seq Scan on p1_c2 p1_3
1155    ->  Seq Scan on p1_c3 p1_4
1156    ->  Seq Scan on p1_c4 p1_5
1157    ->  Seq Scan on p1_c1_c1 p1_6
1158    ->  Seq Scan on p1_c1_c2 p1_7
1159    ->  Seq Scan on p1_c3_c1 p1_8
1160    ->  Seq Scan on p1_c3_c2 p1_9
1161 (10 rows)
1162
1163 -- Errors
1164 /*+Parallel(p1 100x hard)Parallel(p1 -1000 hard)Parallel(p1 1000000 hard)
1165    Parallel(p1 8 hoge)Parallel(p1)Parallel(p1 100 soft x)*/
1166 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
1167 INFO:  pg_hint_plan: hint syntax error at or near "100x"
1168 DETAIL:  number of workers must be a number: Parallel
1169 INFO:  pg_hint_plan: hint syntax error at or near "-1000"
1170 DETAIL:  number of workers must be positive: Parallel
1171 INFO:  pg_hint_plan: hint syntax error at or near "1000000"
1172 DETAIL:  number of workers = 1000000 is larger than max_worker_processes(8): Parallel
1173 INFO:  pg_hint_plan: hint syntax error at or near "hoge"
1174 DETAIL:  enforcement must be soft or hard: Parallel
1175 INFO:  pg_hint_plan: hint syntax error at or near ")"
1176 DETAIL:  wrong number of arguments (1): Parallel
1177 INFO:  pg_hint_plan: hint syntax error at or near ")"
1178 DETAIL:  wrong number of arguments (4): Parallel
1179 LOG:  pg_hint_plan:
1180 used hint:
1181 not used hint:
1182 duplication hint:
1183 error hint:
1184 Parallel(p1 100x hard)
1185 Parallel(p1 -1000 hard)
1186 Parallel(p1 1000000 hard)
1187 Parallel(p1 8 soft)
1188 Parallel()
1189 Parallel()
1190
1191                    QUERY PLAN                   
1192 ------------------------------------------------
1193  Gather
1194    Workers Planned: 1
1195    ->  Parallel Append
1196          ->  Parallel Seq Scan on p1_c2 p1_2
1197          ->  Parallel Seq Scan on p1_c4 p1_4
1198          ->  Parallel Seq Scan on p2_c2 p2_2
1199          ->  Parallel Seq Scan on p2_c4 p2_4
1200          ->  Parallel Seq Scan on p1_c1_c1 p1_5
1201          ->  Parallel Seq Scan on p1_c1_c2 p1_6
1202          ->  Parallel Seq Scan on p1_c3_c1 p1_7
1203          ->  Parallel Seq Scan on p1_c3_c2 p1_8
1204          ->  Parallel Seq Scan on p2_c1_c1 p2_5
1205          ->  Parallel Seq Scan on p2_c1_c2 p2_6
1206          ->  Parallel Seq Scan on p2_c3_c1 p2_7
1207          ->  Parallel Seq Scan on p2_c3_c2 p2_8
1208          ->  Parallel Seq Scan on p1
1209          ->  Parallel Seq Scan on p1_c1 p1_1
1210          ->  Parallel Seq Scan on p1_c3 p1_3
1211          ->  Parallel Seq Scan on p2
1212          ->  Parallel Seq Scan on p2_c1 p2_1
1213          ->  Parallel Seq Scan on p2_c3 p2_3
1214 (21 rows)
1215
1216 -- Hints on unhintable relations are just ignored
1217 /*+Parallel(p1 5 hard) Parallel(s1 3 hard) IndexScan(ft1) SeqScan(cte1)
1218   TidScan(fs1) IndexScan(t) IndexScan(*VALUES*) */
1219 \o results/ut-W.tmpout
1220 EXPLAIN (COSTS false) SELECT id FROM p1_c1_c1 as s1 TABLESAMPLE SYSTEM(10)
1221  UNION ALL
1222 SELECT id FROM ft1
1223  UNION ALL
1224 (WITH cte1 AS (SELECT id FROM p1 WHERE id % 2 = 0) SELECT id FROM cte1)
1225  UNION ALL
1226 SELECT userid FROM pg_stat_statements fs1
1227  UNION ALL
1228 SELECT x FROM (VALUES (1), (2), (3)) t(x);
1229 LOG:  pg_hint_plan:
1230 used hint:
1231 Parallel(p1 5 hard)
1232 not used hint:
1233 IndexScan(*VALUES*)
1234 SeqScan(cte1)
1235 TidScan(fs1)
1236 IndexScan(ft1)
1237 IndexScan(t)
1238 Parallel(s1 3 hard)
1239 duplication hint:
1240 error hint:
1241
1242 \o
1243 \! sql/maskout2.sh results/ut-W.tmpout
1244 --(snip..)
1245 --(snip..)
1246  Append
1247    ->  Result
1248          ->  Append
1249                ->  Sample Scan on p1_c1_c1 s1
1250                      Sampling: system ('10'::real)
1251                ->  Foreign Scan on ft1
1252                      Foreign File:  (snip..)
1253                ->  Gather
1254                      Workers Planned: 5
1255                      ->  Parallel Append
1256                            ->  Seq Scan on p1 p1_1
1257                                  Filter: ((id % 2) = 0)
1258                            ->  Seq Scan on p1_c1 p1_2
1259                                  Filter: ((id % 2) = 0)
1260                            ->  Seq Scan on p1_c3 p1_4
1261                                  Filter: ((id % 2) = 0)
1262                            ->  Parallel Seq Scan on p1_c2 p1_3
1263                                  Filter: ((id % 2) = 0)
1264                            ->  Parallel Seq Scan on p1_c4 p1_5
1265                                  Filter: ((id % 2) = 0)
1266                            ->  Parallel Seq Scan on p1_c1_c1 p1_6
1267                                  Filter: ((id % 2) = 0)
1268                            ->  Parallel Seq Scan on p1_c1_c2 p1_7
1269                                  Filter: ((id % 2) = 0)
1270                            ->  Parallel Seq Scan on p1_c3_c1 p1_8
1271                                  Filter: ((id % 2) = 0)
1272                            ->  Parallel Seq Scan on p1_c3_c2 p1_9
1273                                  Filter: ((id % 2) = 0)
1274    ->  Function Scan on pg_stat_statements
1275    ->  Subquery Scan on "*SELECT* 5"
1276          ->  Values Scan on "*VALUES*"
1277 (31 rows)
1278
1279 ALTER SYSTEM SET session_preload_libraries TO DEFAULT;
1280 SELECT pg_reload_conf();
1281  pg_reload_conf 
1282 ----------------
1283  t
1284 (1 row)
1285