2 SET pg_hint_plan.enable TO on;
3 SET pg_hint_plan.debug_print TO on;
4 SET client_min_messages TO LOG;
5 SET search_path TO public;
6 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
8 --------------------------------------------------
10 Merge Cond: (t1.c1 = t2.c1)
12 Merge Cond: (t1.c1 = t4.c1)
14 Merge Cond: (t1.c1 = t3.c1)
15 -> Index Scan using t1_pkey on t1
16 -> Index Scan using t3_pkey on t3
17 -> Index Scan using t4_pkey on t4
24 ---- No. L-1-1 specified pattern of the object name
27 /*+Leading(t4 t2 t3 t1)*/
28 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
37 ------------------------------------------------------
39 Merge Cond: (t1.c1 = t2.c1)
40 -> Index Scan using t1_pkey on t1
44 Hash Cond: (t3.c1 = t2.c1)
48 Hash Cond: (t4.c1 = t2.c1)
55 /*+Leading(t4 t2 t3 t1)*/
56 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t_1, s1.t2 t_2, s1.t3 t_3, s1.t4 t_4 WHERE t_1.c1 = t_2.c1 AND t_1.c1 = t_3.c1 AND t_1.c1 = t_4.c1;
65 ------------------------------------------------------
67 Merge Cond: (t_1.c1 = t_2.c1)
69 Merge Cond: (t_1.c1 = t_4.c1)
71 Merge Cond: (t_1.c1 = t_3.c1)
72 -> Index Scan using t1_pkey on t1 t_1
73 -> Index Scan using t3_pkey on t3 t_3
74 -> Index Scan using t4_pkey on t4 t_4
81 /*+Leading(t_4 t_2 t_3 t_1)*/
82 EXPLAIN (COSTS false) SELECT * FROM s1.t1 t_1, s1.t2 t_2, s1.t3 t_3, s1.t4 t_4 WHERE t_1.c1 = t_2.c1 AND t_1.c1 = t_3.c1 AND t_1.c1 = t_4.c1;
85 Leading(t_4 t_2 t_3 t_1)
91 --------------------------------------------------------
93 Merge Cond: (t_1.c1 = t_2.c1)
94 -> Index Scan using t1_pkey on t1 t_1
98 Hash Cond: (t_3.c1 = t_2.c1)
102 Hash Cond: (t_4.c1 = t_2.c1)
103 -> Seq Scan on t4 t_4
105 -> Seq Scan on t2 t_2
109 ---- No. L-1-2 specified schema name in the hint option
112 /*+Leading(t4 t2 t3 t1)*/
113 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
122 ------------------------------------------------------
124 Merge Cond: (t1.c1 = t2.c1)
125 -> Index Scan using t1_pkey on t1
129 Hash Cond: (t3.c1 = t2.c1)
133 Hash Cond: (t4.c1 = t2.c1)
140 /*+Leading(s1.t4 s1.t2 s1.t3 s1.t1)*/
141 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
145 Leading(s1.t4 s1.t2 s1.t3 s1.t1)
150 --------------------------------------------------
152 Merge Cond: (t1.c1 = t2.c1)
154 Merge Cond: (t1.c1 = t4.c1)
156 Merge Cond: (t1.c1 = t3.c1)
157 -> Index Scan using t1_pkey on t1
158 -> Index Scan using t3_pkey on t3
159 -> Index Scan using t4_pkey on t4
166 ---- No. L-1-3 table doesn't exist in the hint option
169 /*+Leading(t4 t2 t3 t1)*/
170 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
179 ------------------------------------------------------
181 Merge Cond: (t1.c1 = t2.c1)
182 -> Index Scan using t1_pkey on t1
186 Hash Cond: (t3.c1 = t2.c1)
190 Hash Cond: (t4.c1 = t2.c1)
197 /*+Leading(t5 t2 t3 t1)*/
198 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
207 ------------------------------------------------
210 Merge Cond: (t1.c1 = t2.c1)
211 -> Index Scan using t1_pkey on t1
215 Hash Cond: (t3.c1 = t2.c1)
219 -> Index Scan using t4_pkey on t4
220 Index Cond: (c1 = t1.c1)
224 ---- No. L-1-4 conflict table name
227 /*+Leading(t4 t2 t3 t1)*/
228 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
237 ------------------------------------------------------
239 Merge Cond: (t1.c1 = t2.c1)
240 -> Index Scan using t1_pkey on t1
244 Hash Cond: (t3.c1 = t2.c1)
248 Hash Cond: (t4.c1 = t2.c1)
255 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s2.t1 WHERE s1.t1.c1 = t2.c1 AND s1.t1.c1 = t3.c1 AND s1.t1.c1 = s2.t1.c1;
257 --------------------------------------------------
259 Merge Cond: (s1.t1.c1 = s2.t1.c1)
261 Merge Cond: (s1.t1.c1 = t2.c1)
263 Merge Cond: (s1.t1.c1 = t3.c1)
264 -> Index Scan using t1_pkey on t1
265 -> Index Scan using t3_pkey on t3
266 -> Index Scan using t2_pkey on t2
272 /*+Leading(t1 t2 t3 t1)*/
273 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s2.t1 WHERE s1.t1.c1 = t2.c1 AND s1.t1.c1 = t3.c1 AND s1.t1.c1 = s2.t1.c1;
274 INFO: hint syntax error at or near "Leading(t1 t2 t3 t1)"
275 DETAIL: Relation name "t1" is ambiguous.
284 --------------------------------------------------
286 Merge Cond: (s1.t1.c1 = s2.t1.c1)
288 Merge Cond: (s1.t1.c1 = t2.c1)
290 Merge Cond: (s1.t1.c1 = t3.c1)
291 -> Index Scan using t1_pkey on t1
292 -> Index Scan using t3_pkey on t3
293 -> Index Scan using t2_pkey on t2
299 /*+Leading(s1.t1 t2 t3 s2.t1)*/
300 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s2.t1 WHERE s1.t1.c1 = t2.c1 AND s1.t1.c1 = t3.c1 AND s1.t1.c1 = s2.t1.c1;
303 Leading(s1.t1 t2 t3 s2.t1)
309 --------------------------------------------------
313 Merge Cond: (t3.c1 = t2.c1)
314 -> Index Scan using t3_pkey on t3
318 -> Index Scan using t1_pkey on t1
319 Index Cond: (c1 = t2.c1)
320 -> Index Scan using t1_pkey on t1
321 Index Cond: (c1 = t2.c1)
324 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s2.t1 s2t1 WHERE s1.t1.c1 = t2.c1 AND s1.t1.c1 = t3.c1 AND s1.t1.c1 = s2t1.c1;
326 --------------------------------------------------
328 Merge Cond: (t1.c1 = s2t1.c1)
330 Merge Cond: (t1.c1 = t2.c1)
332 Merge Cond: (t1.c1 = t3.c1)
333 -> Index Scan using t1_pkey on t1
334 -> Index Scan using t3_pkey on t3
335 -> Index Scan using t2_pkey on t2
338 -> Seq Scan on t1 s2t1
341 /*+Leading(s2t1 t1 t3 t2)*/
342 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s2.t1 s2t1 WHERE s1.t1.c1 = t2.c1 AND s1.t1.c1 = t3.c1 AND s1.t1.c1 = s2t1.c1;
345 Leading(s2t1 t1 t3 t2)
351 -------------------------------------------------------
353 Merge Cond: (t1.c1 = t2.c1)
355 Merge Cond: (t1.c1 = t3.c1)
357 Merge Cond: (t1.c1 = s2t1.c1)
358 -> Index Scan using t1_pkey on t1
359 -> Index Scan using t1_pkey on t1 s2t1
360 -> Index Scan using t3_pkey on t3
367 EXPLAIN (COSTS false) SELECT *, (SELECT max(t1.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
369 ----------------------------------------------------------------
371 Merge Cond: (s1.t1.c1 = s1.t2.c1)
372 InitPlan 1 (returns $0)
375 Merge Cond: (s1.t1.c1 = s1.t2.c1)
377 Merge Cond: (s1.t1.c1 = s1.t4.c1)
379 Merge Cond: (s1.t1.c1 = s1.t3.c1)
380 -> Index Scan using t1_pkey on t1
381 -> Index Scan using t3_pkey on t3
382 -> Index Scan using t4_pkey on t4
387 Merge Cond: (s1.t1.c1 = s1.t4.c1)
389 Merge Cond: (s1.t1.c1 = s1.t3.c1)
390 -> Index Scan using t1_pkey on t1
391 -> Index Scan using t3_pkey on t3
392 -> Index Scan using t4_pkey on t4
398 /*+Leading(t4 t2 t3 t1)*/
399 EXPLAIN (COSTS false) SELECT *, (SELECT max(t1.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
408 --------------------------------------------------------------------------
410 Merge Cond: (s1.t1.c1 = s1.t2.c1)
411 InitPlan 1 (returns $0)
414 Merge Cond: (s1.t1.c1 = s1.t2.c1)
415 -> Index Scan using t1_pkey on t1
419 Hash Cond: (s1.t3.c1 = s1.t2.c1)
423 Hash Cond: (s1.t4.c1 = s1.t2.c1)
427 -> Index Scan using t1_pkey on t1
431 Hash Cond: (s1.t3.c1 = s1.t2.c1)
435 Hash Cond: (s1.t4.c1 = s1.t2.c1)
441 /*+Leading(st1 st2 st3 st4 t4 t2 t3 t1)*/
442 EXPLAIN (COSTS false) SELECT *, (SELECT max(st1.c1) FROM s1.t1 st1, s1.t2 st2, s1.t3 st3, s1.t4 st4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
445 Leading(st1 st2 st3 st4 t4 t2 t3 t1)
451 --------------------------------------------------------------------------------------------
453 Merge Cond: (t1.c1 = t2.c1)
454 -> Index Scan using t1_pkey on t1
458 Hash Cond: (t3.c1 = t2.c1)
462 Hash Cond: (t4.c1 = t2.c1)
469 One-Time Filter: ((t1.c1 = t2.c1) AND (t1.c1 = t3.c1) AND (t1.c1 = t4.c1))
473 -> Seq Scan on t1 st1
475 -> Seq Scan on t2 st2
477 -> Seq Scan on t3 st3
479 -> Seq Scan on t4 st4
483 ---- No. L-1-5 conflict table name
486 /*+Leading(t4 t2 t3 t1)*/
487 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
496 ------------------------------------------------------
498 Merge Cond: (t1.c1 = t2.c1)
499 -> Index Scan using t1_pkey on t1
503 Hash Cond: (t3.c1 = t2.c1)
507 Hash Cond: (t4.c1 = t2.c1)
514 /*+Leading(t4 t2 t3 t1 t4)*/
515 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
518 Leading(t4 t2 t3 t1 t4)
524 ------------------------------------------------------
526 Merge Cond: (t1.c1 = t2.c1)
527 -> Index Scan using t1_pkey on t1
531 Hash Cond: (t3.c1 = t2.c1)
535 Hash Cond: (t4.c1 = t2.c1)
541 /*+Leading(t4 t2 t3 t4)*/
542 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
543 INFO: hint syntax error at or near "Leading(t4 t2 t3 t4)"
544 DETAIL: Relation name "t4" is duplicate.
553 --------------------------------------------------
555 Merge Cond: (t1.c1 = t2.c1)
557 Merge Cond: (t1.c1 = t4.c1)
559 Merge Cond: (t1.c1 = t3.c1)
560 -> Index Scan using t1_pkey on t1
561 -> Index Scan using t3_pkey on t3
562 -> Index Scan using t4_pkey on t4
569 /*+Leading(t4 t2 t3 t1 t4 t2 t3 t1)*/
570 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
573 Leading(t4 t2 t3 t1 t4 t2 t3 t1)
579 ------------------------------------------------------
581 Merge Cond: (t1.c1 = t2.c1)
582 -> Index Scan using t1_pkey on t1
586 Hash Cond: (t3.c1 = t2.c1)
590 Hash Cond: (t4.c1 = t2.c1)
596 /*+Leading(t4 t2 t2 t4)*/
597 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
598 INFO: hint syntax error at or near "Leading(t4 t2 t2 t4)"
599 DETAIL: Relation name "t2" is duplicate.
608 --------------------------------------------------
610 Merge Cond: (t1.c1 = t2.c1)
612 Merge Cond: (t1.c1 = t4.c1)
614 Merge Cond: (t1.c1 = t3.c1)
615 -> Index Scan using t1_pkey on t1
616 -> Index Scan using t3_pkey on t3
617 -> Index Scan using t4_pkey on t4
624 ---- No. L-1-6 object type for the hint
627 /*+Leading(t4 t2 t3 t1)*/
628 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
637 ------------------------------------------------------
639 Merge Cond: (t1.c1 = t2.c1)
640 -> Index Scan using t1_pkey on t1
644 Hash Cond: (t3.c1 = t2.c1)
648 Hash Cond: (t4.c1 = t2.c1)
655 EXPLAIN (COSTS false) SELECT * FROM s1.p1 t1, s1.p1 t2, s1.p1 t3, s1.p1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
657 ---------------------------------------------------
659 Hash Cond: (t1.c1 = t4.c1)
661 Hash Cond: (t1.c1 = t3.c1)
663 Hash Cond: (t1.c1 = t2.c1)
666 -> Seq Scan on p1c1 t1
667 -> Seq Scan on p1c2 t1
668 -> Seq Scan on p1c3 t1
672 -> Seq Scan on p1c1 t2
673 -> Seq Scan on p1c2 t2
674 -> Seq Scan on p1c3 t2
678 -> Seq Scan on p1c1 t3
679 -> Seq Scan on p1c2 t3
680 -> Seq Scan on p1c3 t3
684 -> Seq Scan on p1c1 t4
685 -> Seq Scan on p1c2 t4
686 -> Seq Scan on p1c3 t4
689 /*+Leading(t4 t3 t2 t1)*/
690 EXPLAIN (COSTS false) SELECT * FROM s1.p1 t1, s1.p1 t2, s1.p1 t3, s1.p1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
699 ---------------------------------------------------
701 Hash Cond: (t2.c1 = t1.c1)
703 Hash Cond: (t3.c1 = t2.c1)
705 Hash Cond: (t3.c1 = t4.c1)
708 -> Seq Scan on p1c1 t3
709 -> Seq Scan on p1c2 t3
710 -> Seq Scan on p1c3 t3
714 -> Seq Scan on p1c1 t4
715 -> Seq Scan on p1c2 t4
716 -> Seq Scan on p1c3 t4
720 -> Seq Scan on p1c1 t2
721 -> Seq Scan on p1c2 t2
722 -> Seq Scan on p1c3 t2
726 -> Seq Scan on p1c1 t1
727 -> Seq Scan on p1c2 t1
728 -> Seq Scan on p1c3 t1
732 EXPLAIN (COSTS false) SELECT * FROM s1.ul1 t1, s1.ul1 t2, s1.ul1 t3, s1.ul1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
734 --------------------------------------------
736 Hash Cond: (t1.c1 = t4.c1)
738 Hash Cond: (t1.c1 = t3.c1)
740 Hash Cond: (t1.c1 = t2.c1)
741 -> Seq Scan on ul1 t1
743 -> Seq Scan on ul1 t2
745 -> Seq Scan on ul1 t3
747 -> Seq Scan on ul1 t4
750 /*+Leading(t4 t3 t2 t1)*/
751 EXPLAIN (COSTS false) SELECT * FROM s1.ul1 t1, s1.ul1 t2, s1.ul1 t3, s1.ul1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
760 --------------------------------------------
762 Hash Cond: (t2.c1 = t1.c1)
764 Hash Cond: (t3.c1 = t2.c1)
766 Hash Cond: (t3.c1 = t4.c1)
767 -> Seq Scan on ul1 t3
769 -> Seq Scan on ul1 t4
771 -> Seq Scan on ul1 t2
773 -> Seq Scan on ul1 t1
777 CREATE TEMP TABLE tm1 (LIKE s1.t1 INCLUDING ALL);
778 NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tm1_pkey" for table "tm1"
779 EXPLAIN (COSTS false) SELECT * FROM tm1 t1, tm1 t2, tm1 t3, tm1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
781 --------------------------------------------
783 Hash Cond: (t1.c1 = t4.c1)
785 Hash Cond: (t1.c1 = t3.c1)
787 Hash Cond: (t1.c1 = t2.c1)
788 -> Seq Scan on tm1 t1
790 -> Seq Scan on tm1 t2
792 -> Seq Scan on tm1 t3
794 -> Seq Scan on tm1 t4
797 /*+Leading(t4 t3 t2 t1)*/
798 EXPLAIN (COSTS false) SELECT * FROM tm1 t1, tm1 t2, tm1 t3, tm1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
807 --------------------------------------------
809 Hash Cond: (t2.c1 = t1.c1)
811 Hash Cond: (t3.c1 = t2.c1)
813 Hash Cond: (t3.c1 = t4.c1)
814 -> Seq Scan on tm1 t3
816 -> Seq Scan on tm1 t4
818 -> Seq Scan on tm1 t2
820 -> Seq Scan on tm1 t1
824 EXPLAIN (COSTS false) SELECT * FROM pg_catalog.pg_class t1, pg_catalog.pg_class t2, pg_catalog.pg_class t3, pg_catalog.pg_class t4 WHERE t1.oid = t2.oid AND t1.oid = t3.oid AND t1.oid = t4.oid;
826 -------------------------------------------------
828 Hash Cond: (t1.oid = t4.oid)
830 Hash Cond: (t1.oid = t3.oid)
832 Hash Cond: (t1.oid = t2.oid)
833 -> Seq Scan on pg_class t1
835 -> Seq Scan on pg_class t2
837 -> Seq Scan on pg_class t3
839 -> Seq Scan on pg_class t4
842 /*+Leading(t4 t3 t2 t1)*/
843 EXPLAIN (COSTS false) SELECT * FROM pg_catalog.pg_class t1, pg_catalog.pg_class t2, pg_catalog.pg_class t3, pg_catalog.pg_class t4 WHERE t1.oid = t2.oid AND t1.oid = t3.oid AND t1.oid = t4.oid;
852 -------------------------------------------------
854 Hash Cond: (t2.oid = t1.oid)
856 Hash Cond: (t3.oid = t2.oid)
858 Hash Cond: (t3.oid = t4.oid)
859 -> Seq Scan on pg_class t3
861 -> Seq Scan on pg_class t4
863 -> Seq Scan on pg_class t2
865 -> Seq Scan on pg_class t1
871 EXPLAIN (COSTS false) SELECT * FROM s1.f1() t1, s1.f1() t2, s1.f1() t3, s1.f1() t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
873 --------------------------------------------
875 Join Filter: (t1.c1 = t4.c1)
877 Join Filter: (t1.c1 = t3.c1)
879 Join Filter: (t1.c1 = t2.c1)
880 -> Function Scan on f1 t1
881 -> Function Scan on f1 t2
882 -> Function Scan on f1 t3
883 -> Function Scan on f1 t4
886 /*+Leading(t4 t3 t2 t1)*/
887 EXPLAIN (COSTS false) SELECT * FROM s1.f1() t1, s1.f1() t2, s1.f1() t3, s1.f1() t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
896 --------------------------------------------
898 Join Filter: (t2.c1 = t1.c1)
900 Join Filter: (t3.c1 = t2.c1)
902 Join Filter: (t3.c1 = t4.c1)
903 -> Function Scan on f1 t3
904 -> Function Scan on f1 t4
905 -> Function Scan on f1 t2
906 -> Function Scan on f1 t1
910 EXPLAIN (COSTS false) SELECT * FROM (VALUES(1,1,1,'1')) AS t1 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2')) AS t2 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3')) AS t3 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3'), (4,4,4,'4')) AS t4 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
912 --------------------------------------------------------------------------
914 Join Filter: ("*VALUES*".column1 = "*VALUES*".column1)
916 Hash Cond: ("*VALUES*".column1 = "*VALUES*".column1)
917 -> Values Scan on "*VALUES*"
920 Hash Cond: ("*VALUES*".column1 = "*VALUES*".column1)
921 -> Values Scan on "*VALUES*"
923 -> Values Scan on "*VALUES*"
924 -> Values Scan on "*VALUES*"
927 /*+Leading(t4 t3 t2 t1)*/
928 EXPLAIN (COSTS false) SELECT * FROM (VALUES(1,1,1,'1')) AS t1 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2')) AS t2 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3')) AS t3 (c1, c2, c3, c4), (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3'), (4,4,4,'4')) AS t4 (c1, c2, c3, c4) WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
937 --------------------------------------------------------------------------
939 Join Filter: ("*VALUES*".column1 = "*VALUES*".column1)
941 Hash Cond: ("*VALUES*".column1 = "*VALUES*".column1)
942 -> Values Scan on "*VALUES*"
945 Hash Cond: ("*VALUES*".column1 = "*VALUES*".column1)
946 -> Values Scan on "*VALUES*"
948 -> Values Scan on "*VALUES*"
949 -> Values Scan on "*VALUES*"
953 EXPLAIN (COSTS false) WITH c1(c1) AS (SELECT st1.c1 FROM s1.t1 st1, s1.t1 st2, s1.t1 st3, s1.t1 st4 WHERE st1.c1 = st2.c1 AND st1.c1 = st3.c1 AND st1.c1 = st4.c1) SELECT * FROM c1 ct1, c1 ct2, c1 ct3, c1 ct4 WHERE ct1.c1 = ct2.c1 AND ct1.c1 = ct3.c1 AND ct1.c1 = ct4.c1;
955 ----------------------------------------------------
957 Merge Cond: (ct1.c1 = ct3.c1)
960 Hash Cond: (st1.c1 = st4.c1)
962 Hash Cond: (st1.c1 = st3.c1)
964 Hash Cond: (st1.c1 = st2.c1)
965 -> Seq Scan on t1 st1
967 -> Seq Scan on t1 st2
969 -> Seq Scan on t1 st3
971 -> Seq Scan on t1 st4
973 Merge Cond: (ct1.c1 = ct2.c1)
976 -> CTE Scan on c1 ct1
979 -> CTE Scan on c1 ct2
982 Merge Cond: (ct3.c1 = ct4.c1)
985 -> CTE Scan on c1 ct3
988 -> CTE Scan on c1 ct4
991 /*+Leading(ct4 ct3 ct2 ct1 st4 st3 st2 st1)*/
992 EXPLAIN (COSTS false) WITH c1(c1) AS (SELECT st1.c1 FROM s1.t1 st1, s1.t1 st2, s1.t1 st3, s1.t1 st4 WHERE st1.c1 = st2.c1 AND st1.c1 = st3.c1 AND st1.c1 = st4.c1) SELECT * FROM c1 ct1, c1 ct2, c1 ct3, c1 ct4 WHERE ct1.c1 = ct2.c1 AND ct1.c1 = ct3.c1 AND ct1.c1 = ct4.c1;
995 Leading(ct4 ct3 ct2 ct1 st4 st3 st2 st1)
1001 ---------------------------------------------------------
1003 Merge Cond: (ct1.c1 = ct2.c1)
1006 Hash Cond: (st2.c1 = st1.c1)
1008 Hash Cond: (st3.c1 = st2.c1)
1010 Hash Cond: (st3.c1 = st4.c1)
1011 -> Seq Scan on t1 st3
1013 -> Seq Scan on t1 st4
1015 -> Seq Scan on t1 st2
1017 -> Seq Scan on t1 st1
1020 -> CTE Scan on c1 ct1
1023 Merge Cond: (ct2.c1 = ct3.c1)
1026 -> CTE Scan on c1 ct2
1029 Merge Cond: (ct3.c1 = ct4.c1)
1032 -> CTE Scan on c1 ct3
1035 -> CTE Scan on c1 ct4
1039 EXPLAIN (COSTS false) SELECT * FROM s1.v1 t1, s1.v1 t2, s1.v1 t3, s1.v1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
1041 ----------------------------------------------
1043 Hash Cond: (v1t1.c1 = v1t1.c1)
1045 Hash Cond: (v1t1.c1 = v1t1.c1)
1047 Hash Cond: (v1t1.c1 = v1t1.c1)
1048 -> Seq Scan on t1 v1t1
1050 -> Seq Scan on t1 v1t1
1052 -> Seq Scan on t1 v1t1
1054 -> Seq Scan on t1 v1t1
1057 /*+Leading(t4 t3 t2 t1)*/
1058 EXPLAIN (COSTS false) SELECT * FROM s1.v1 t1, s1.v1 t2, s1.v1 t3, s1.v1 t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
1062 Leading(t4 t3 t2 t1)
1067 ----------------------------------------------
1069 Hash Cond: (v1t1.c1 = v1t1.c1)
1071 Hash Cond: (v1t1.c1 = v1t1.c1)
1073 Hash Cond: (v1t1.c1 = v1t1.c1)
1074 -> Seq Scan on t1 v1t1
1076 -> Seq Scan on t1 v1t1
1078 -> Seq Scan on t1 v1t1
1080 -> Seq Scan on t1 v1t1
1083 EXPLAIN (COSTS false) SELECT * FROM s1.v1 t1, s1.v1_ t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
1085 ---------------------------------------------
1087 Hash Cond: (v1t1.c1 = t4.c1)
1089 Hash Cond: (v1t1.c1 = v1t1_.c1)
1091 Hash Cond: (t3.c1 = v1t1.c1)
1094 -> Seq Scan on t1 v1t1
1096 -> Seq Scan on t1 v1t1_
1101 /*+Leading(t4 v1t1_ v1t1 t3)*/
1102 EXPLAIN (COSTS false) SELECT * FROM s1.v1 t1, s1.v1_ t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
1105 Leading(t4 v1t1_ v1t1 t3)
1111 ----------------------------------------------
1113 Hash Cond: (v1t1.c1 = t3.c1)
1115 Hash Cond: (v1t1_.c1 = v1t1.c1)
1117 Hash Cond: (t4.c1 = v1t1_.c1)
1120 -> Seq Scan on t1 v1t1_
1122 -> Seq Scan on t1 v1t1
1128 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, (SELECT t4.c1 FROM s1.t4) st4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = st4.c1;
1130 --------------------------------------------------
1132 Merge Cond: (t1.c1 = t2.c1)
1134 Merge Cond: (t1.c1 = t4.c1)
1136 Merge Cond: (t1.c1 = t3.c1)
1137 -> Index Scan using t1_pkey on t1
1138 -> Index Scan using t3_pkey on t3
1139 -> Index Scan using t4_pkey on t4
1145 /*+Leading(st4 t2 t3 t1)*/
1146 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, (SELECT t4.c1 FROM s1.t4) st4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = st4.c1;
1149 Leading(st4 t2 t3 t1)
1155 ------------------------------------------------
1158 Merge Cond: (t1.c1 = t2.c1)
1159 -> Index Scan using t1_pkey on t1
1163 Hash Cond: (t3.c1 = t2.c1)
1167 -> Index Scan using t4_pkey on t4
1168 Index Cond: (c1 = t1.c1)
1171 /*+Leading(t4 t2 t3 t1)*/
1172 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, (SELECT t4.c1 FROM s1.t4) st4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = st4.c1;
1175 Leading(t4 t2 t3 t1)
1181 ------------------------------------------------------
1183 Merge Cond: (t1.c1 = t2.c1)
1184 -> Index Scan using t1_pkey on t1
1188 Hash Cond: (t3.c1 = t2.c1)
1192 Hash Cond: (t4.c1 = t2.c1)