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;
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;
21 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
30 -------------------------------
33 -> Parallel Seq Scan on t1
36 /*+Parallel(t1 8 soft)*/
37 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
46 -------------------------------
49 -> Parallel Seq Scan on t1
52 /*+Parallel(t1 8 hard)*/
53 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
62 -------------------------------
65 -> Parallel Seq Scan on t1
68 -- Queries on inheritance tables
69 SET parallel_setup_cost to 0;
70 SET parallel_tuple_cost to 0;
71 SET min_parallel_table_scan_size to 0;
72 SET min_parallel_index_scan_size to 0;
74 EXPLAIN (COSTS false) SELECT * FROM p1;
83 -------------------------------------------
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
98 SET parallel_setup_cost to DEFAULT;
99 SET parallel_tuple_cost to DEFAULT;
100 SET min_parallel_table_scan_size to DEFAULT;
101 SET min_parallel_index_scan_size to DEFAULT;
102 /*+Parallel(p1 8 hard)*/
103 EXPLAIN (COSTS false) SELECT * FROM p1;
112 -------------------------------------------
116 -> Parallel Seq Scan on p1
117 -> Parallel Seq Scan on p1_c1
118 -> Parallel Seq Scan on p1_c2
119 -> Parallel Seq Scan on p1_c3
120 -> Parallel Seq Scan on p1_c4
121 -> Parallel Seq Scan on p1_c1_c1
122 -> Parallel Seq Scan on p1_c1_c2
123 -> Parallel Seq Scan on p1_c3_c1
124 -> Parallel Seq Scan on p1_c3_c2
127 -- hinting on children makes the whole inheritance parallel
128 /*+Parallel(p1_c1 8 hard)*/
129 EXPLAIN (COSTS false) SELECT * FROM p1;
132 Parallel(p1_c1 8 hard)
138 -------------------------------------------
142 -> Parallel Seq Scan on p1
143 -> Parallel Seq Scan on p1_c1
144 -> Parallel Seq Scan on p1_c2
145 -> Parallel Seq Scan on p1_c3
146 -> Parallel Seq Scan on p1_c4
147 -> Parallel Seq Scan on p1_c1_c1
148 -> Parallel Seq Scan on p1_c1_c2
149 -> Parallel Seq Scan on p1_c3_c1
150 -> Parallel Seq Scan on p1_c3_c2
154 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
156 ------------------------------------------
158 Hash Cond: (p1_c1_c1.id = p2_c1_c1.id)
159 -> Seq Scan on p1_c1_c1
161 -> Seq Scan on p2_c1_c1
164 /*+Parallel(p1_c1_c1 8 hard)*/
165 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
168 Parallel(p1_c1_c1 8 hard)
174 -------------------------------------------------
176 Hash Cond: (p2_c1_c1.id = p1_c1_c1.id)
177 -> Seq Scan on p2_c1_c1
181 -> Parallel Seq Scan on p1_c1_c1
184 SET parallel_setup_cost to 0;
185 SET parallel_tuple_cost to 0;
186 SET min_parallel_table_scan_size to 0;
187 SET min_parallel_index_scan_size to 0;
188 /*+Parallel(p1_c1_c1 8 soft) Parallel(p2_c1_c1 0)*/
189 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
192 Parallel(p1_c1_c1 8 soft)
193 Parallel(p2_c1_c1 0 soft)
199 ------------------------------------------------
203 Hash Cond: (p1_c1_c1.id = p2_c1_c1.id)
204 -> Parallel Seq Scan on p1_c1_c1
206 -> Seq Scan on p2_c1_c1
209 /*+Parallel(p1_c1_c1 8 hard) Parallel(p2_c1_c1 0)*/
210 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
213 Parallel(p1_c1_c1 8 hard)
214 Parallel(p2_c1_c1 0 soft)
220 ------------------------------------------------
224 Hash Cond: (p1_c1_c1.id = p2_c1_c1.id)
225 -> Parallel Seq Scan on p1_c1_c1
227 -> Seq Scan on p2_c1_c1
230 /*+Parallel(p1_c1_c1 8 hard) Parallel(p2_c1_c1 8 hard)*/
231 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
234 Parallel(p1_c1_c1 8 hard)
235 Parallel(p2_c1_c1 8 hard)
241 -------------------------------------------------
243 Hash Cond: (p1_c1_c1.id = p2_c1_c1.id)
246 -> Parallel Seq Scan on p1_c1_c1
250 -> Parallel Seq Scan on p2_c1_c1
253 -- Joins on inheritance tables
254 SET parallel_setup_cost to 0;
255 SET parallel_tuple_cost to 0;
256 SET min_parallel_table_scan_size to 0;
257 SET min_parallel_index_scan_size to 0;
259 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
268 -------------------------------------------------
272 Hash Cond: (p1.id = p2.id)
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
290 -> Seq Scan on p2_c1_c1
291 -> Seq Scan on p2_c1_c2
292 -> Seq Scan on p2_c3_c1
293 -> Seq Scan on p2_c3_c2
296 /*+Parallel(p1 8)Parallel(p2 0)*/
297 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
307 -------------------------------------------------
311 Hash Cond: (p1.id = p2.id)
313 -> Parallel Seq Scan on p1
314 -> Parallel Seq Scan on p1_c1
315 -> Parallel Seq Scan on p1_c2
316 -> Parallel Seq Scan on p1_c3
317 -> Parallel Seq Scan on p1_c4
318 -> Parallel Seq Scan on p1_c1_c1
319 -> Parallel Seq Scan on p1_c1_c2
320 -> Parallel Seq Scan on p1_c3_c1
321 -> Parallel Seq Scan on p1_c3_c2
329 -> Seq Scan on p2_c1_c1
330 -> Seq Scan on p2_c1_c2
331 -> Seq Scan on p2_c3_c1
332 -> Seq Scan on p2_c3_c2
335 SET parallel_setup_cost to DEFAULT;
336 SET parallel_tuple_cost to DEFAULT;
337 SET min_parallel_table_scan_size to DEFAULT;
338 SET min_parallel_index_scan_size to DEFAULT;
339 /*+Parallel(p2 8 soft)*/
340 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
349 -------------------------------------------------
353 Hash Cond: (p2.id = p1.id)
355 -> Parallel Seq Scan on p2
356 -> Parallel Seq Scan on p2_c1
357 -> Parallel Seq Scan on p2_c2
358 -> Parallel Seq Scan on p2_c3
359 -> Parallel Seq Scan on p2_c4
360 -> Parallel Seq Scan on p2_c1_c1
361 -> Parallel Seq Scan on p2_c1_c2
362 -> Parallel Seq Scan on p2_c3_c1
363 -> Parallel Seq Scan on p2_c3_c2
371 -> Seq Scan on p1_c1_c1
372 -> Seq Scan on p1_c1_c2
373 -> Seq Scan on p1_c3_c1
374 -> Seq Scan on p1_c3_c2
377 /*+Parallel(p2 8 hard)*/
378 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
387 -------------------------------------------------
391 Hash Cond: (p2.id = p1.id)
393 -> Parallel Seq Scan on p2
394 -> Parallel Seq Scan on p2_c1
395 -> Parallel Seq Scan on p2_c2
396 -> Parallel Seq Scan on p2_c3
397 -> Parallel Seq Scan on p2_c4
398 -> Parallel Seq Scan on p2_c1_c1
399 -> Parallel Seq Scan on p2_c1_c2
400 -> Parallel Seq Scan on p2_c3_c1
401 -> Parallel Seq Scan on p2_c3_c2
409 -> Seq Scan on p1_c1_c1
410 -> Seq Scan on p1_c1_c2
411 -> Seq Scan on p1_c3_c1
412 -> Seq Scan on p1_c3_c2
415 /*+Parallel(p2 8 hard) Parallel(p1 5 hard) */
416 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
426 -------------------------------------------------------
428 Hash Cond: (p1.id = p2.id)
432 -> Parallel Seq Scan on p1
433 -> Parallel Seq Scan on p1_c1
434 -> Parallel Seq Scan on p1_c2
435 -> Parallel Seq Scan on p1_c3
436 -> Parallel Seq Scan on p1_c4
437 -> Parallel Seq Scan on p1_c1_c1
438 -> Parallel Seq Scan on p1_c1_c2
439 -> Parallel Seq Scan on p1_c3_c1
440 -> Parallel Seq Scan on p1_c3_c2
445 -> Parallel Seq Scan on p2
446 -> Parallel Seq Scan on p2_c1
447 -> Parallel Seq Scan on p2_c2
448 -> Parallel Seq Scan on p2_c3
449 -> Parallel Seq Scan on p2_c4
450 -> Parallel Seq Scan on p2_c1_c1
451 -> Parallel Seq Scan on p2_c1_c2
452 -> Parallel Seq Scan on p2_c3_c1
453 -> Parallel Seq Scan on p2_c3_c2
456 -- Mixture with a scan hint
457 -- p1 can be parallel
458 /*+Parallel(p1 8 hard) IndexScan(p2) */
459 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
469 --------------------------------------------------------------
471 Hash Cond: (p2.id = p1.id)
473 -> Index Scan using p2_id2_val on p2
474 -> Index Scan using p2_c1_id2_val on p2_c1
475 -> Index Scan using p2_c2_id2_val on p2_c2
476 -> Index Scan using p2_c3_id_val_idx on p2_c3
477 -> Index Scan using p2_c4_id_val_idx on p2_c4
478 -> Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1
479 -> Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2
480 -> Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1
481 -> Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2
486 -> Parallel Seq Scan on p1
487 -> Parallel Seq Scan on p1_c1
488 -> Parallel Seq Scan on p1_c2
489 -> Parallel Seq Scan on p1_c3
490 -> Parallel Seq Scan on p1_c4
491 -> Parallel Seq Scan on p1_c1_c1
492 -> Parallel Seq Scan on p1_c1_c2
493 -> Parallel Seq Scan on p1_c3_c1
494 -> Parallel Seq Scan on p1_c3_c2
497 -- Parallel sequential scan
498 /*+Parallel(p1 8 hard) SeqScan(p1) */
499 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
509 -------------------------------------------------
513 Hash Cond: (p1.id = p2.id)
515 -> Parallel Seq Scan on p1
516 -> Parallel Seq Scan on p1_c1
517 -> Parallel Seq Scan on p1_c2
518 -> Parallel Seq Scan on p1_c3
519 -> Parallel Seq Scan on p1_c4
520 -> Parallel Seq Scan on p1_c1_c1
521 -> Parallel Seq Scan on p1_c1_c2
522 -> Parallel Seq Scan on p1_c3_c1
523 -> Parallel Seq Scan on p1_c3_c2
531 -> Seq Scan on p2_c1_c1
532 -> Seq Scan on p2_c1_c2
533 -> Seq Scan on p2_c3_c1
534 -> Seq Scan on p2_c3_c2
537 -- Parallel index scan
538 /*+Parallel(p1 8 hard) IndexScan(p1) */
539 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
549 -----------------------------------------------------------------------
553 Hash Cond: (p1.id = p2.id)
555 -> Parallel Index Scan using p1_pkey on p1
556 -> Parallel Index Scan using p1_c1_pkey on p1_c1
557 -> Parallel Index Scan using p1_c2_pkey on p1_c2
558 -> Parallel Index Scan using p1_c3_pkey on p1_c3
559 -> Parallel Index Scan using p1_c4_pkey on p1_c4
560 -> Parallel Index Scan using p1_c1_c1_pkey on p1_c1_c1
561 -> Parallel Index Scan using p1_c1_c2_pkey on p1_c1_c2
562 -> Parallel Index Scan using p1_c3_c1_pkey on p1_c3_c1
563 -> Parallel Index Scan using p1_c3_c2_pkey on p1_c3_c2
571 -> Seq Scan on p2_c1_c1
572 -> Seq Scan on p2_c1_c2
573 -> Seq Scan on p2_c3_c1
574 -> Seq Scan on p2_c3_c2
577 -- This hint doesn't turn on parallel, so the Parallel hint is ignored
578 set max_parallel_workers_per_gather TO 0;
579 /*+Parallel(p1 0 hard) IndexScan(p1) */
580 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
590 --------------------------------------------------------
592 Hash Cond: (p1.id = p2.id)
594 -> Index Scan using p1_pkey on p1
595 -> Index Scan using p1_c1_pkey on p1_c1
596 -> Index Scan using p1_c2_pkey on p1_c2
597 -> Index Scan using p1_c3_pkey on p1_c3
598 -> Index Scan using p1_c4_pkey on p1_c4
599 -> Index Scan using p1_c1_c1_pkey on p1_c1_c1
600 -> Index Scan using p1_c1_c2_pkey on p1_c1_c2
601 -> Index Scan using p1_c3_c1_pkey on p1_c3_c1
602 -> Index Scan using p1_c3_c2_pkey on p1_c3_c2
610 -> Seq Scan on p2_c1_c1
611 -> Seq Scan on p2_c1_c2
612 -> Seq Scan on p2_c3_c1
613 -> Seq Scan on p2_c3_c2
617 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
619 ----------------------------
626 -> Seq Scan on p1_c1_c1
627 -> Seq Scan on p1_c1_c2
628 -> Seq Scan on p1_c3_c1
629 -> Seq Scan on p1_c3_c2
635 -> Seq Scan on p2_c1_c1
636 -> Seq Scan on p2_c1_c2
637 -> Seq Scan on p2_c3_c1
638 -> Seq Scan on p2_c3_c2
641 -- parallel hinting on any relation enables parallel
642 SET parallel_setup_cost to 0;
643 SET parallel_tuple_cost to 0;
644 SET min_parallel_table_scan_size to 0;
645 SET min_parallel_index_scan_size to 0;
646 SET max_parallel_workers_per_gather to 0;
648 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
657 -------------------------------------------
661 -> Parallel Seq Scan on p1
662 -> Parallel Seq Scan on p1_c1
663 -> Parallel Seq Scan on p1_c2
664 -> Parallel Seq Scan on p1_c3
665 -> Parallel Seq Scan on p1_c4
666 -> Parallel Seq Scan on p1_c1_c1
667 -> Parallel Seq Scan on p1_c1_c2
668 -> Parallel Seq Scan on p1_c3_c1
669 -> Parallel Seq Scan on p1_c3_c2
670 -> Parallel Seq Scan on p2
671 -> Parallel Seq Scan on p2_c1
672 -> Parallel Seq Scan on p2_c2
673 -> Parallel Seq Scan on p2_c3
674 -> Parallel Seq Scan on p2_c4
675 -> Parallel Seq Scan on p2_c1_c1
676 -> Parallel Seq Scan on p2_c1_c2
677 -> Parallel Seq Scan on p2_c3_c1
678 -> Parallel Seq Scan on p2_c3_c2
681 -- set hint does the same thing
682 /*+Set(max_parallel_workers_per_gather 1)*/
683 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
686 Set(max_parallel_workers_per_gather 1)
692 -------------------------------------------
696 -> Parallel Seq Scan on p1
697 -> Parallel Seq Scan on p1_c1
698 -> Parallel Seq Scan on p1_c2
699 -> Parallel Seq Scan on p1_c3
700 -> Parallel Seq Scan on p1_c4
701 -> Parallel Seq Scan on p1_c1_c1
702 -> Parallel Seq Scan on p1_c1_c2
703 -> Parallel Seq Scan on p1_c3_c1
704 -> Parallel Seq Scan on p1_c3_c2
705 -> Parallel Seq Scan on p2
706 -> Parallel Seq Scan on p2_c1
707 -> Parallel Seq Scan on p2_c2
708 -> Parallel Seq Scan on p2_c3
709 -> Parallel Seq Scan on p2_c4
710 -> Parallel Seq Scan on p2_c1_c1
711 -> Parallel Seq Scan on p2_c1_c2
712 -> Parallel Seq Scan on p2_c3_c1
713 -> Parallel Seq Scan on p2_c3_c2
716 -- applies largest number of workers on merged parallel paths
717 SET parallel_setup_cost to DEFAULT;
718 SET parallel_tuple_cost to DEFAULT;
719 SET min_parallel_table_scan_size to DEFAULT;
720 SET min_parallel_index_scan_size to DEFAULT;
721 SET max_parallel_workers_per_gather to 8;
722 /*+Parallel(p1 5 hard)Parallel(p2 6 hard) */
723 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
733 -------------------------------------------
737 -> Parallel Seq Scan on p1
738 -> Parallel Seq Scan on p1_c1
739 -> Parallel Seq Scan on p1_c2
740 -> Parallel Seq Scan on p1_c3
741 -> Parallel Seq Scan on p1_c4
742 -> Parallel Seq Scan on p1_c1_c1
743 -> Parallel Seq Scan on p1_c1_c2
744 -> Parallel Seq Scan on p1_c3_c1
745 -> Parallel Seq Scan on p1_c3_c2
746 -> Parallel Seq Scan on p2
747 -> Parallel Seq Scan on p2_c1
748 -> Parallel Seq Scan on p2_c2
749 -> Parallel Seq Scan on p2_c3
750 -> Parallel Seq Scan on p2_c4
751 -> Parallel Seq Scan on p2_c1_c1
752 -> Parallel Seq Scan on p2_c1_c2
753 -> Parallel Seq Scan on p2_c3_c1
754 -> Parallel Seq Scan on p2_c3_c2
757 -- num of workers of non-hinted relations should be default value
758 SET parallel_setup_cost to 0;
759 SET parallel_tuple_cost to 0;
760 SET min_parallel_table_scan_size to 0;
761 SET min_parallel_index_scan_size to 0;
762 SET max_parallel_workers_per_gather to 3;
763 SET enable_indexscan to false;
764 /*+Parallel(p1 8 hard) */
765 EXPLAIN (COSTS false) SELECT * FROM p1 join t1 on p1.id = t1.id;
774 -------------------------------------------------------
776 Hash Cond: (t1.id = p1.id)
779 -> Parallel Seq Scan on t1
784 -> Parallel Seq Scan on p1
785 -> Parallel Seq Scan on p1_c1
786 -> Parallel Seq Scan on p1_c2
787 -> Parallel Seq Scan on p1_c3
788 -> Parallel Seq Scan on p1_c4
789 -> Parallel Seq Scan on p1_c1_c1
790 -> Parallel Seq Scan on p1_c1_c2
791 -> Parallel Seq Scan on p1_c3_c1
792 -> Parallel Seq Scan on p1_c3_c2
796 SET enable_indexscan to DEFAULT;
797 SET parallel_setup_cost to 0;
798 SET parallel_tuple_cost to 0;
799 SET min_parallel_table_scan_size to 0;
800 SET min_parallel_index_scan_size to 0;
801 SET max_parallel_workers_per_gather to 5;
802 EXPLAIN (COSTS false) SELECT * FROM p1;
804 -------------------------------------------
808 -> Parallel Seq Scan on p1
809 -> Parallel Seq Scan on p1_c1
810 -> Parallel Seq Scan on p1_c2
811 -> Parallel Seq Scan on p1_c3
812 -> Parallel Seq Scan on p1_c4
813 -> Parallel Seq Scan on p1_c1_c1
814 -> Parallel Seq Scan on p1_c1_c2
815 -> Parallel Seq Scan on p1_c3_c1
816 -> Parallel Seq Scan on p1_c3_c2
819 /*+Parallel(p1 0 hard)*/
820 EXPLAIN (COSTS false) SELECT * FROM p1;
829 ----------------------------
836 -> Seq Scan on p1_c1_c1
837 -> Seq Scan on p1_c1_c2
838 -> Seq Scan on p1_c3_c1
839 -> Seq Scan on p1_c3_c2
843 /*+Parallel(p1 100x hard)Parallel(p1 -1000 hard)Parallel(p1 1000000 hard)
844 Parallel(p1 8 hoge)Parallel(p1)Parallel(p1 100 soft x)*/
845 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
846 INFO: pg_hint_plan: hint syntax error at or near "100x"
847 DETAIL: number of workers must be a number: Parallel
848 INFO: pg_hint_plan: hint syntax error at or near "-1000"
849 DETAIL: number of workers must be positive: Parallel
850 INFO: pg_hint_plan: hint syntax error at or near "1000000"
851 DETAIL: number of workers = 1000000 is larger than max_worker_processes(8): Parallel
852 INFO: pg_hint_plan: hint syntax error at or near "hoge"
853 DETAIL: enforcement must be soft or hard: Parallel
854 INFO: pg_hint_plan: hint syntax error at or near ")"
855 DETAIL: wrong number of arguments (1): Parallel
856 INFO: pg_hint_plan: hint syntax error at or near ")"
857 DETAIL: wrong number of arguments (4): Parallel
863 Parallel(p1 100x hard)
864 Parallel(p1 -1000 hard)
865 Parallel(p1 1000000 hard)
871 -------------------------------------------
875 -> Parallel Seq Scan on p1
876 -> Parallel Seq Scan on p1_c1
877 -> Parallel Seq Scan on p1_c2
878 -> Parallel Seq Scan on p1_c3
879 -> Parallel Seq Scan on p1_c4
880 -> Parallel Seq Scan on p1_c1_c1
881 -> Parallel Seq Scan on p1_c1_c2
882 -> Parallel Seq Scan on p1_c3_c1
883 -> Parallel Seq Scan on p1_c3_c2
884 -> Parallel Seq Scan on p2
885 -> Parallel Seq Scan on p2_c1
886 -> Parallel Seq Scan on p2_c2
887 -> Parallel Seq Scan on p2_c3
888 -> Parallel Seq Scan on p2_c4
889 -> Parallel Seq Scan on p2_c1_c1
890 -> Parallel Seq Scan on p2_c1_c2
891 -> Parallel Seq Scan on p2_c3_c1
892 -> Parallel Seq Scan on p2_c3_c2
895 -- Hints on unhintable relations are just ignored
896 /*+Parallel(p1 5 hard) Parallel(s1 3 hard) IndexScan(ft1) SeqScan(cte1)
897 TidScan(fs1) IndexScan(t) IndexScan(*VALUES*) */
898 EXPLAIN (COSTS false) SELECT id FROM p1_c1_c1 as s1 TABLESAMPLE SYSTEM(10)
902 (WITH cte1 AS (SELECT id FROM p1 WHERE id % 2 = 0) SELECT id FROM cte1)
904 SELECT userid FROM pg_stat_statements fs1
906 SELECT x FROM (VALUES (1), (2), (3)) t(x);
921 -----------------------------------------------------------------------------------------------
925 -> Sample Scan on p1_c1_c1 s1
926 Sampling: system ('10'::real)
927 -> Foreign Scan on ft1
928 Foreign File: /home/horiguti/work/pg_hint_plan/pg_hint_plan/data/data.csv
934 -> Parallel Seq Scan on p1
935 Filter: ((id % 2) = 0)
936 -> Parallel Seq Scan on p1_c1
937 Filter: ((id % 2) = 0)
938 -> Parallel Seq Scan on p1_c2
939 Filter: ((id % 2) = 0)
940 -> Parallel Seq Scan on p1_c3
941 Filter: ((id % 2) = 0)
942 -> Parallel Seq Scan on p1_c4
943 Filter: ((id % 2) = 0)
944 -> Parallel Seq Scan on p1_c1_c1
945 Filter: ((id % 2) = 0)
946 -> Parallel Seq Scan on p1_c1_c2
947 Filter: ((id % 2) = 0)
948 -> Parallel Seq Scan on p1_c3_c1
949 Filter: ((id % 2) = 0)
950 -> Parallel Seq Scan on p1_c3_c2
951 Filter: ((id % 2) = 0)
952 -> Function Scan on pg_stat_statements
953 -> Subquery Scan on "*SELECT* 5"
954 -> Values Scan on "*VALUES*"
957 ALTER SYSTEM SET session_preload_libraries TO DEFAULT;
958 SELECT pg_reload_conf();