OSDN Git Service

Improve error handling of Parallel hint
[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
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_relation_size to 0;
18 /*+Parallel(t1 10)*/
19 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
20 LOG:  pg_hint_plan:
21 used hint:
22 Parallel(t1 10 soft)
23 not used hint:
24 duplication hint:
25 error hint:
26
27           QUERY PLAN           
28 -------------------------------
29  Gather
30    Workers Planned: 2
31    ->  Parallel Seq Scan on t1
32 (3 rows)
33
34 /*+Parallel(t1 10 soft)*/
35 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
36 LOG:  pg_hint_plan:
37 used hint:
38 Parallel(t1 10 soft)
39 not used hint:
40 duplication hint:
41 error hint:
42
43           QUERY PLAN           
44 -------------------------------
45  Gather
46    Workers Planned: 2
47    ->  Parallel Seq Scan on t1
48 (3 rows)
49
50 SET parallel_setup_cost to DEFAULT;
51 SET parallel_tuple_cost to DEFAULT;
52 SET min_parallel_relation_size to DEFAULT;
53 /*+Parallel(t1 10 hard)*/
54 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
55 LOG:  pg_hint_plan:
56 used hint:
57 Parallel(t1 10 hard)
58 not used hint:
59 duplication hint:
60 error hint:
61
62           QUERY PLAN           
63 -------------------------------
64  Gather
65    Workers Planned: 10
66    ->  Parallel Seq Scan on t1
67 (3 rows)
68
69 -- Queries on inheritance tables
70 SET parallel_setup_cost to 0;
71 SET parallel_tuple_cost to 0;
72 SET min_parallel_relation_size to 0;
73 /*+Parallel(p1 10)*/
74 EXPLAIN (COSTS false) SELECT * FROM p1;
75 LOG:  pg_hint_plan:
76 used hint:
77 Parallel(p1 10 soft)
78 not used hint:
79 duplication hint:
80 error hint:
81
82                 QUERY PLAN                 
83 -------------------------------------------
84  Gather
85    Workers Planned: 1
86    ->  Append
87          ->  Parallel Seq Scan on p1
88          ->  Parallel Seq Scan on p1_c1
89          ->  Parallel Seq Scan on p1_c2
90          ->  Parallel Seq Scan on p1_c3
91          ->  Parallel Seq Scan on p1_c4
92          ->  Parallel Seq Scan on p1_c1_c1
93          ->  Parallel Seq Scan on p1_c1_c2
94          ->  Parallel Seq Scan on p1_c3_c1
95          ->  Parallel Seq Scan on p1_c3_c2
96 (12 rows)
97
98 SET parallel_setup_cost to DEFAULT;
99 SET parallel_tuple_cost to DEFAULT;
100 SET min_parallel_relation_size to DEFAULT;
101 /*+Parallel(p1 10 hard)*/
102 EXPLAIN (COSTS false) SELECT * FROM p1;
103 LOG:  pg_hint_plan:
104 used hint:
105 Parallel(p1 10 hard)
106 not used hint:
107 duplication hint:
108 error hint:
109
110                 QUERY PLAN                 
111 -------------------------------------------
112  Gather
113    Workers Planned: 10
114    ->  Append
115          ->  Parallel Seq Scan on p1
116          ->  Parallel Seq Scan on p1_c1
117          ->  Parallel Seq Scan on p1_c2
118          ->  Parallel Seq Scan on p1_c3
119          ->  Parallel Seq Scan on p1_c4
120          ->  Parallel Seq Scan on p1_c1_c1
121          ->  Parallel Seq Scan on p1_c1_c2
122          ->  Parallel Seq Scan on p1_c3_c1
123          ->  Parallel Seq Scan on p1_c3_c2
124 (12 rows)
125
126 -- hinting on children don't work but enables parallel
127 /*+Parallel(p1_c1 10 hard)*/
128 EXPLAIN (COSTS false) SELECT * FROM p1;
129 LOG:  pg_hint_plan:
130 used hint:
131 not used hint:
132 Parallel(p1_c1 10 hard)
133 duplication hint:
134 error hint:
135
136                 QUERY PLAN                 
137 -------------------------------------------
138  Gather
139    Workers Planned: 1
140    ->  Append
141          ->  Parallel Seq Scan on p1
142          ->  Parallel Seq Scan on p1_c1
143          ->  Parallel Seq Scan on p1_c2
144          ->  Parallel Seq Scan on p1_c3
145          ->  Parallel Seq Scan on p1_c4
146          ->  Parallel Seq Scan on p1_c1_c1
147          ->  Parallel Seq Scan on p1_c1_c2
148          ->  Parallel Seq Scan on p1_c3_c1
149          ->  Parallel Seq Scan on p1_c3_c2
150 (12 rows)
151
152 -- Joins
153 EXPLAIN (COSTS false) SELECT * FROM p1_c1 join p2_c1 on p1_c1.id = p2_c1.id;
154                QUERY PLAN               
155 ----------------------------------------
156  Hash Join
157    Hash Cond: (p1_c1.id = p2_c1.id)
158    ->  Append
159          ->  Seq Scan on p1_c1
160          ->  Seq Scan on p1_c1_c1
161          ->  Seq Scan on p1_c1_c2
162    ->  Hash
163          ->  Append
164                ->  Seq Scan on p2_c1
165                ->  Seq Scan on p2_c1_c1
166                ->  Seq Scan on p2_c1_c2
167 (11 rows)
168
169 /*+Parallel(p1_c1 10 hard)*/
170 EXPLAIN (COSTS false) SELECT * FROM p1_c1 join p2_c1 on p1_c1.id = p2_c1.id;
171 LOG:  pg_hint_plan:
172 used hint:
173 Parallel(p1_c1 10 hard)
174 not used hint:
175 duplication hint:
176 error hint:
177
178                       QUERY PLAN                       
179 -------------------------------------------------------
180  Hash Join
181    Hash Cond: (p1_c1.id = p2_c1.id)
182    ->  Gather
183          Workers Planned: 10
184          ->  Append
185                ->  Parallel Seq Scan on p1_c1
186                ->  Parallel Seq Scan on p1_c1_c1
187                ->  Parallel Seq Scan on p1_c1_c2
188    ->  Hash
189          ->  Gather
190                Workers Planned: 1
191                ->  Append
192                      ->  Parallel Seq Scan on p2_c1
193                      ->  Parallel Seq Scan on p2_c1_c1
194                      ->  Parallel Seq Scan on p2_c1_c2
195 (15 rows)
196
197 /*+Parallel(p2_c1 10 hard)*/
198 EXPLAIN (COSTS false) SELECT * FROM p1_c1 join p2_c1 on p1_c1.id = p2_c1.id;
199 LOG:  pg_hint_plan:
200 used hint:
201 Parallel(p2_c1 10 hard)
202 not used hint:
203 duplication hint:
204 error hint:
205
206                       QUERY PLAN                       
207 -------------------------------------------------------
208  Hash Join
209    Hash Cond: (p1_c1.id = p2_c1.id)
210    ->  Gather
211          Workers Planned: 1
212          ->  Append
213                ->  Parallel Seq Scan on p1_c1
214                ->  Parallel Seq Scan on p1_c1_c1
215                ->  Parallel Seq Scan on p1_c1_c2
216    ->  Hash
217          ->  Gather
218                Workers Planned: 10
219                ->  Append
220                      ->  Parallel Seq Scan on p2_c1
221                      ->  Parallel Seq Scan on p2_c1_c1
222                      ->  Parallel Seq Scan on p2_c1_c2
223 (15 rows)
224
225 /*+Parallel(p1_c1 10 hard) Parallel(p2_c1 10 hard)*/
226 EXPLAIN (COSTS false) SELECT * FROM p1_c1 join p2_c1 on p1_c1.id = p2_c1.id;
227 LOG:  pg_hint_plan:
228 used hint:
229 Parallel(p1_c1 10 hard)
230 Parallel(p2_c1 10 hard)
231 not used hint:
232 duplication hint:
233 error hint:
234
235                       QUERY PLAN                       
236 -------------------------------------------------------
237  Hash Join
238    Hash Cond: (p1_c1.id = p2_c1.id)
239    ->  Gather
240          Workers Planned: 10
241          ->  Append
242                ->  Parallel Seq Scan on p1_c1
243                ->  Parallel Seq Scan on p1_c1_c1
244                ->  Parallel Seq Scan on p1_c1_c2
245    ->  Hash
246          ->  Gather
247                Workers Planned: 10
248                ->  Append
249                      ->  Parallel Seq Scan on p2_c1
250                      ->  Parallel Seq Scan on p2_c1_c1
251                      ->  Parallel Seq Scan on p2_c1_c2
252 (15 rows)
253
254 -- Joins on inheritance tables
255 SET parallel_setup_cost to 0;
256 SET parallel_tuple_cost to 0;
257 SET min_parallel_relation_size to 0;
258 /*+Parallel(p1 10)*/
259 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
260 LOG:  pg_hint_plan:
261 used hint:
262 Parallel(p1 10 soft)
263 not used hint:
264 duplication hint:
265 error hint:
266
267                       QUERY PLAN                       
268 -------------------------------------------------------
269  Hash Join
270    Hash Cond: (p1.id = p2.id)
271    ->  Gather
272          Workers Planned: 1
273          ->  Append
274                ->  Parallel Seq Scan on p1
275                ->  Parallel Seq Scan on p1_c1
276                ->  Parallel Seq Scan on p1_c2
277                ->  Parallel Seq Scan on p1_c3
278                ->  Parallel Seq Scan on p1_c4
279                ->  Parallel Seq Scan on p1_c1_c1
280                ->  Parallel Seq Scan on p1_c1_c2
281                ->  Parallel Seq Scan on p1_c3_c1
282                ->  Parallel Seq Scan on p1_c3_c2
283    ->  Hash
284          ->  Gather
285                Workers Planned: 1
286                ->  Append
287                      ->  Parallel Seq Scan on p2
288                      ->  Parallel Seq Scan on p2_c1
289                      ->  Parallel Seq Scan on p2_c2
290                      ->  Parallel Seq Scan on p2_c3
291                      ->  Parallel Seq Scan on p2_c4
292                      ->  Parallel Seq Scan on p2_c1_c1
293                      ->  Parallel Seq Scan on p2_c1_c2
294                      ->  Parallel Seq Scan on p2_c3_c1
295                      ->  Parallel Seq Scan on p2_c3_c2
296 (27 rows)
297
298 SET parallel_setup_cost to DEFAULT;
299 SET parallel_tuple_cost to DEFAULT;
300 SET min_parallel_relation_size to DEFAULT;
301 /*+Parallel(p2 10 hard)*/
302 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
303 LOG:  pg_hint_plan:
304 used hint:
305 Parallel(p2 10 hard)
306 not used hint:
307 duplication hint:
308 error hint:
309
310                       QUERY PLAN                       
311 -------------------------------------------------------
312  Hash Join
313    Hash Cond: (p1.id = p2.id)
314    ->  Gather
315          Workers Planned: 1
316          ->  Append
317                ->  Parallel Seq Scan on p1
318                ->  Parallel Seq Scan on p1_c1
319                ->  Parallel Seq Scan on p1_c2
320                ->  Parallel Seq Scan on p1_c3
321                ->  Parallel Seq Scan on p1_c4
322                ->  Parallel Seq Scan on p1_c1_c1
323                ->  Parallel Seq Scan on p1_c1_c2
324                ->  Parallel Seq Scan on p1_c3_c1
325                ->  Parallel Seq Scan on p1_c3_c2
326    ->  Hash
327          ->  Gather
328                Workers Planned: 10
329                ->  Append
330                      ->  Parallel Seq Scan on p2
331                      ->  Parallel Seq Scan on p2_c1
332                      ->  Parallel Seq Scan on p2_c2
333                      ->  Parallel Seq Scan on p2_c3
334                      ->  Parallel Seq Scan on p2_c4
335                      ->  Parallel Seq Scan on p2_c1_c1
336                      ->  Parallel Seq Scan on p2_c1_c2
337                      ->  Parallel Seq Scan on p2_c3_c1
338                      ->  Parallel Seq Scan on p2_c3_c2
339 (27 rows)
340
341 /*+Parallel(p2 10 hard) Parallel(p1 5 hard) */
342 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
343 LOG:  pg_hint_plan:
344 used hint:
345 Parallel(p1 5 hard)
346 Parallel(p2 10 hard)
347 not used hint:
348 duplication hint:
349 error hint:
350
351                       QUERY PLAN                       
352 -------------------------------------------------------
353  Hash Join
354    Hash Cond: (p1.id = p2.id)
355    ->  Gather
356          Workers Planned: 5
357          ->  Append
358                ->  Parallel Seq Scan on p1
359                ->  Parallel Seq Scan on p1_c1
360                ->  Parallel Seq Scan on p1_c2
361                ->  Parallel Seq Scan on p1_c3
362                ->  Parallel Seq Scan on p1_c4
363                ->  Parallel Seq Scan on p1_c1_c1
364                ->  Parallel Seq Scan on p1_c1_c2
365                ->  Parallel Seq Scan on p1_c3_c1
366                ->  Parallel Seq Scan on p1_c3_c2
367    ->  Hash
368          ->  Gather
369                Workers Planned: 10
370                ->  Append
371                      ->  Parallel Seq Scan on p2
372                      ->  Parallel Seq Scan on p2_c1
373                      ->  Parallel Seq Scan on p2_c2
374                      ->  Parallel Seq Scan on p2_c3
375                      ->  Parallel Seq Scan on p2_c4
376                      ->  Parallel Seq Scan on p2_c1_c1
377                      ->  Parallel Seq Scan on p2_c1_c2
378                      ->  Parallel Seq Scan on p2_c3_c1
379                      ->  Parallel Seq Scan on p2_c3_c2
380 (27 rows)
381
382 -- Mixture with a scan hint
383 -- p1 can be parallel
384 /*+Parallel(p1 10 hard) IndexScan(p2) */
385 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
386 LOG:  pg_hint_plan:
387 used hint:
388 IndexScan(p2)
389 Parallel(p1 10 hard)
390 not used hint:
391 duplication hint:
392 error hint:
393
394                       QUERY PLAN                       
395 -------------------------------------------------------
396  Hash Join
397    Hash Cond: (p1.id = p2.id)
398    ->  Gather
399          Workers Planned: 10
400          ->  Append
401                ->  Parallel Seq Scan on p1
402                ->  Parallel Seq Scan on p1_c1
403                ->  Parallel Seq Scan on p1_c2
404                ->  Parallel Seq Scan on p1_c3
405                ->  Parallel Seq Scan on p1_c4
406                ->  Parallel Seq Scan on p1_c1_c1
407                ->  Parallel Seq Scan on p1_c1_c2
408                ->  Parallel Seq Scan on p1_c3_c1
409                ->  Parallel Seq Scan on p1_c3_c2
410    ->  Hash
411          ->  Gather
412                Workers Planned: 1
413                ->  Append
414                      ->  Parallel Seq Scan on p2
415                      ->  Parallel Seq Scan on p2_c1
416                      ->  Parallel Seq Scan on p2_c2
417                      ->  Parallel Seq Scan on p2_c3
418                      ->  Parallel Seq Scan on p2_c4
419                      ->  Parallel Seq Scan on p2_c1_c1
420                      ->  Parallel Seq Scan on p2_c1_c2
421                      ->  Parallel Seq Scan on p2_c3_c1
422                      ->  Parallel Seq Scan on p2_c3_c2
423 (27 rows)
424
425 -- seqscan doesn't harm parallelism
426 /*+Parallel(p1 10 hard) SeqScan(p1) */
427 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
428 LOG:  pg_hint_plan:
429 used hint:
430 SeqScan(p1)
431 Parallel(p1 10 hard)
432 not used hint:
433 duplication hint:
434 error hint:
435
436                       QUERY PLAN                       
437 -------------------------------------------------------
438  Hash Join
439    Hash Cond: (p1.id = p2.id)
440    ->  Gather
441          Workers Planned: 10
442          ->  Append
443                ->  Parallel Seq Scan on p1
444                ->  Parallel Seq Scan on p1_c1
445                ->  Parallel Seq Scan on p1_c2
446                ->  Parallel Seq Scan on p1_c3
447                ->  Parallel Seq Scan on p1_c4
448                ->  Parallel Seq Scan on p1_c1_c1
449                ->  Parallel Seq Scan on p1_c1_c2
450                ->  Parallel Seq Scan on p1_c3_c1
451                ->  Parallel Seq Scan on p1_c3_c2
452    ->  Hash
453          ->  Gather
454                Workers Planned: 1
455                ->  Append
456                      ->  Parallel Seq Scan on p2
457                      ->  Parallel Seq Scan on p2_c1
458                      ->  Parallel Seq Scan on p2_c2
459                      ->  Parallel Seq Scan on p2_c3
460                      ->  Parallel Seq Scan on p2_c4
461                      ->  Parallel Seq Scan on p2_c1_c1
462                      ->  Parallel Seq Scan on p2_c1_c2
463                      ->  Parallel Seq Scan on p2_c3_c1
464                      ->  Parallel Seq Scan on p2_c3_c2
465 (27 rows)
466
467 -- parallelism is not available for the case
468 /*+Parallel(p1 10 hard) IndexScan(p1) */
469 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
470 LOG:  pg_hint_plan:
471 used hint:
472 IndexScan(p1)
473 Parallel(p1 10 hard)
474 not used hint:
475 duplication hint:
476 error hint:
477
478                       QUERY PLAN                       
479 -------------------------------------------------------
480  Hash Join
481    Hash Cond: (p1.id = p2.id)
482    ->  Gather
483          Workers Planned: 10
484          ->  Append
485                ->  Parallel Seq Scan on p1
486                ->  Parallel Seq Scan on p1_c1
487                ->  Parallel Seq Scan on p1_c2
488                ->  Parallel Seq Scan on p1_c3
489                ->  Parallel Seq Scan on p1_c4
490                ->  Parallel Seq Scan on p1_c1_c1
491                ->  Parallel Seq Scan on p1_c1_c2
492                ->  Parallel Seq Scan on p1_c3_c1
493                ->  Parallel Seq Scan on p1_c3_c2
494    ->  Hash
495          ->  Gather
496                Workers Planned: 1
497                ->  Append
498                      ->  Parallel Seq Scan on p2
499                      ->  Parallel Seq Scan on p2_c1
500                      ->  Parallel Seq Scan on p2_c2
501                      ->  Parallel Seq Scan on p2_c3
502                      ->  Parallel Seq Scan on p2_c4
503                      ->  Parallel Seq Scan on p2_c1_c1
504                      ->  Parallel Seq Scan on p2_c1_c2
505                      ->  Parallel Seq Scan on p2_c3_c1
506                      ->  Parallel Seq Scan on p2_c3_c2
507 (27 rows)
508
509 -- Parallel on UNION
510 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
511          QUERY PLAN         
512 ----------------------------
513  Append
514    ->  Seq Scan on p1
515    ->  Seq Scan on p1_c1
516    ->  Seq Scan on p1_c2
517    ->  Seq Scan on p1_c3
518    ->  Seq Scan on p1_c4
519    ->  Seq Scan on p1_c1_c1
520    ->  Seq Scan on p1_c1_c2
521    ->  Seq Scan on p1_c3_c1
522    ->  Seq Scan on p1_c3_c2
523    ->  Seq Scan on p2
524    ->  Seq Scan on p2_c1
525    ->  Seq Scan on p2_c2
526    ->  Seq Scan on p2_c3
527    ->  Seq Scan on p2_c4
528    ->  Seq Scan on p2_c1_c1
529    ->  Seq Scan on p2_c1_c2
530    ->  Seq Scan on p2_c3_c1
531    ->  Seq Scan on p2_c3_c2
532 (19 rows)
533
534 -- some of the scans are not parallel, so this cannot be parallel
535 SET parallel_setup_cost to 0;
536 SET parallel_tuple_cost to 0;
537 SET min_parallel_relation_size to 0;
538 SET max_parallel_workers_per_gather to 0;
539 /*+Parallel(p1 10) */
540 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
541 LOG:  pg_hint_plan:
542 used hint:
543 Parallel(p1 10 soft)
544 not used hint:
545 duplication hint:
546 error hint:
547
548                 QUERY PLAN                 
549 -------------------------------------------
550  Gather
551    Workers Planned: 1
552    ->  Append
553          ->  Parallel Seq Scan on p1
554          ->  Parallel Seq Scan on p1_c1
555          ->  Parallel Seq Scan on p1_c2
556          ->  Parallel Seq Scan on p1_c3
557          ->  Parallel Seq Scan on p1_c4
558          ->  Parallel Seq Scan on p1_c1_c1
559          ->  Parallel Seq Scan on p1_c1_c2
560          ->  Parallel Seq Scan on p1_c3_c1
561          ->  Parallel Seq Scan on p1_c3_c2
562          ->  Parallel Seq Scan on p2
563          ->  Parallel Seq Scan on p2_c1
564          ->  Parallel Seq Scan on p2_c2
565          ->  Parallel Seq Scan on p2_c3
566          ->  Parallel Seq Scan on p2_c4
567          ->  Parallel Seq Scan on p2_c1_c1
568          ->  Parallel Seq Scan on p2_c1_c2
569          ->  Parallel Seq Scan on p2_c3_c1
570          ->  Parallel Seq Scan on p2_c3_c2
571 (21 rows)
572
573 -- all children are parallel, so this can be parallel
574 /*+Parallel(p1 10) Parallel(p2 10) */
575 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
576 LOG:  pg_hint_plan:
577 used hint:
578 Parallel(p1 10 soft)
579 Parallel(p2 10 soft)
580 not used hint:
581 duplication hint:
582 error hint:
583
584                 QUERY PLAN                 
585 -------------------------------------------
586  Gather
587    Workers Planned: 1
588    ->  Append
589          ->  Parallel Seq Scan on p1
590          ->  Parallel Seq Scan on p1_c1
591          ->  Parallel Seq Scan on p1_c2
592          ->  Parallel Seq Scan on p1_c3
593          ->  Parallel Seq Scan on p1_c4
594          ->  Parallel Seq Scan on p1_c1_c1
595          ->  Parallel Seq Scan on p1_c1_c2
596          ->  Parallel Seq Scan on p1_c3_c1
597          ->  Parallel Seq Scan on p1_c3_c2
598          ->  Parallel Seq Scan on p2
599          ->  Parallel Seq Scan on p2_c1
600          ->  Parallel Seq Scan on p2_c2
601          ->  Parallel Seq Scan on p2_c3
602          ->  Parallel Seq Scan on p2_c4
603          ->  Parallel Seq Scan on p2_c1_c1
604          ->  Parallel Seq Scan on p2_c1_c2
605          ->  Parallel Seq Scan on p2_c3_c1
606          ->  Parallel Seq Scan on p2_c3_c2
607 (21 rows)
608
609 SET parallel_setup_cost to DEFAULT;
610 SET parallel_tuple_cost to DEFAULT;
611 SET min_parallel_relation_size to DEFAULT;
612 SET max_parallel_workers_per_gather to DEFAULT;
613 /*+Parallel(p1 10 hard)Parallel(p2 10 hard) */
614 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
615 LOG:  pg_hint_plan:
616 used hint:
617 Parallel(p1 10 hard)
618 Parallel(p2 10 hard)
619 not used hint:
620 duplication hint:
621 error hint:
622
623                 QUERY PLAN                 
624 -------------------------------------------
625  Gather
626    Workers Planned: 10
627    ->  Append
628          ->  Parallel Seq Scan on p1
629          ->  Parallel Seq Scan on p1_c1
630          ->  Parallel Seq Scan on p1_c2
631          ->  Parallel Seq Scan on p1_c3
632          ->  Parallel Seq Scan on p1_c4
633          ->  Parallel Seq Scan on p1_c1_c1
634          ->  Parallel Seq Scan on p1_c1_c2
635          ->  Parallel Seq Scan on p1_c3_c1
636          ->  Parallel Seq Scan on p1_c3_c2
637          ->  Parallel Seq Scan on p2
638          ->  Parallel Seq Scan on p2_c1
639          ->  Parallel Seq Scan on p2_c2
640          ->  Parallel Seq Scan on p2_c3
641          ->  Parallel Seq Scan on p2_c4
642          ->  Parallel Seq Scan on p2_c1_c1
643          ->  Parallel Seq Scan on p2_c1_c2
644          ->  Parallel Seq Scan on p2_c3_c1
645          ->  Parallel Seq Scan on p2_c3_c2
646 (21 rows)
647
648 -- num of workers of non-hinted relations should be default value
649 SET parallel_setup_cost to 0;
650 SET parallel_tuple_cost to 0;
651 SET min_parallel_relation_size to 0;
652 SET max_parallel_workers_per_gather to 3;
653 /*+Parallel(p1 10 hard) */
654 EXPLAIN (COSTS false) SELECT * FROM p1 join t1 on p1.id = t1.id;
655 LOG:  pg_hint_plan:
656 used hint:
657 Parallel(p1 10 hard)
658 not used hint:
659 duplication hint:
660 error hint:
661
662                       QUERY PLAN                       
663 -------------------------------------------------------
664  Hash Join
665    Hash Cond: (t1.id = p1.id)
666    ->  Gather
667          Workers Planned: 3
668          ->  Parallel Seq Scan on t1
669    ->  Hash
670          ->  Gather
671                Workers Planned: 10
672                ->  Append
673                      ->  Parallel Seq Scan on p1
674                      ->  Parallel Seq Scan on p1_c1
675                      ->  Parallel Seq Scan on p1_c2
676                      ->  Parallel Seq Scan on p1_c3
677                      ->  Parallel Seq Scan on p1_c4
678                      ->  Parallel Seq Scan on p1_c1_c1
679                      ->  Parallel Seq Scan on p1_c1_c2
680                      ->  Parallel Seq Scan on p1_c3_c1
681                      ->  Parallel Seq Scan on p1_c3_c2
682 (18 rows)
683
684 -- Negative hint
685 SET parallel_setup_cost to 0;
686 SET parallel_tuple_cost to 0;
687 SET min_parallel_relation_size to 0;
688 SET max_parallel_workers_per_gather to 5;
689 EXPLAIN (COSTS false) SELECT * FROM p1;
690                 QUERY PLAN                 
691 -------------------------------------------
692  Gather
693    Workers Planned: 1
694    ->  Append
695          ->  Parallel Seq Scan on p1
696          ->  Parallel Seq Scan on p1_c1
697          ->  Parallel Seq Scan on p1_c2
698          ->  Parallel Seq Scan on p1_c3
699          ->  Parallel Seq Scan on p1_c4
700          ->  Parallel Seq Scan on p1_c1_c1
701          ->  Parallel Seq Scan on p1_c1_c2
702          ->  Parallel Seq Scan on p1_c3_c1
703          ->  Parallel Seq Scan on p1_c3_c2
704 (12 rows)
705
706 /*+Parallel(p1 0 hard)*/
707 EXPLAIN (COSTS false) SELECT * FROM p1;
708 LOG:  pg_hint_plan:
709 used hint:
710 Parallel(p1 0 hard)
711 not used hint:
712 duplication hint:
713 error hint:
714
715          QUERY PLAN         
716 ----------------------------
717  Append
718    ->  Seq Scan on p1
719    ->  Seq Scan on p1_c1
720    ->  Seq Scan on p1_c2
721    ->  Seq Scan on p1_c3
722    ->  Seq Scan on p1_c4
723    ->  Seq Scan on p1_c1_c1
724    ->  Seq Scan on p1_c1_c2
725    ->  Seq Scan on p1_c3_c1
726    ->  Seq Scan on p1_c3_c2
727 (10 rows)
728
729 -- Errors
730 /*+Parallel(p1 100x hard)Parallel(p1 -1000 hard)Parallel(p1 1000000 hard)
731    Parallel(p1 10 hoge)Parallel(p1)Parallel(p1 100 soft x)*/
732 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
733 INFO:  pg_hint_plan: hint syntax error at or near "100x"
734 DETAIL:  number of workers must be a number: Parallel
735 INFO:  pg_hint_plan: hint syntax error at or near "-1000"
736 DETAIL:  number of workers must be positive: Parallel
737 INFO:  pg_hint_plan: hint syntax error at or near "1000000"
738 DETAIL:  number of workers = 1000000 is larger than max_worker_processes(100): Parallel
739 INFO:  pg_hint_plan: hint syntax error at or near "hoge"
740 DETAIL:  enforcement must be soft or hard: Parallel
741 INFO:  pg_hint_plan: hint syntax error at or near ")"
742 DETAIL:  wrong number of arguments (1): Parallel
743 INFO:  pg_hint_plan: hint syntax error at or near ")"
744 DETAIL:  wrong number of arguments (4): Parallel
745 LOG:  pg_hint_plan:
746 used hint:
747 not used hint:
748 duplication hint:
749 error hint:
750 Parallel(p1 100x hard)
751 Parallel(p1 -1000 hard)
752 Parallel(p1 1000000 hard)
753 Parallel(p1 10 hard)
754 Parallel()
755 Parallel()
756
757                 QUERY PLAN                 
758 -------------------------------------------
759  Gather
760    Workers Planned: 1
761    ->  Append
762          ->  Parallel Seq Scan on p1
763          ->  Parallel Seq Scan on p1_c1
764          ->  Parallel Seq Scan on p1_c2
765          ->  Parallel Seq Scan on p1_c3
766          ->  Parallel Seq Scan on p1_c4
767          ->  Parallel Seq Scan on p1_c1_c1
768          ->  Parallel Seq Scan on p1_c1_c2
769          ->  Parallel Seq Scan on p1_c3_c1
770          ->  Parallel Seq Scan on p1_c3_c2
771          ->  Parallel Seq Scan on p2
772          ->  Parallel Seq Scan on p2_c1
773          ->  Parallel Seq Scan on p2_c2
774          ->  Parallel Seq Scan on p2_c3
775          ->  Parallel Seq Scan on p2_c4
776          ->  Parallel Seq Scan on p2_c1_c1
777          ->  Parallel Seq Scan on p2_c1_c2
778          ->  Parallel Seq Scan on p2_c3_c1
779          ->  Parallel Seq Scan on p2_c3_c2
780 (21 rows)
781
782 ALTER SYSTEM SET session_preload_libraries TO DEFAULT;
783 SELECT pg_reload_conf();
784  pg_reload_conf 
785 ----------------
786  t
787 (1 row)
788