OSDN Git Service

Support PostgreSQL 13.
authorKyotaro Horiguchi <horikyota.ntt@gmail.com>
Thu, 6 Aug 2020 11:18:05 +0000 (20:18 +0900)
committerKyotaro Horiguchi <horikyota.ntt@gmail.com>
Thu, 6 Aug 2020 11:18:05 +0000 (20:18 +0900)
- Follow change of some planner functions.

- Follow a change of the semantics of List.

- Take in changes in copied core code.

- Adjust regression tests.
  Amost all of the differences are come from aliasing policy, and some
  come from a new GUC parameter.

core.c
expected/init.out
expected/pg_hint_plan.out
expected/ut-A.out
expected/ut-J.out
expected/ut-L.out
expected/ut-R.out
expected/ut-S.out
expected/ut-W.out
pg_hint_plan.c

diff --git a/core.c b/core.c
index d809fe7..986ba97 100644 (file)
--- a/core.c
+++ b/core.c
@@ -38,6 +38,8 @@
  *     restriction_is_constant_false()
  *     update_child_rel_info()
  *     build_child_join_sjinfo()
+ *     get_matching_part_pairs()
+ *     compute_partition_bounds()
  *
  *
  * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
@@ -137,7 +139,7 @@ set_append_rel_pathlist(PlannerInfo *root, RelOptInfo *rel,
                if (rel->part_scheme)
                        rel->partitioned_child_rels =
                                list_concat(rel->partitioned_child_rels,
-                                                       list_copy(childrel->partitioned_child_rels));
+                                                       childrel->partitioned_child_rels);
 
                /*
                 * Child is live, so add it to the live_childrels list for use below.
@@ -239,7 +241,7 @@ standard_join_search(PlannerInfo *root, int levels_needed, List *initial_rels)
                         * once we know the final targetlist (see grouping_planner).
                         */
                        if (lev < levels_needed)
-                               generate_gather_paths(root, rel, false);
+                               generate_useful_gather_paths(root, rel, false);
 
                        /* Find and save the cheapest paths for this rel */
                        set_cheapest(rel);
@@ -337,15 +339,23 @@ join_search_one_level(PlannerInfo *root, int level)
                         * to each initial rel they don't already include but have a join
                         * clause or restriction with.
                         */
+                       List       *other_rels_list;
                        ListCell   *other_rels;
 
                        if (level == 2)         /* consider remaining initial rels */
-                               other_rels = lnext(r);
+                       {
+                               other_rels_list = joinrels[level - 1];
+                               other_rels = lnext(other_rels_list, r);
+                       }
                        else                            /* consider all initial rels */
-                               other_rels = list_head(joinrels[1]);
+                       {
+                               other_rels_list = joinrels[1];
+                               other_rels = list_head(other_rels_list);
+                       }
 
                        make_rels_by_clause_joins(root,
                                                                          old_rel,
+                                                                         other_rels_list,
                                                                          other_rels);
                }
                else
@@ -364,7 +374,7 @@ join_search_one_level(PlannerInfo *root, int level)
                         */
                        make_rels_by_clauseless_joins(root,
                                                                                  old_rel,
-                                                                                 list_head(joinrels[1]));
+                                                                                 joinrels[1]);
                }
        }
 
@@ -390,6 +400,7 @@ join_search_one_level(PlannerInfo *root, int level)
                foreach(r, joinrels[k])
                {
                        RelOptInfo *old_rel = (RelOptInfo *) lfirst(r);
+                       List       *other_rels_list;
                        ListCell   *other_rels;
                        ListCell   *r2;
 
@@ -403,11 +414,18 @@ join_search_one_level(PlannerInfo *root, int level)
                                continue;
 
                        if (k == other_level)
-                               other_rels = lnext(r);  /* only consider remaining rels */
+                       {
+                               /* only consider remaining rels */
+                               other_rels_list = joinrels[k];
+                               other_rels = lnext(other_rels_list, r);
+                       }
                        else
-                               other_rels = list_head(joinrels[other_level]);
+                       {
+                               other_rels_list = joinrels[other_level];
+                               other_rels = list_head(other_rels_list);
+                       }
 
-                       for_each_cell(r2, other_rels)
+                       for_each_cell(r2, other_rels_list, other_rels)
                        {
                                RelOptInfo *new_rel = (RelOptInfo *) lfirst(r2);
 
@@ -459,7 +477,7 @@ join_search_one_level(PlannerInfo *root, int level)
 
                        make_rels_by_clauseless_joins(root,
                                                                                  old_rel,
-                                                                                 list_head(joinrels[1]));
+                                                                                 joinrels[1]);
                }
 
                /*----------
@@ -502,8 +520,9 @@ join_search_one_level(PlannerInfo *root, int level)
  * automatically ensures that each new joinrel is only added to the list once.
  *
  * 'old_rel' is the relation entry for the relation to be joined
- * 'other_rels': the first cell in a linked list containing the other
+ * 'other_rels_list': a list containing the other
  * rels to be considered for joining
+ * 'other_rels': the first cell to be considered
  *
  * Currently, this is only used with initial rels in other_rels, but it
  * will work for joining to joinrels too.
@@ -511,11 +530,12 @@ join_search_one_level(PlannerInfo *root, int level)
 static void
 make_rels_by_clause_joins(PlannerInfo *root,
                                                  RelOptInfo *old_rel,
+                                                 List *other_rels_list,
                                                  ListCell *other_rels)
 {
        ListCell   *l;
 
-       for_each_cell(l, other_rels)
+       for_each_cell(l, other_rels_list, other_rels)
        {
                RelOptInfo *other_rel = (RelOptInfo *) lfirst(l);
 
@@ -537,8 +557,7 @@ make_rels_by_clause_joins(PlannerInfo *root,
  *       The join rels are returned in root->join_rel_level[join_cur_level].
  *
  * 'old_rel' is the relation entry for the relation to be joined
- * 'other_rels': the first cell of a linked list containing the
- * other rels to be considered for joining
+ * 'other_rels': a list containing the other rels to be considered for joining
  *
  * Currently, this is only used with initial rels in other_rels, but it would
  * work for joining to joinrels too.
@@ -546,11 +565,11 @@ make_rels_by_clause_joins(PlannerInfo *root,
 static void
 make_rels_by_clauseless_joins(PlannerInfo *root,
                                                          RelOptInfo *old_rel,
-                                                         ListCell *other_rels)
+                                                         List *other_rels)
 {
        ListCell   *l;
 
-       for_each_cell(l, other_rels)
+       foreach(l, other_rels)
        {
                RelOptInfo *other_rel = (RelOptInfo *) lfirst(l);
 
@@ -1025,6 +1044,196 @@ build_child_join_sjinfo(PlannerInfo *root, SpecialJoinInfo *parent_sjinfo,
 }
 
 /*
+ * get_matching_part_pairs
+ *             Generate pairs of partitions to be joined from inputs
+ */
+static void
+get_matching_part_pairs(PlannerInfo *root, RelOptInfo *joinrel,
+                                               RelOptInfo *rel1, RelOptInfo *rel2,
+                                               List **parts1, List **parts2)
+{
+       bool            rel1_is_simple = IS_SIMPLE_REL(rel1);
+       bool            rel2_is_simple = IS_SIMPLE_REL(rel2);
+       int                     cnt_parts;
+
+       *parts1 = NIL;
+       *parts2 = NIL;
+
+       for (cnt_parts = 0; cnt_parts < joinrel->nparts; cnt_parts++)
+       {
+               RelOptInfo *child_joinrel = joinrel->part_rels[cnt_parts];
+               RelOptInfo *child_rel1;
+               RelOptInfo *child_rel2;
+               Relids          child_relids1;
+               Relids          child_relids2;
+
+               /*
+                * If this segment of the join is empty, it means that this segment
+                * was ignored when previously creating child-join paths for it in
+                * try_partitionwise_join() as it would not contribute to the join
+                * result, due to one or both inputs being empty; add NULL to each of
+                * the given lists so that this segment will be ignored again in that
+                * function.
+                */
+               if (!child_joinrel)
+               {
+                       *parts1 = lappend(*parts1, NULL);
+                       *parts2 = lappend(*parts2, NULL);
+                       continue;
+               }
+
+               /*
+                * Get a relids set of partition(s) involved in this join segment that
+                * are from the rel1 side.
+                */
+               child_relids1 = bms_intersect(child_joinrel->relids,
+                                                                         rel1->all_partrels);
+               Assert(bms_num_members(child_relids1) == bms_num_members(rel1->relids));
+
+               /*
+                * Get a child rel for rel1 with the relids.  Note that we should have
+                * the child rel even if rel1 is a join rel, because in that case the
+                * partitions specified in the relids would have matching/overlapping
+                * boundaries, so the specified partitions should be considered as
+                * ones to be joined when planning partitionwise joins of rel1,
+                * meaning that the child rel would have been built by the time we get
+                * here.
+                */
+               if (rel1_is_simple)
+               {
+                       int                     varno = bms_singleton_member(child_relids1);
+
+                       child_rel1 = find_base_rel(root, varno);
+               }
+               else
+                       child_rel1 = find_join_rel(root, child_relids1);
+               Assert(child_rel1);
+
+               /*
+                * Get a relids set of partition(s) involved in this join segment that
+                * are from the rel2 side.
+                */
+               child_relids2 = bms_intersect(child_joinrel->relids,
+                                                                         rel2->all_partrels);
+               Assert(bms_num_members(child_relids2) == bms_num_members(rel2->relids));
+
+               /*
+                * Get a child rel for rel2 with the relids.  See above comments.
+                */
+               if (rel2_is_simple)
+               {
+                       int                     varno = bms_singleton_member(child_relids2);
+
+                       child_rel2 = find_base_rel(root, varno);
+               }
+               else
+                       child_rel2 = find_join_rel(root, child_relids2);
+               Assert(child_rel2);
+
+               /*
+                * The join of rel1 and rel2 is legal, so is the join of the child
+                * rels obtained above; add them to the given lists as a join pair
+                * producing this join segment.
+                */
+               *parts1 = lappend(*parts1, child_rel1);
+               *parts2 = lappend(*parts2, child_rel2);
+       }
+}
+
+
+/*
+ * compute_partition_bounds
+ *             Compute the partition bounds for a join rel from those for inputs
+ */
+static void
+compute_partition_bounds(PlannerInfo *root, RelOptInfo *rel1,
+                                                RelOptInfo *rel2, RelOptInfo *joinrel,
+                                                SpecialJoinInfo *parent_sjinfo,
+                                                List **parts1, List **parts2)
+{
+       /*
+        * If we don't have the partition bounds for the join rel yet, try to
+        * compute those along with pairs of partitions to be joined.
+        */
+       if (joinrel->nparts == -1)
+       {
+               PartitionScheme part_scheme = joinrel->part_scheme;
+               PartitionBoundInfo boundinfo = NULL;
+               int                     nparts = 0;
+
+               Assert(joinrel->boundinfo == NULL);
+               Assert(joinrel->part_rels == NULL);
+
+               /*
+                * See if the partition bounds for inputs are exactly the same, in
+                * which case we don't need to work hard: the join rel have the same
+                * partition bounds as inputs, and the partitions with the same
+                * cardinal positions form the pairs.
+                *
+                * Note: even in cases where one or both inputs have merged bounds, it
+                * would be possible for both the bounds to be exactly the same, but
+                * it seems unlikely to be worth the cycles to check.
+                */
+               if (!rel1->partbounds_merged &&
+                       !rel2->partbounds_merged &&
+                       rel1->nparts == rel2->nparts &&
+                       partition_bounds_equal(part_scheme->partnatts,
+                                                                  part_scheme->parttyplen,
+                                                                  part_scheme->parttypbyval,
+                                                                  rel1->boundinfo, rel2->boundinfo))
+               {
+                       boundinfo = rel1->boundinfo;
+                       nparts = rel1->nparts;
+               }
+               else
+               {
+                       /* Try merging the partition bounds for inputs. */
+                       boundinfo = partition_bounds_merge(part_scheme->partnatts,
+                                                                                          part_scheme->partsupfunc,
+                                                                                          part_scheme->partcollation,
+                                                                                          rel1, rel2,
+                                                                                          parent_sjinfo->jointype,
+                                                                                          parts1, parts2);
+                       if (boundinfo == NULL)
+                       {
+                               joinrel->nparts = 0;
+                               return;
+                       }
+                       nparts = list_length(*parts1);
+                       joinrel->partbounds_merged = true;
+               }
+
+               Assert(nparts > 0);
+               joinrel->boundinfo = boundinfo;
+               joinrel->nparts = nparts;
+               joinrel->part_rels =
+                       (RelOptInfo **) palloc0(sizeof(RelOptInfo *) * nparts);
+       }
+       else
+       {
+               Assert(joinrel->nparts > 0);
+               Assert(joinrel->boundinfo);
+               Assert(joinrel->part_rels);
+
+               /*
+                * If the join rel's partbounds_merged flag is true, it means inputs
+                * are not guaranteed to have the same partition bounds, therefore we
+                * can't assume that the partitions at the same cardinal positions
+                * form the pairs; let get_matching_part_pairs() generate the pairs.
+                * Otherwise, nothing to do since we can assume that.
+                */
+               if (joinrel->partbounds_merged)
+               {
+                       get_matching_part_pairs(root, joinrel, rel1, rel2,
+                                                                       parts1, parts2);
+                       Assert(list_length(*parts1) == joinrel->nparts);
+                       Assert(list_length(*parts2) == joinrel->nparts);
+               }
+       }
+}
+
+
+/*
  * Assess whether join between given two partitioned relations can be broken
  * down into joins between matching partitions; a technique called
  * "partitionwise join"
@@ -1051,25 +1260,29 @@ try_partitionwise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2,
 {
        bool            rel1_is_simple = IS_SIMPLE_REL(rel1);
        bool            rel2_is_simple = IS_SIMPLE_REL(rel2);
-       int                     nparts;
+       List       *parts1 = NIL;
+       List       *parts2 = NIL;
+       ListCell   *lcr1 = NULL;
+       ListCell   *lcr2 = NULL;
        int                     cnt_parts;
 
        /* Guard against stack overflow due to overly deep partition hierarchy. */
        check_stack_depth();
 
        /* Nothing to do, if the join relation is not partitioned. */
-       if (!IS_PARTITIONED_REL(joinrel))
+       if (joinrel->part_scheme == NULL || joinrel->nparts == 0)
                return;
 
        /* The join relation should have consider_partitionwise_join set. */
        Assert(joinrel->consider_partitionwise_join);
 
        /*
-        * Since this join relation is partitioned, all the base relations
-        * participating in this join must be partitioned and so are all the
-        * intermediate join relations.
+        * We can not perform partitionwise join if either of the joining
+        * relations is not partitioned.
         */
-       Assert(IS_PARTITIONED_REL(rel1) && IS_PARTITIONED_REL(rel2));
+       if (!IS_PARTITIONED_REL(rel1) || !IS_PARTITIONED_REL(rel2))
+               return;
+
        Assert(REL_HAS_ALL_PART_PROPS(rel1) && REL_HAS_ALL_PART_PROPS(rel2));
 
        /* The joining relations should have consider_partitionwise_join set. */
@@ -1083,35 +1296,28 @@ try_partitionwise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2,
        Assert(joinrel->part_scheme == rel1->part_scheme &&
                   joinrel->part_scheme == rel2->part_scheme);
 
-       /*
-        * Since we allow partitionwise join only when the partition bounds of the
-        * joining relations exactly match, the partition bounds of the join
-        * should match those of the joining relations.
-        */
-       Assert(partition_bounds_equal(joinrel->part_scheme->partnatts,
-                                                                 joinrel->part_scheme->parttyplen,
-                                                                 joinrel->part_scheme->parttypbyval,
-                                                                 joinrel->boundinfo, rel1->boundinfo));
-       Assert(partition_bounds_equal(joinrel->part_scheme->partnatts,
-                                                                 joinrel->part_scheme->parttyplen,
-                                                                 joinrel->part_scheme->parttypbyval,
-                                                                 joinrel->boundinfo, rel2->boundinfo));
+       Assert(!(joinrel->partbounds_merged && (joinrel->nparts <= 0)));
+
+       compute_partition_bounds(root, rel1, rel2, joinrel, parent_sjinfo,
+                                                        &parts1, &parts2);
 
-       nparts = joinrel->nparts;
+       if (joinrel->partbounds_merged)
+       {
+               lcr1 = list_head(parts1);
+               lcr2 = list_head(parts2);
+       }
 
        /*
         * Create child-join relations for this partitioned join, if those don't
         * exist. Add paths to child-joins for a pair of child relations
         * corresponding to the given pair of parent relations.
         */
-       for (cnt_parts = 0; cnt_parts < nparts; cnt_parts++)
+       for (cnt_parts = 0; cnt_parts < joinrel->nparts; cnt_parts++)
        {
-               RelOptInfo *child_rel1 = rel1->part_rels[cnt_parts];
-               RelOptInfo *child_rel2 = rel2->part_rels[cnt_parts];
-               bool            rel1_empty = (child_rel1 == NULL ||
-                                                                 IS_DUMMY_REL(child_rel1));
-               bool            rel2_empty = (child_rel2 == NULL ||
-                                                                 IS_DUMMY_REL(child_rel2));
+               RelOptInfo *child_rel1;
+               RelOptInfo *child_rel2;
+               bool            rel1_empty;
+               bool            rel2_empty;
                SpecialJoinInfo *child_sjinfo;
                List       *child_restrictlist;
                RelOptInfo *child_joinrel;
@@ -1119,6 +1325,22 @@ try_partitionwise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2,
                AppendRelInfo **appinfos;
                int                     nappinfos;
 
+               if (joinrel->partbounds_merged)
+               {
+                       child_rel1 = lfirst_node(RelOptInfo, lcr1);
+                       child_rel2 = lfirst_node(RelOptInfo, lcr2);
+                       lcr1 = lnext(parts1, lcr1);
+                       lcr2 = lnext(parts2, lcr2);
+               }
+               else
+               {
+                       child_rel1 = rel1->part_rels[cnt_parts];
+                       child_rel2 = rel2->part_rels[cnt_parts];
+               }
+
+               rel1_empty = (child_rel1 == NULL || IS_DUMMY_REL(child_rel1));
+               rel2_empty = (child_rel2 == NULL || IS_DUMMY_REL(child_rel2));
+
                /*
                 * Check for cases where we can prove that this segment of the join
                 * returns no rows, due to one or both inputs being empty (including
@@ -1216,6 +1438,8 @@ try_partitionwise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2,
                                                                                                 child_sjinfo,
                                                                                                 child_sjinfo->jointype);
                        joinrel->part_rels[cnt_parts] = child_joinrel;
+                       joinrel->all_partrels = bms_add_members(joinrel->all_partrels,
+                                                                                                       child_joinrel->relids);
                }
 
                Assert(bms_equal(child_joinrel->relids, child_joinrelids));
index 484cb0c..6a0a17e 100644 (file)
@@ -194,6 +194,7 @@ SELECT * FROM settings;
  enable_gathermerge             | on        | Query Tuning / Planner Method Configuration
  enable_hashagg                 | on        | Query Tuning / Planner Method Configuration
  enable_hashjoin                | on        | Query Tuning / Planner Method Configuration
+ enable_incremental_sort        | on        | Query Tuning / Planner Method Configuration
  enable_indexonlyscan           | on        | Query Tuning / Planner Method Configuration
  enable_indexscan               | on        | Query Tuning / Planner Method Configuration
  enable_material                | on        | Query Tuning / Planner Method Configuration
@@ -207,6 +208,6 @@ SELECT * FROM settings;
  enable_seqscan                 | on        | Query Tuning / Planner Method Configuration
  enable_sort                    | on        | Query Tuning / Planner Method Configuration
  enable_tidscan                 | on        | Query Tuning / Planner Method Configuration
-(46 rows)
+(47 rows)
 
 ANALYZE;
index 1f29b25..dbcee84 100644 (file)
@@ -3069,23 +3069,23 @@ EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid =
                               QUERY PLAN                               
 -----------------------------------------------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (19 rows)
 
@@ -3094,13 +3094,13 @@ EXPLAIN (COSTS false) SELECT * FROM p1 WHERE id >= 50 AND id <= 51 AND p1.ctid =
                               QUERY PLAN                               
 -----------------------------------------------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_3
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_4
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (9 rows)
 
@@ -3117,23 +3117,23 @@ error hint:
                               QUERY PLAN                               
 -----------------------------------------------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (19 rows)
 
@@ -3146,34 +3146,34 @@ not used hint:
 duplication hint:
 error hint:
 
-                    QUERY PLAN                    
---------------------------------------------------
+                      QUERY PLAN                       
+-------------------------------------------------------
  Append
-   ->  Index Scan using p1_pkey on p1
+   ->  Index Scan using p1_pkey on p1 p1_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c1_pkey on p1_c1
+   ->  Index Scan using p1_c1_pkey on p1_c1 p1_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c2_pkey on p1_c2
+   ->  Index Scan using p1_c2_pkey on p1_c2 p1_3
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c3_pkey on p1_c3
+   ->  Index Scan using p1_c3_pkey on p1_c3 p1_4
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c4_pkey on p1_c4
+   ->  Index Scan using p1_c4_pkey on p1_c4 p1_5
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1
+   ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1 p1_6
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2
+   ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2 p1_7
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c3_c1_pkey on p1_c3_c1
+   ->  Index Scan using p1_c3_c1_pkey on p1_c3_c1 p1_8
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c3_c2_pkey on p1_c3_c2
+   ->  Index Scan using p1_c3_c2_pkey on p1_c3_c2 p1_9
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
 (28 rows)
@@ -3190,47 +3190,47 @@ error hint:
                       QUERY PLAN                       
 -------------------------------------------------------
  Append
-   ->  Bitmap Heap Scan on p1
+   ->  Bitmap Heap Scan on p1 p1_1
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c1
+   ->  Bitmap Heap Scan on p1_c1 p1_2
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c1_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c2
+   ->  Bitmap Heap Scan on p1_c2 p1_3
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c2_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c3
+   ->  Bitmap Heap Scan on p1_c3 p1_4
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c3_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c4
+   ->  Bitmap Heap Scan on p1_c4 p1_5
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c4_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c1_c1
+   ->  Bitmap Heap Scan on p1_c1_c1 p1_6
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c1_c1_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c1_c2
+   ->  Bitmap Heap Scan on p1_c1_c2 p1_7
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c1_c2_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c3_c1
+   ->  Bitmap Heap Scan on p1_c3_c1 p1_8
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c3_c1_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c3_c2
+   ->  Bitmap Heap Scan on p1_c3_c2 p1_9
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c3_c2_pkey
@@ -3249,31 +3249,31 @@ error hint:
                  QUERY PLAN                  
 ---------------------------------------------
  Append
-   ->  Tid Scan on p1
+   ->  Tid Scan on p1 p1_1
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c1
+   ->  Tid Scan on p1_c1 p1_2
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c2
+   ->  Tid Scan on p1_c2 p1_3
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c3
+   ->  Tid Scan on p1_c3 p1_4
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c4
+   ->  Tid Scan on p1_c4 p1_5
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c1_c1
+   ->  Tid Scan on p1_c1_c1 p1_6
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c1_c2
+   ->  Tid Scan on p1_c1_c2 p1_7
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c3_c1
+   ->  Tid Scan on p1_c3_c1 p1_8
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c3_c2
+   ->  Tid Scan on p1_c3_c2 p1_9
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
 (28 rows)
@@ -3291,13 +3291,13 @@ error hint:
                               QUERY PLAN                               
 -----------------------------------------------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_3
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_4
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (9 rows)
 
@@ -3310,19 +3310,19 @@ not used hint:
 duplication hint:
 error hint:
 
-                    QUERY PLAN                    
---------------------------------------------------
+                      QUERY PLAN                       
+-------------------------------------------------------
  Append
-   ->  Index Scan using p1_pkey on p1
+   ->  Index Scan using p1_pkey on p1 p1_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c1_pkey on p1_c1
+   ->  Index Scan using p1_c1_pkey on p1_c1 p1_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1
+   ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1 p1_3
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2
+   ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2 p1_4
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
 (13 rows)
@@ -3339,22 +3339,22 @@ error hint:
                       QUERY PLAN                       
 -------------------------------------------------------
  Append
-   ->  Bitmap Heap Scan on p1
+   ->  Bitmap Heap Scan on p1 p1_1
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c1
+   ->  Bitmap Heap Scan on p1_c1 p1_2
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c1_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c1_c1
+   ->  Bitmap Heap Scan on p1_c1_c1 p1_3
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c1_c1_pkey
                Index Cond: ((id >= 50) AND (id <= 51))
-   ->  Bitmap Heap Scan on p1_c1_c2
+   ->  Bitmap Heap Scan on p1_c1_c2 p1_4
          Recheck Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
          ->  Bitmap Index Scan on p1_c1_c2_pkey
@@ -3373,16 +3373,16 @@ error hint:
                  QUERY PLAN                  
 ---------------------------------------------
  Append
-   ->  Tid Scan on p1
+   ->  Tid Scan on p1 p1_1
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c1
+   ->  Tid Scan on p1_c1 p1_2
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c1_c1
+   ->  Tid Scan on p1_c1_c1 p1_3
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
-   ->  Tid Scan on p1_c1_c2
+   ->  Tid Scan on p1_c1_c2 p1_4
          TID Cond: (ctid = '(1,1)'::tid)
          Filter: ((id >= 50) AND (id <= 51))
 (13 rows)
@@ -3396,23 +3396,23 @@ EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND
    ->  Sort
          Sort Key: p1.id
          ->  Append
-               ->  Seq Scan on p1
+               ->  Seq Scan on p1 p1_1
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1
+               ->  Seq Scan on p1_c1 p1_2
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c2
+               ->  Seq Scan on p1_c2 p1_3
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c3
+               ->  Seq Scan on p1_c3 p1_4
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c4
+               ->  Seq Scan on p1_c4 p1_5
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c1
+               ->  Seq Scan on p1_c1_c1 p1_6
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c2
+               ->  Seq Scan on p1_c1_c2 p1_7
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c3_c1
+               ->  Seq Scan on p1_c3_c1 p1_8
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c3_c2
+               ->  Seq Scan on p1_c3_c2 p1_9
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
    ->  Index Scan using t1_pkey on t1
          Index Cond: (id < 10)
@@ -3427,13 +3427,13 @@ EXPLAIN (COSTS false) SELECT * FROM p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND
    ->  Sort
          Sort Key: p1.id
          ->  Append
-               ->  Seq Scan on p1
+               ->  Seq Scan on p1 p1_1
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1
+               ->  Seq Scan on p1_c1 p1_2
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c1
+               ->  Seq Scan on p1_c1_c1 p1_3
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c2
+               ->  Seq Scan on p1_c1_c2 p1_4
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
    ->  Index Scan using t1_pkey on t1
          Index Cond: (id < 10)
@@ -3456,23 +3456,23 @@ error hint:
    ->  Sort
          Sort Key: p1.id
          ->  Append
-               ->  Seq Scan on p1
+               ->  Seq Scan on p1 p1_1
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1
+               ->  Seq Scan on p1_c1 p1_2
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c2
+               ->  Seq Scan on p1_c2 p1_3
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c3
+               ->  Seq Scan on p1_c3 p1_4
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c4
+               ->  Seq Scan on p1_c4 p1_5
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c1
+               ->  Seq Scan on p1_c1_c1 p1_6
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c2
+               ->  Seq Scan on p1_c1_c2 p1_7
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c3_c1
+               ->  Seq Scan on p1_c3_c1 p1_8
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c3_c2
+               ->  Seq Scan on p1_c3_c2 p1_9
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
    ->  Index Scan using t1_pkey on t1
          Index Cond: (id < 10)
@@ -3487,37 +3487,37 @@ not used hint:
 duplication hint:
 error hint:
 
-                       QUERY PLAN                       
---------------------------------------------------------
+                         QUERY PLAN                          
+-------------------------------------------------------------
  Merge Join
    Merge Cond: (p1.id = t1.id)
    ->  Merge Append
          Sort Key: p1.id
-         ->  Index Scan using p1_pkey on p1
+         ->  Index Scan using p1_pkey on p1 p1_1
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c1_pkey on p1_c1
+         ->  Index Scan using p1_c1_pkey on p1_c1 p1_2
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c2_pkey on p1_c2
+         ->  Index Scan using p1_c2_pkey on p1_c2 p1_3
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c3_pkey on p1_c3
+         ->  Index Scan using p1_c3_pkey on p1_c3 p1_4
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c4_pkey on p1_c4
+         ->  Index Scan using p1_c4_pkey on p1_c4 p1_5
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1
+         ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1 p1_6
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2
+         ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2 p1_7
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c3_c1_pkey on p1_c3_c1
+         ->  Index Scan using p1_c3_c1_pkey on p1_c3_c1 p1_8
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c3_c2_pkey on p1_c3_c2
+         ->  Index Scan using p1_c3_c2_pkey on p1_c3_c2 p1_9
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
    ->  Index Scan using t1_pkey on t1
@@ -3540,47 +3540,47 @@ error hint:
    ->  Sort
          Sort Key: p1.id
          ->  Append
-               ->  Bitmap Heap Scan on p1
+               ->  Bitmap Heap Scan on p1 p1_1
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c1
+               ->  Bitmap Heap Scan on p1_c1 p1_2
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c1_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c2
+               ->  Bitmap Heap Scan on p1_c2 p1_3
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c2_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c3
+               ->  Bitmap Heap Scan on p1_c3 p1_4
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c3_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c4
+               ->  Bitmap Heap Scan on p1_c4 p1_5
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c4_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c1_c1
+               ->  Bitmap Heap Scan on p1_c1_c1 p1_6
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c1_c1_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c1_c2
+               ->  Bitmap Heap Scan on p1_c1_c2 p1_7
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c1_c2_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c3_c1
+               ->  Bitmap Heap Scan on p1_c3_c1 p1_8
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c3_c1_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c3_c2
+               ->  Bitmap Heap Scan on p1_c3_c2 p1_9
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c3_c2_pkey
@@ -3605,31 +3605,31 @@ error hint:
    ->  Sort
          Sort Key: p1.id
          ->  Append
-               ->  Tid Scan on p1
+               ->  Tid Scan on p1 p1_1
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c1
+               ->  Tid Scan on p1_c1 p1_2
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c2
+               ->  Tid Scan on p1_c2 p1_3
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c3
+               ->  Tid Scan on p1_c3 p1_4
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c4
+               ->  Tid Scan on p1_c4 p1_5
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c1_c1
+               ->  Tid Scan on p1_c1_c1 p1_6
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c1_c2
+               ->  Tid Scan on p1_c1_c2 p1_7
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c3_c1
+               ->  Tid Scan on p1_c3_c1 p1_8
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c3_c2
+               ->  Tid Scan on p1_c3_c2 p1_9
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
    ->  Index Scan using t1_pkey on t1
@@ -3650,23 +3650,23 @@ error hint:
  Nested Loop
    Join Filter: (p1.id = t1.id)
    ->  Append
-         ->  Seq Scan on p1
+         ->  Seq Scan on p1 p1_1
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c1
+         ->  Seq Scan on p1_c1 p1_2
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c2
+         ->  Seq Scan on p1_c2 p1_3
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c3
+         ->  Seq Scan on p1_c3 p1_4
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c4
+         ->  Seq Scan on p1_c4 p1_5
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c1_c1
+         ->  Seq Scan on p1_c1_c1 p1_6
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c1_c2
+         ->  Seq Scan on p1_c1_c2 p1_7
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c3_c1
+         ->  Seq Scan on p1_c3_c1 p1_8
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c3_c2
+         ->  Seq Scan on p1_c3_c2 p1_9
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
    ->  Materialize
          ->  Index Scan using t1_pkey on t1
@@ -3689,23 +3689,23 @@ error hint:
    ->  Sort
          Sort Key: p1.id
          ->  Append
-               ->  Seq Scan on p1
+               ->  Seq Scan on p1 p1_1
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1
+               ->  Seq Scan on p1_c1 p1_2
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c2
+               ->  Seq Scan on p1_c2 p1_3
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c3
+               ->  Seq Scan on p1_c3 p1_4
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c4
+               ->  Seq Scan on p1_c4 p1_5
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c1
+               ->  Seq Scan on p1_c1_c1 p1_6
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c2
+               ->  Seq Scan on p1_c1_c2 p1_7
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c3_c1
+               ->  Seq Scan on p1_c3_c1 p1_8
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c3_c2
+               ->  Seq Scan on p1_c3_c2 p1_9
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
    ->  Index Scan using t1_pkey on t1
          Index Cond: (id < 10)
@@ -3725,23 +3725,23 @@ error hint:
  Hash Join
    Hash Cond: (p1.id = t1.id)
    ->  Append
-         ->  Seq Scan on p1
+         ->  Seq Scan on p1 p1_1
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c1
+         ->  Seq Scan on p1_c1 p1_2
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c2
+         ->  Seq Scan on p1_c2 p1_3
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c3
+         ->  Seq Scan on p1_c3 p1_4
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c4
+         ->  Seq Scan on p1_c4 p1_5
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c1_c1
+         ->  Seq Scan on p1_c1_c1 p1_6
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c1_c2
+         ->  Seq Scan on p1_c1_c2 p1_7
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c3_c1
+         ->  Seq Scan on p1_c3_c1 p1_8
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-         ->  Seq Scan on p1_c3_c2
+         ->  Seq Scan on p1_c3_c2 p1_9
                Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
    ->  Hash
          ->  Index Scan using t1_pkey on t1
@@ -3765,13 +3765,13 @@ error hint:
    ->  Sort
          Sort Key: p1.id
          ->  Append
-               ->  Seq Scan on p1
+               ->  Seq Scan on p1 p1_1
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1
+               ->  Seq Scan on p1_c1 p1_2
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c1
+               ->  Seq Scan on p1_c1_c1 p1_3
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c2
+               ->  Seq Scan on p1_c1_c2 p1_4
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
    ->  Index Scan using t1_pkey on t1
          Index Cond: (id < 10)
@@ -3786,22 +3786,22 @@ not used hint:
 duplication hint:
 error hint:
 
-                       QUERY PLAN                       
---------------------------------------------------------
+                         QUERY PLAN                          
+-------------------------------------------------------------
  Merge Join
    Merge Cond: (p1.id = t1.id)
    ->  Merge Append
          Sort Key: p1.id
-         ->  Index Scan using p1_pkey on p1
+         ->  Index Scan using p1_pkey on p1 p1_1
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c1_pkey on p1_c1
+         ->  Index Scan using p1_c1_pkey on p1_c1 p1_2
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1
+         ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1 p1_3
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
-         ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2
+         ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2 p1_4
                Index Cond: ((id >= 50) AND (id <= 51))
                Filter: (ctid = '(1,1)'::tid)
    ->  Index Scan using t1_pkey on t1
@@ -3824,22 +3824,22 @@ error hint:
    ->  Sort
          Sort Key: p1.id
          ->  Append
-               ->  Bitmap Heap Scan on p1
+               ->  Bitmap Heap Scan on p1 p1_1
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c1
+               ->  Bitmap Heap Scan on p1_c1 p1_2
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c1_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c1_c1
+               ->  Bitmap Heap Scan on p1_c1_c1 p1_3
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c1_c1_pkey
                            Index Cond: ((id >= 50) AND (id <= 51))
-               ->  Bitmap Heap Scan on p1_c1_c2
+               ->  Bitmap Heap Scan on p1_c1_c2 p1_4
                      Recheck Cond: ((id >= 50) AND (id <= 51))
                      Filter: (ctid = '(1,1)'::tid)
                      ->  Bitmap Index Scan on p1_c1_c2_pkey
@@ -3864,16 +3864,16 @@ error hint:
    ->  Sort
          Sort Key: p1.id
          ->  Append
-               ->  Tid Scan on p1
+               ->  Tid Scan on p1 p1_1
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c1
+               ->  Tid Scan on p1_c1 p1_2
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c1_c1
+               ->  Tid Scan on p1_c1_c1 p1_3
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
-               ->  Tid Scan on p1_c1_c2
+               ->  Tid Scan on p1_c1_c2 p1_4
                      TID Cond: (ctid = '(1,1)'::tid)
                      Filter: ((id >= 50) AND (id <= 51))
    ->  Index Scan using t1_pkey on t1
@@ -3897,13 +3897,13 @@ error hint:
          Index Cond: (id < 10)
    ->  Materialize
          ->  Append
-               ->  Seq Scan on p1
+               ->  Seq Scan on p1 p1_1
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1
+               ->  Seq Scan on p1_c1 p1_2
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c1
+               ->  Seq Scan on p1_c1_c1 p1_3
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c2
+               ->  Seq Scan on p1_c1_c2 p1_4
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (14 rows)
 
@@ -3923,13 +3923,13 @@ error hint:
    ->  Sort
          Sort Key: p1.id
          ->  Append
-               ->  Seq Scan on p1
+               ->  Seq Scan on p1 p1_1
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1
+               ->  Seq Scan on p1_c1 p1_2
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c1
+               ->  Seq Scan on p1_c1_c1 p1_3
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c2
+               ->  Seq Scan on p1_c1_c2 p1_4
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
    ->  Index Scan using t1_pkey on t1
          Index Cond: (id < 10)
@@ -3952,13 +3952,13 @@ error hint:
          Index Cond: (id < 10)
    ->  Hash
          ->  Append
-               ->  Seq Scan on p1
+               ->  Seq Scan on p1 p1_1
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1
+               ->  Seq Scan on p1_c1 p1_2
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c1
+               ->  Seq Scan on p1_c1_c1 p1_3
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-               ->  Seq Scan on p1_c1_c2
+               ->  Seq Scan on p1_c1_c2 p1_4
                      Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (14 rows)
 
@@ -6515,13 +6515,13 @@ EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid =
                               QUERY PLAN                               
 -----------------------------------------------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1
+   ->  Seq Scan on p2_c1 p2_2
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c1
+   ->  Seq Scan on p2_c1_c1 p2_3
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c2
+   ->  Seq Scan on p2_c1_c2 p2_4
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (9 rows)
 
@@ -6538,19 +6538,19 @@ not used hint:
 duplication hint:
 error hint:
 
-                    QUERY PLAN                    
---------------------------------------------------
+                      QUERY PLAN                       
+-------------------------------------------------------
  Append
-   ->  Index Scan using p2_pkey on p2
+   ->  Index Scan using p2_pkey on p2 p2_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_pkey on p2_c1
+   ->  Index Scan using p2_c1_pkey on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1
+   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1 p2_3
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2
+   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2 p2_4
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
 (13 rows)
@@ -6568,19 +6568,19 @@ not used hint:
 duplication hint:
 error hint:
 
-                       QUERY PLAN                       
---------------------------------------------------------
+                         QUERY PLAN                          
+-------------------------------------------------------------
  Append
-   ->  Index Scan using p2_id_val_idx on p2
+   ->  Index Scan using p2_id_val_idx on p2 p2_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_id_val_idx on p2_c1
+   ->  Index Scan using p2_c1_id_val_idx on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1
+   ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1 p2_3
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2
+   ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2 p2_4
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
 (13 rows)
@@ -6598,19 +6598,19 @@ not used hint:
 duplication hint:
 error hint:
 
-                       QUERY PLAN                       
---------------------------------------------------------
+                         QUERY PLAN                          
+-------------------------------------------------------------
  Append
-   ->  Index Scan using p2_val_id_idx on p2
+   ->  Index Scan using p2_val_id_idx on p2 p2_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_val_id_idx on p2_c1
+   ->  Index Scan using p2_c1_val_id_idx on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c1_val_id_idx on p2_c1_c1
+   ->  Index Scan using p2_c1_c1_val_id_idx on p2_c1_c1 p2_3
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c2_val_id_idx on p2_c1_c2
+   ->  Index Scan using p2_c1_c2_val_id_idx on p2_c1_c2 p2_4
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
 (13 rows)
@@ -6619,23 +6619,23 @@ EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p
                                        QUERY PLAN                                        
 -----------------------------------------------------------------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1
+   ->  Seq Scan on p2_c1 p2_2
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c2
+   ->  Seq Scan on p2_c2 p2_3
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3
+   ->  Seq Scan on p2_c3 p2_4
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c4
+   ->  Seq Scan on p2_c4 p2_5
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c1
+   ->  Seq Scan on p2_c1_c1 p2_6
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c2
+   ->  Seq Scan on p2_c1_c2 p2_7
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3_c1
+   ->  Seq Scan on p2_c3_c1 p2_8
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3_c2
+   ->  Seq Scan on p2_c3_c2 p2_9
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
 (19 rows)
 
@@ -6662,23 +6662,23 @@ error hint:
                                        QUERY PLAN                                        
 -----------------------------------------------------------------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1
+   ->  Seq Scan on p2_c1 p2_2
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c2
+   ->  Seq Scan on p2_c2 p2_3
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3
+   ->  Seq Scan on p2_c3 p2_4
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c4
+   ->  Seq Scan on p2_c4 p2_5
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c1
+   ->  Seq Scan on p2_c1_c1 p2_6
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c2
+   ->  Seq Scan on p2_c1_c2 p2_7
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3_c1
+   ->  Seq Scan on p2_c3_c1 p2_8
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3_c2
+   ->  Seq Scan on p2_c3_c2 p2_9
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
 (19 rows)
 
@@ -6695,19 +6695,19 @@ not used hint:
 duplication hint:
 error hint:
 
-                    QUERY PLAN                    
---------------------------------------------------
+                      QUERY PLAN                       
+-------------------------------------------------------
  Append
-   ->  Index Scan using p2_pkey on p2
+   ->  Index Scan using p2_pkey on p2 p2_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_pkey on p2_c1
+   ->  Index Scan using p2_c1_pkey on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1
+   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1 p2_3
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2
+   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2 p2_4
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
 (13 rows)
@@ -6728,15 +6728,15 @@ error hint:
                               QUERY PLAN                               
 -----------------------------------------------------------------------
  Append
-   ->  Index Scan using p2_id2_val on p2
+   ->  Index Scan using p2_id2_val on p2 p2_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_id2_val on p2_c1
+   ->  Index Scan using p2_c1_id2_val on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Seq Scan on p2_c1_c1
+   ->  Seq Scan on p2_c1_c1 p2_3
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c2
+   ->  Seq Scan on p2_c1_c2 p2_4
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (11 rows)
 
@@ -6756,14 +6756,14 @@ error hint:
                               QUERY PLAN                               
 -----------------------------------------------------------------------
  Append
-   ->  Index Scan using p2_val2_id on p2
+   ->  Index Scan using p2_val2_id on p2 p2_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Seq Scan on p2_c1
+   ->  Seq Scan on p2_c1 p2_2
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c1
+   ->  Seq Scan on p2_c1_c1 p2_3
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c2
+   ->  Seq Scan on p2_c1_c2 p2_4
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (10 rows)
 
@@ -6780,19 +6780,19 @@ not used hint:
 duplication hint:
 error hint:
 
-                    QUERY PLAN                    
---------------------------------------------------
+                      QUERY PLAN                       
+-------------------------------------------------------
  Append
-   ->  Index Scan using p2_pkey on p2
+   ->  Index Scan using p2_pkey on p2 p2_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_pkey on p2_c1
+   ->  Index Scan using p2_c1_pkey on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1
+   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1 p2_3
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2
+   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2 p2_4
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
 (13 rows)
@@ -6813,14 +6813,14 @@ error hint:
                               QUERY PLAN                               
 -----------------------------------------------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Index Scan using p2_c1_id_val_idx on p2_c1
+   ->  Index Scan using p2_c1_id_val_idx on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Seq Scan on p2_c1_c1
+   ->  Seq Scan on p2_c1_c1 p2_3
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c2
+   ->  Seq Scan on p2_c1_c2 p2_4
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (10 rows)
 
@@ -6840,13 +6840,13 @@ error hint:
                               QUERY PLAN                               
 -----------------------------------------------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1
+   ->  Seq Scan on p2_c1 p2_2
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c1
+   ->  Seq Scan on p2_c1_c1 p2_3
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c2
+   ->  Seq Scan on p2_c1_c2 p2_4
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (9 rows)
 
@@ -6863,19 +6863,19 @@ not used hint:
 duplication hint:
 error hint:
 
-                    QUERY PLAN                    
---------------------------------------------------
+                      QUERY PLAN                       
+-------------------------------------------------------
  Append
-   ->  Index Scan using p2_pkey on p2
+   ->  Index Scan using p2_pkey on p2 p2_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_id_val_idx on p2_c1
+   ->  Index Scan using p2_c1_id_val_idx on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1
+   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1 p2_3
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2
+   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2 p2_4
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
 (13 rows)
@@ -6893,19 +6893,19 @@ not used hint:
 duplication hint:
 error hint:
 
-                    QUERY PLAN                    
---------------------------------------------------
+                      QUERY PLAN                       
+-------------------------------------------------------
  Append
-   ->  Index Scan using p2_pkey on p2
+   ->  Index Scan using p2_pkey on p2 p2_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_pkey on p2_c1
+   ->  Index Scan using p2_c1_pkey on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1
+   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1 p2_3
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2
+   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2 p2_4
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
 (13 rows)
@@ -6926,14 +6926,14 @@ error hint:
                               QUERY PLAN                               
 -----------------------------------------------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Index Scan using p2_c1_id_val_idx on p2_c1
+   ->  Index Scan using p2_c1_id_val_idx on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Seq Scan on p2_c1_c1
+   ->  Seq Scan on p2_c1_c1 p2_3
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c2
+   ->  Seq Scan on p2_c1_c2 p2_4
          Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
 (10 rows)
 
@@ -6950,19 +6950,19 @@ not used hint:
 duplication hint:
 error hint:
 
-                    QUERY PLAN                    
---------------------------------------------------
+                      QUERY PLAN                       
+-------------------------------------------------------
  Append
-   ->  Index Scan using p2_pkey on p2
+   ->  Index Scan using p2_pkey on p2 p2_1
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_id_val_idx on p2_c1
+   ->  Index Scan using p2_c1_id_val_idx on p2_c1 p2_2
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1
+   ->  Index Scan using p2_c1_c1_pkey on p2_c1_c1 p2_3
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2
+   ->  Index Scan using p2_c1_c2_pkey on p2_c1_c2 p2_4
          Index Cond: ((id >= 50) AND (id <= 51))
          Filter: (ctid = '(1,1)'::tid)
 (13 rows)
@@ -6988,31 +6988,31 @@ error hint:
                             QUERY PLAN                             
 -------------------------------------------------------------------
  Append
-   ->  Index Scan using p2_val_idx on p2
+   ->  Index Scan using p2_val_idx on p2 p2_1
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_val_idx on p2_c1
+   ->  Index Scan using p2_c1_val_idx on p2_c1 p2_2
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c2_val_idx on p2_c2
+   ->  Index Scan using p2_c2_val_idx on p2_c2 p2_3
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c3_val_idx on p2_c3
+   ->  Index Scan using p2_c3_val_idx on p2_c3 p2_4
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c4_val_idx on p2_c4
+   ->  Index Scan using p2_c4_val_idx on p2_c4 p2_5
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c1_val_idx on p2_c1_c1
+   ->  Index Scan using p2_c1_c1_val_idx on p2_c1_c1 p2_6
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c2_val_idx on p2_c1_c2
+   ->  Index Scan using p2_c1_c2_val_idx on p2_c1_c2 p2_7
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c3_c1_val_idx on p2_c3_c1
+   ->  Index Scan using p2_c3_c1_val_idx on p2_c3_c1 p2_8
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c3_c2_val_idx on p2_c3_c2
+   ->  Index Scan using p2_c3_c2_val_idx on p2_c3_c2 p2_9
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
 (28 rows)
@@ -7038,23 +7038,23 @@ error hint:
                                        QUERY PLAN                                        
 -----------------------------------------------------------------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1
+   ->  Seq Scan on p2_c1 p2_2
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c2
+   ->  Seq Scan on p2_c2 p2_3
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3
+   ->  Seq Scan on p2_c3 p2_4
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c4
+   ->  Seq Scan on p2_c4 p2_5
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c1
+   ->  Seq Scan on p2_c1_c1 p2_6
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c2
+   ->  Seq Scan on p2_c1_c2 p2_7
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3_c1
+   ->  Seq Scan on p2_c3_c1 p2_8
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3_c2
+   ->  Seq Scan on p2_c3_c2 p2_9
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
 (19 rows)
 
@@ -7079,23 +7079,23 @@ error hint:
                                        QUERY PLAN                                        
 -----------------------------------------------------------------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1
+   ->  Seq Scan on p2_c1 p2_2
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c2
+   ->  Seq Scan on p2_c2 p2_3
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3
+   ->  Seq Scan on p2_c3 p2_4
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c4
+   ->  Seq Scan on p2_c4 p2_5
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c1
+   ->  Seq Scan on p2_c1_c1 p2_6
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c1_c2
+   ->  Seq Scan on p2_c1_c2 p2_7
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3_c1
+   ->  Seq Scan on p2_c3_c1 p2_8
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
-   ->  Seq Scan on p2_c3_c2
+   ->  Seq Scan on p2_c3_c2 p2_9
          Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
 (19 rows)
 
@@ -7120,31 +7120,31 @@ error hint:
                             QUERY PLAN                             
 -------------------------------------------------------------------
  Append
-   ->  Index Scan using p2_val_idx on p2
+   ->  Index Scan using p2_val_idx on p2 p2_1
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_val_idx on p2_c1
+   ->  Index Scan using p2_c1_val_idx on p2_c1 p2_2
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c2_val_idx on p2_c2
+   ->  Index Scan using p2_c2_val_idx on p2_c2 p2_3
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c3_val_idx on p2_c3
+   ->  Index Scan using p2_c3_val_idx on p2_c3 p2_4
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c4_val_idx on p2_c4
+   ->  Index Scan using p2_c4_val_idx on p2_c4 p2_5
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c1_val_idx on p2_c1_c1
+   ->  Index Scan using p2_c1_c1_val_idx on p2_c1_c1 p2_6
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c1_c2_val_idx on p2_c1_c2
+   ->  Index Scan using p2_c1_c2_val_idx on p2_c1_c2 p2_7
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c3_c1_val_idx on p2_c3_c1
+   ->  Index Scan using p2_c3_c1_val_idx on p2_c3_c1 p2_8
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
-   ->  Index Scan using p2_c3_c2_val_idx on p2_c3_c2
+   ->  Index Scan using p2_c3_c2_val_idx on p2_c3_c2 p2_9
          Index Cond: ((val >= '50'::text) AND (val <= '51'::text))
          Filter: (ctid = '(1,1)'::tid)
 (28 rows)
@@ -7404,26 +7404,26 @@ error hint:
 
 -- Inheritance
 EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1;
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: (val = 1)
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: (val = 1)
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: (val = 1)
 (19 rows)
 
@@ -7445,26 +7445,26 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: (val = 1)
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: (val = 1)
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: (val = 1)
 (19 rows)
 
@@ -7486,26 +7486,26 @@ not used hint:
 duplication hint:
 error hint:
 
-                    QUERY PLAN                    
---------------------------------------------------
+                      QUERY PLAN                       
+-------------------------------------------------------
  Append
-   ->  Index Scan using p1_val2 on p1
+   ->  Index Scan using p1_val2 on p1 p1_1
          Index Cond: (val = 1)
-   ->  Index Scan using p1_c1_val2 on p1_c1
+   ->  Index Scan using p1_c1_val2 on p1_c1 p1_2
          Index Cond: (val = 1)
-   ->  Index Scan using p1_c2_val2 on p1_c2
+   ->  Index Scan using p1_c2_val2 on p1_c2 p1_3
          Index Cond: (val = 1)
-   ->  Index Scan using p1_c3_val2 on p1_c3
+   ->  Index Scan using p1_c3_val2 on p1_c3 p1_4
          Index Cond: (val = 1)
-   ->  Index Scan using p1_c4_val2 on p1_c4
+   ->  Index Scan using p1_c4_val2 on p1_c4 p1_5
          Index Cond: (val = 1)
-   ->  Index Scan using p1_c1_c1_val2 on p1_c1_c1
+   ->  Index Scan using p1_c1_c1_val2 on p1_c1_c1 p1_6
          Index Cond: (val = 1)
-   ->  Index Scan using p1_c1_c2_val2 on p1_c1_c2
+   ->  Index Scan using p1_c1_c2_val2 on p1_c1_c2 p1_7
          Index Cond: (val = 1)
-   ->  Index Scan using p1_c3_c1_val2 on p1_c3_c1
+   ->  Index Scan using p1_c3_c1_val2 on p1_c3_c1 p1_8
          Index Cond: (val = 1)
-   ->  Index Scan using p1_c3_c2_val2 on p1_c3_c2
+   ->  Index Scan using p1_c3_c2_val2 on p1_c3_c2 p1_9
          Index Cond: (val = 1)
 (19 rows)
 
@@ -7527,26 +7527,26 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: (val = 1)
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: (val = 1)
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: (val = 1)
 (19 rows)
 
@@ -7568,26 +7568,26 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: (val = 1)
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: (val = 1)
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: (val = 1)
 (19 rows)
 
@@ -7609,26 +7609,26 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: (val = 1)
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: (val = 1)
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: (val = 1)
 (19 rows)
 
@@ -7650,26 +7650,26 @@ not used hint:
 duplication hint:
 error hint:
 
-                      QUERY PLAN                       
--------------------------------------------------------
+                         QUERY PLAN                         
+------------------------------------------------------------
  Append
-   ->  Index Only Scan using p1_val2 on p1
+   ->  Index Only Scan using p1_val2 on p1 p1_1
          Index Cond: (val = 1)
-   ->  Index Only Scan using p1_c1_val2 on p1_c1
+   ->  Index Only Scan using p1_c1_val2 on p1_c1 p1_2
          Index Cond: (val = 1)
-   ->  Index Only Scan using p1_c2_val2 on p1_c2
+   ->  Index Only Scan using p1_c2_val2 on p1_c2 p1_3
          Index Cond: (val = 1)
-   ->  Index Only Scan using p1_c3_val2 on p1_c3
+   ->  Index Only Scan using p1_c3_val2 on p1_c3 p1_4
          Index Cond: (val = 1)
-   ->  Index Only Scan using p1_c4_val2 on p1_c4
+   ->  Index Only Scan using p1_c4_val2 on p1_c4 p1_5
          Index Cond: (val = 1)
-   ->  Index Only Scan using p1_c1_c1_val2 on p1_c1_c1
+   ->  Index Only Scan using p1_c1_c1_val2 on p1_c1_c1 p1_6
          Index Cond: (val = 1)
-   ->  Index Only Scan using p1_c1_c2_val2 on p1_c1_c2
+   ->  Index Only Scan using p1_c1_c2_val2 on p1_c1_c2 p1_7
          Index Cond: (val = 1)
-   ->  Index Only Scan using p1_c3_c1_val2 on p1_c3_c1
+   ->  Index Only Scan using p1_c3_c1_val2 on p1_c3_c1 p1_8
          Index Cond: (val = 1)
-   ->  Index Only Scan using p1_c3_c2_val2 on p1_c3_c2
+   ->  Index Only Scan using p1_c3_c2_val2 on p1_c3_c2 p1_9
          Index Cond: (val = 1)
 (19 rows)
 
@@ -7691,26 +7691,26 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: (val = 1)
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: (val = 1)
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: (val = 1)
 (19 rows)
 
@@ -7732,26 +7732,26 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: (val = 1)
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: (val = 1)
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: (val = 1)
 (19 rows)
 
@@ -7773,26 +7773,26 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: (val = 1)
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: (val = 1)
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: (val = 1)
 (19 rows)
 
@@ -7817,39 +7817,39 @@ error hint:
                    QUERY PLAN                   
 ------------------------------------------------
  Append
-   ->  Bitmap Heap Scan on p1
+   ->  Bitmap Heap Scan on p1 p1_1
          Recheck Cond: (val = 1)
          ->  Bitmap Index Scan on p1_val2
                Index Cond: (val = 1)
-   ->  Bitmap Heap Scan on p1_c1
+   ->  Bitmap Heap Scan on p1_c1 p1_2
          Recheck Cond: (val = 1)
          ->  Bitmap Index Scan on p1_c1_val2
                Index Cond: (val = 1)
-   ->  Bitmap Heap Scan on p1_c2
+   ->  Bitmap Heap Scan on p1_c2 p1_3
          Recheck Cond: (val = 1)
          ->  Bitmap Index Scan on p1_c2_val2
                Index Cond: (val = 1)
-   ->  Bitmap Heap Scan on p1_c3
+   ->  Bitmap Heap Scan on p1_c3 p1_4
          Recheck Cond: (val = 1)
          ->  Bitmap Index Scan on p1_c3_val2
                Index Cond: (val = 1)
-   ->  Bitmap Heap Scan on p1_c4
+   ->  Bitmap Heap Scan on p1_c4 p1_5
          Recheck Cond: (val = 1)
          ->  Bitmap Index Scan on p1_c4_val2
                Index Cond: (val = 1)
-   ->  Bitmap Heap Scan on p1_c1_c1
+   ->  Bitmap Heap Scan on p1_c1_c1 p1_6
          Recheck Cond: (val = 1)
          ->  Bitmap Index Scan on p1_c1_c1_val2
                Index Cond: (val = 1)
-   ->  Bitmap Heap Scan on p1_c1_c2
+   ->  Bitmap Heap Scan on p1_c1_c2 p1_7
          Recheck Cond: (val = 1)
          ->  Bitmap Index Scan on p1_c1_c2_val2
                Index Cond: (val = 1)
-   ->  Bitmap Heap Scan on p1_c3_c1
+   ->  Bitmap Heap Scan on p1_c3_c1 p1_8
          Recheck Cond: (val = 1)
          ->  Bitmap Index Scan on p1_c3_c1_val2
                Index Cond: (val = 1)
-   ->  Bitmap Heap Scan on p1_c3_c2
+   ->  Bitmap Heap Scan on p1_c3_c2 p1_9
          Recheck Cond: (val = 1)
          ->  Bitmap Index Scan on p1_c3_c2_val2
                Index Cond: (val = 1)
@@ -7873,26 +7873,26 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: (val = 1)
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: (val = 1)
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: (val = 1)
 (19 rows)
 
@@ -7914,26 +7914,26 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1
+   ->  Seq Scan on p1_c1 p1_2
          Filter: (val = 1)
-   ->  Seq Scan on p1_c2
+   ->  Seq Scan on p1_c2 p1_3
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3
+   ->  Seq Scan on p1_c3 p1_4
          Filter: (val = 1)
-   ->  Seq Scan on p1_c4
+   ->  Seq Scan on p1_c4 p1_5
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c1
+   ->  Seq Scan on p1_c1_c1 p1_6
          Filter: (val = 1)
-   ->  Seq Scan on p1_c1_c2
+   ->  Seq Scan on p1_c1_c2 p1_7
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c1
+   ->  Seq Scan on p1_c3_c1 p1_8
          Filter: (val = 1)
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c3_c2 p1_9
          Filter: (val = 1)
 (19 rows)
 
@@ -8392,47 +8392,47 @@ SELECT relname, seq_scan, idx_scan FROM pg_stat_user_tables WHERE schemaname = '
 EXPLAIN (COSTS off) SELECT val FROM p1 WHERE val < 1000
 UNION ALL
 SELECT val::int FROM p2 WHERE id < 1000;
-               QUERY PLAN                
------------------------------------------
+                 QUERY PLAN                  
+---------------------------------------------
  Append
    ->  Append
-         ->  Seq Scan on p1
+         ->  Seq Scan on p1 p1_1
                Filter: (val < 1000)
-         ->  Seq Scan on p1_c1
+         ->  Seq Scan on p1_c1 p1_2
                Filter: (val < 1000)
-         ->  Seq Scan on p1_c2
+         ->  Seq Scan on p1_c2 p1_3
                Filter: (val < 1000)
-         ->  Seq Scan on p1_c3
+         ->  Seq Scan on p1_c3 p1_4
                Filter: (val < 1000)
-         ->  Seq Scan on p1_c4
+         ->  Seq Scan on p1_c4 p1_5
                Filter: (val < 1000)
-         ->  Seq Scan on p1_c1_c1
+         ->  Seq Scan on p1_c1_c1 p1_6
                Filter: (val < 1000)
-         ->  Seq Scan on p1_c1_c2
+         ->  Seq Scan on p1_c1_c2 p1_7
                Filter: (val < 1000)
-         ->  Seq Scan on p1_c3_c1
+         ->  Seq Scan on p1_c3_c1 p1_8
                Filter: (val < 1000)
-         ->  Seq Scan on p1_c3_c2
+         ->  Seq Scan on p1_c3_c2 p1_9
                Filter: (val < 1000)
    ->  Result
          ->  Append
-               ->  Seq Scan on p2
+               ->  Seq Scan on p2 p2_1
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c1
+               ->  Seq Scan on p2_c1 p2_2
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c2
+               ->  Seq Scan on p2_c2 p2_3
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c3
+               ->  Seq Scan on p2_c3 p2_4
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c4
+               ->  Seq Scan on p2_c4 p2_5
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c1_c1
+               ->  Seq Scan on p2_c1_c1 p2_6
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c1_c2
+               ->  Seq Scan on p2_c1_c2 p2_7
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c3_c1
+               ->  Seq Scan on p2_c3_c1 p2_8
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c3_c2
+               ->  Seq Scan on p2_c3_c2 p2_9
                      Filter: (id < 1000)
 (40 rows)
 
@@ -8456,47 +8456,47 @@ not used hint:
 duplication hint:
 error hint:
 
-                       QUERY PLAN                       
---------------------------------------------------------
+                         QUERY PLAN                          
+-------------------------------------------------------------
  Append
    ->  Append
-         ->  Index Scan using p1_val3 on p1
+         ->  Index Scan using p1_val3 on p1 p1_1
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c1_val3 on p1_c1
+         ->  Index Scan using p1_c1_val3 on p1_c1 p1_2
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c2_val3 on p1_c2
+         ->  Index Scan using p1_c2_val3 on p1_c2 p1_3
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c3_val3 on p1_c3
+         ->  Index Scan using p1_c3_val3 on p1_c3 p1_4
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c4_val3 on p1_c4
+         ->  Index Scan using p1_c4_val3 on p1_c4 p1_5
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c1_c1_val3 on p1_c1_c1
+         ->  Index Scan using p1_c1_c1_val3 on p1_c1_c1 p1_6
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c1_c2_val3 on p1_c1_c2
+         ->  Index Scan using p1_c1_c2_val3 on p1_c1_c2 p1_7
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c3_c1_val3 on p1_c3_c1
+         ->  Index Scan using p1_c3_c1_val3 on p1_c3_c1 p1_8
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c3_c2_val3 on p1_c3_c2
+         ->  Index Scan using p1_c3_c2_val3 on p1_c3_c2 p1_9
                Index Cond: (val < 1000)
    ->  Result
          ->  Append
-               ->  Seq Scan on p2
+               ->  Seq Scan on p2 p2_1
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c1
+               ->  Seq Scan on p2_c1 p2_2
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c2
+               ->  Seq Scan on p2_c2 p2_3
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c3
+               ->  Seq Scan on p2_c3 p2_4
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c4
+               ->  Seq Scan on p2_c4 p2_5
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c1_c1
+               ->  Seq Scan on p2_c1_c1 p2_6
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c1_c2
+               ->  Seq Scan on p2_c1_c2 p2_7
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c3_c1
+               ->  Seq Scan on p2_c3_c1 p2_8
                      Filter: (id < 1000)
-               ->  Seq Scan on p2_c3_c2
+               ->  Seq Scan on p2_c3_c2 p2_9
                      Filter: (id < 1000)
 (40 rows)
 
@@ -8530,47 +8530,47 @@ not used hint:
 duplication hint:
 error hint:
 
-                             QUERY PLAN                             
---------------------------------------------------------------------
+                               QUERY PLAN                                
+-------------------------------------------------------------------------
  Append
    ->  Append
-         ->  Index Scan using p1_val3 on p1
+         ->  Index Scan using p1_val3 on p1 p1_1
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c1_val3 on p1_c1
+         ->  Index Scan using p1_c1_val3 on p1_c1 p1_2
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c2_val3 on p1_c2
+         ->  Index Scan using p1_c2_val3 on p1_c2 p1_3
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c3_val3 on p1_c3
+         ->  Index Scan using p1_c3_val3 on p1_c3 p1_4
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c4_val3 on p1_c4
+         ->  Index Scan using p1_c4_val3 on p1_c4 p1_5
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c1_c1_val3 on p1_c1_c1
+         ->  Index Scan using p1_c1_c1_val3 on p1_c1_c1 p1_6
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c1_c2_val3 on p1_c1_c2
+         ->  Index Scan using p1_c1_c2_val3 on p1_c1_c2 p1_7
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c3_c1_val3 on p1_c3_c1
+         ->  Index Scan using p1_c3_c1_val3 on p1_c3_c1 p1_8
                Index Cond: (val < 1000)
-         ->  Index Scan using p1_c3_c2_val3 on p1_c3_c2
+         ->  Index Scan using p1_c3_c2_val3 on p1_c3_c2 p1_9
                Index Cond: (val < 1000)
    ->  Result
          ->  Append
-               ->  Index Scan using p2_id_val_idx on p2
+               ->  Index Scan using p2_id_val_idx on p2 p2_1
                      Index Cond: (id < 1000)
-               ->  Index Scan using p2_c1_id_val_idx on p2_c1
+               ->  Index Scan using p2_c1_id_val_idx on p2_c1 p2_2
                      Index Cond: (id < 1000)
-               ->  Index Scan using p2_c2_id_val_idx on p2_c2
+               ->  Index Scan using p2_c2_id_val_idx on p2_c2 p2_3
                      Index Cond: (id < 1000)
-               ->  Index Scan using p2_c3_id_val_idx on p2_c3
+               ->  Index Scan using p2_c3_id_val_idx on p2_c3 p2_4
                      Index Cond: (id < 1000)
-               ->  Index Scan using p2_c4_id_val_idx on p2_c4
+               ->  Index Scan using p2_c4_id_val_idx on p2_c4 p2_5
                      Index Cond: (id < 1000)
-               ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1
+               ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1 p2_6
                      Index Cond: (id < 1000)
-               ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2
+               ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2 p2_7
                      Index Cond: (id < 1000)
-               ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1
+               ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1 p2_8
                      Index Cond: (id < 1000)
-               ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2
+               ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2 p2_9
                      Index Cond: (id < 1000)
 (40 rows)
 
@@ -8578,49 +8578,49 @@ error hint:
 EXPLAIN (COSTS off) SELECT val FROM p1 WHERE val < 1000
 UNION
 SELECT val::int FROM p2 WHERE id < 1000;
-                  QUERY PLAN                   
------------------------------------------------
+                    QUERY PLAN                     
+---------------------------------------------------
  HashAggregate
    Group Key: p1.val
    ->  Append
          ->  Append
-               ->  Seq Scan on p1
+               ->  Seq Scan on p1 p1_1
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c1
+               ->  Seq Scan on p1_c1 p1_2
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c2
+               ->  Seq Scan on p1_c2 p1_3
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c3
+               ->  Seq Scan on p1_c3 p1_4
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c4
+               ->  Seq Scan on p1_c4 p1_5
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c1_c1
+               ->  Seq Scan on p1_c1_c1 p1_6
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c1_c2
+               ->  Seq Scan on p1_c1_c2 p1_7
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c3_c1
+               ->  Seq Scan on p1_c3_c1 p1_8
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c3_c2
+               ->  Seq Scan on p1_c3_c2 p1_9
                      Filter: (val < 1000)
          ->  Result
                ->  Append
-                     ->  Seq Scan on p2
+                     ->  Seq Scan on p2 p2_1
                            Filter: (id < 1000)
-                     ->  Seq Scan on p2_c1
+                     ->  Seq Scan on p2_c1 p2_2
                            Filter: (id < 1000)
-                     ->  Seq Scan on p2_c2
+                     ->  Seq Scan on p2_c2 p2_3
                            Filter: (id < 1000)
-                     ->  Seq Scan on p2_c3
+                     ->  Seq Scan on p2_c3 p2_4
                            Filter: (id < 1000)
-                     ->  Seq Scan on p2_c4
+                     ->  Seq Scan on p2_c4 p2_5
                            Filter: (id < 1000)
-                     ->  Seq Scan on p2_c1_c1
+                     ->  Seq Scan on p2_c1_c1 p2_6
                            Filter: (id < 1000)
-                     ->  Seq Scan on p2_c1_c2
+                     ->  Seq Scan on p2_c1_c2 p2_7
                            Filter: (id < 1000)
-                     ->  Seq Scan on p2_c3_c1
+                     ->  Seq Scan on p2_c3_c1 p2_8
                            Filter: (id < 1000)
-                     ->  Seq Scan on p2_c3_c2
+                     ->  Seq Scan on p2_c3_c2 p2_9
                            Filter: (id < 1000)
 (42 rows)
 
@@ -8644,49 +8644,49 @@ not used hint:
 duplication hint:
 error hint:
 
-                                QUERY PLAN                                
---------------------------------------------------------------------------
+                                  QUERY PLAN                                   
+-------------------------------------------------------------------------------
  HashAggregate
    Group Key: p1.val
    ->  Append
          ->  Append
-               ->  Seq Scan on p1
+               ->  Seq Scan on p1 p1_1
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c1
+               ->  Seq Scan on p1_c1 p1_2
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c2
+               ->  Seq Scan on p1_c2 p1_3
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c3
+               ->  Seq Scan on p1_c3 p1_4
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c4
+               ->  Seq Scan on p1_c4 p1_5
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c1_c1
+               ->  Seq Scan on p1_c1_c1 p1_6
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c1_c2
+               ->  Seq Scan on p1_c1_c2 p1_7
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c3_c1
+               ->  Seq Scan on p1_c3_c1 p1_8
                      Filter: (val < 1000)
-               ->  Seq Scan on p1_c3_c2
+               ->  Seq Scan on p1_c3_c2 p1_9
                      Filter: (val < 1000)
          ->  Result
                ->  Append
-                     ->  Index Scan using p2_id_val_idx on p2
+                     ->  Index Scan using p2_id_val_idx on p2 p2_1
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c1_id_val_idx on p2_c1
+                     ->  Index Scan using p2_c1_id_val_idx on p2_c1 p2_2
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c2_id_val_idx on p2_c2
+                     ->  Index Scan using p2_c2_id_val_idx on p2_c2 p2_3
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c3_id_val_idx on p2_c3
+                     ->  Index Scan using p2_c3_id_val_idx on p2_c3 p2_4
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c4_id_val_idx on p2_c4
+                     ->  Index Scan using p2_c4_id_val_idx on p2_c4 p2_5
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1
+                     ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1 p2_6
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2
+                     ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2 p2_7
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1
+                     ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1 p2_8
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2
+                     ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2 p2_9
                            Index Cond: (id < 1000)
 (42 rows)
 
@@ -8720,49 +8720,49 @@ not used hint:
 duplication hint:
 error hint:
 
-                                QUERY PLAN                                
---------------------------------------------------------------------------
+                                  QUERY PLAN                                   
+-------------------------------------------------------------------------------
  HashAggregate
    Group Key: p1.val
    ->  Append
          ->  Append
-               ->  Index Scan using p1_val3 on p1
+               ->  Index Scan using p1_val3 on p1 p1_1
                      Index Cond: (val < 1000)
-               ->  Index Scan using p1_c1_val3 on p1_c1
+               ->  Index Scan using p1_c1_val3 on p1_c1 p1_2
                      Index Cond: (val < 1000)
-               ->  Index Scan using p1_c2_val3 on p1_c2
+               ->  Index Scan using p1_c2_val3 on p1_c2 p1_3
                      Index Cond: (val < 1000)
-               ->  Index Scan using p1_c3_val3 on p1_c3
+               ->  Index Scan using p1_c3_val3 on p1_c3 p1_4
                      Index Cond: (val < 1000)
-               ->  Index Scan using p1_c4_val3 on p1_c4
+               ->  Index Scan using p1_c4_val3 on p1_c4 p1_5
                      Index Cond: (val < 1000)
-               ->  Index Scan using p1_c1_c1_val3 on p1_c1_c1
+               ->  Index Scan using p1_c1_c1_val3 on p1_c1_c1 p1_6
                      Index Cond: (val < 1000)
-               ->  Index Scan using p1_c1_c2_val3 on p1_c1_c2
+               ->  Index Scan using p1_c1_c2_val3 on p1_c1_c2 p1_7
                      Index Cond: (val < 1000)
-               ->  Index Scan using p1_c3_c1_val3 on p1_c3_c1
+               ->  Index Scan using p1_c3_c1_val3 on p1_c3_c1 p1_8
                      Index Cond: (val < 1000)
-               ->  Index Scan using p1_c3_c2_val3 on p1_c3_c2
+               ->  Index Scan using p1_c3_c2_val3 on p1_c3_c2 p1_9
                      Index Cond: (val < 1000)
          ->  Result
                ->  Append
-                     ->  Index Scan using p2_id_val_idx on p2
+                     ->  Index Scan using p2_id_val_idx on p2 p2_1
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c1_id_val_idx on p2_c1
+                     ->  Index Scan using p2_c1_id_val_idx on p2_c1 p2_2
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c2_id_val_idx on p2_c2
+                     ->  Index Scan using p2_c2_id_val_idx on p2_c2 p2_3
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c3_id_val_idx on p2_c3
+                     ->  Index Scan using p2_c3_id_val_idx on p2_c3 p2_4
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c4_id_val_idx on p2_c4
+                     ->  Index Scan using p2_c4_id_val_idx on p2_c4 p2_5
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1
+                     ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1 p2_6
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2
+                     ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2 p2_7
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1
+                     ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1 p2_8
                            Index Cond: (id < 1000)
-                     ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2
+                     ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2 p2_9
                            Index Cond: (id < 1000)
 (42 rows)
 
index d0f4f37..9161115 100644 (file)
@@ -3261,6 +3261,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | on
  enable_material                | on
@@ -3274,7 +3275,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 SET pg_hint_plan.parse_messages TO error;
 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
@@ -3317,6 +3318,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | on
  enable_material                | on
@@ -3330,7 +3332,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
@@ -3392,6 +3394,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | on
  enable_material                | on
@@ -3405,7 +3408,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 SET pg_hint_plan.parse_messages TO error;
 /*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
@@ -3448,6 +3451,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | on
  enable_material                | on
@@ -3461,7 +3465,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 EXPLAIN (COSTS false) EXECUTE p1;
              QUERY PLAN             
@@ -3512,6 +3516,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | on
  enable_material                | on
@@ -3525,7 +3530,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 SET pg_hint_plan.parse_messages TO error;
 EXPLAIN (COSTS false) EXECUTE p2;
@@ -3599,6 +3604,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | on
  enable_material                | on
@@ -3612,7 +3618,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 -- No. A-12-1-4
 -- No. A-12-2-4
@@ -3652,6 +3658,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | on
  enable_material                | on
@@ -3665,7 +3672,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 SET pg_hint_plan.parse_messages TO error;
 EXPLAIN (COSTS false) EXECUTE p2;
@@ -3717,6 +3724,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | on
  enable_material                | on
@@ -3730,7 +3738,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 DEALLOCATE p1;
 SET pg_hint_plan.parse_messages TO LOG;
@@ -3797,6 +3805,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | off
  enable_material                | on
@@ -3810,7 +3819,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
@@ -3869,6 +3878,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | off
  enable_material                | on
@@ -3882,7 +3892,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
           QUERY PLAN          
@@ -3943,6 +3953,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | off
  enable_material                | on
@@ -3956,7 +3967,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 BEGIN;
 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
@@ -4018,6 +4029,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | off
  enable_material                | on
@@ -4031,7 +4043,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
           QUERY PLAN          
@@ -4093,6 +4105,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | off
  enable_material                | on
@@ -4106,7 +4119,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 /*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
@@ -4169,6 +4182,7 @@ SELECT name, setting FROM settings;
  enable_gathermerge             | on
  enable_hashagg                 | on
  enable_hashjoin                | on
+ enable_incremental_sort        | on
  enable_indexonlyscan           | on
  enable_indexscan               | off
  enable_material                | on
@@ -4182,7 +4196,7 @@ SELECT name, setting FROM settings;
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(46 rows)
+(47 rows)
 
 EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
           QUERY PLAN          
index b54be5b..9f45297 100644 (file)
@@ -472,16 +472,16 @@ EXPLAIN (COSTS false) SELECT * FROM s1.p1 t1, s1.p1 t2 WHERE t1.c1 = t2.c1;
  Hash Join
    Hash Cond: (t1.c1 = t2.c1)
    ->  Append
-         ->  Seq Scan on p1 t1
-         ->  Seq Scan on p1c1 t1_1
-         ->  Seq Scan on p1c2 t1_2
-         ->  Seq Scan on p1c3 t1_3
+         ->  Seq Scan on p1 t1_1
+         ->  Seq Scan on p1c1 t1_2
+         ->  Seq Scan on p1c2 t1_3
+         ->  Seq Scan on p1c3 t1_4
    ->  Hash
          ->  Append
-               ->  Seq Scan on p1 t2
-               ->  Seq Scan on p1c1 t2_1
-               ->  Seq Scan on p1c2 t2_2
-               ->  Seq Scan on p1c3 t2_3
+               ->  Seq Scan on p1 t2_1
+               ->  Seq Scan on p1c1 t2_2
+               ->  Seq Scan on p1c2 t2_3
+               ->  Seq Scan on p1c3 t2_4
 (13 rows)
 
 /*+NestLoop(t1 t2)*/
@@ -497,18 +497,18 @@ error hint:
 --------------------------------------------------
  Nested Loop
    ->  Append
-         ->  Seq Scan on p1 t1
-         ->  Seq Scan on p1c1 t1_1
-         ->  Seq Scan on p1c2 t1_2
-         ->  Seq Scan on p1c3 t1_3
+         ->  Seq Scan on p1 t1_1
+         ->  Seq Scan on p1c1 t1_2
+         ->  Seq Scan on p1c2 t1_3
+         ->  Seq Scan on p1c3 t1_4
    ->  Append
-         ->  Seq Scan on p1 t2
+         ->  Seq Scan on p1 t2_1
                Filter: (t1.c1 = c1)
-         ->  Index Scan using p1c1_i on p1c1 t2_1
+         ->  Index Scan using p1c1_i on p1c1 t2_2
                Index Cond: (c1 = t1.c1)
-         ->  Index Scan using p1c2_i on p1c2 t2_2
+         ->  Index Scan using p1c2_i on p1c2 t2_3
                Index Cond: (c1 = t1.c1)
-         ->  Index Scan using p1c3_i on p1c3 t2_3
+         ->  Index Scan using p1c3_i on p1c3 t2_4
                Index Cond: (c1 = t1.c1)
 (15 rows)
 
@@ -4248,27 +4248,27 @@ SET enable_hashjoin TO on;
 ---- No. J-3-2 join inherit tables
 ----
 EXPLAIN (COSTS false) SELECT * FROM s1.p1, s1.p2 WHERE p1.c1 = p2.c1;
-             QUERY PLAN             
-------------------------------------
+               QUERY PLAN                
+-----------------------------------------
  Hash Join
    Hash Cond: (p2.c1 = p1.c1)
    ->  Append
-         ->  Seq Scan on p2
-         ->  Seq Scan on p2c1
-         ->  Seq Scan on p2c2
-         ->  Seq Scan on p2c3
-         ->  Seq Scan on p2c1c1
-         ->  Seq Scan on p2c1c2
-         ->  Seq Scan on p2c2c1
-         ->  Seq Scan on p2c2c2
-         ->  Seq Scan on p2c3c1
-         ->  Seq Scan on p2c3c2
+         ->  Seq Scan on p2 p2_1
+         ->  Seq Scan on p2c1 p2_2
+         ->  Seq Scan on p2c2 p2_3
+         ->  Seq Scan on p2c3 p2_4
+         ->  Seq Scan on p2c1c1 p2_5
+         ->  Seq Scan on p2c1c2 p2_6
+         ->  Seq Scan on p2c2c1 p2_7
+         ->  Seq Scan on p2c2c2 p2_8
+         ->  Seq Scan on p2c3c1 p2_9
+         ->  Seq Scan on p2c3c2 p2_10
    ->  Hash
          ->  Append
-               ->  Seq Scan on p1
-               ->  Seq Scan on p1c1
-               ->  Seq Scan on p1c2
-               ->  Seq Scan on p1c3
+               ->  Seq Scan on p1 p1_1
+               ->  Seq Scan on p1c1 p1_2
+               ->  Seq Scan on p1c2 p1_3
+               ->  Seq Scan on p1c3 p1_4
 (19 rows)
 
 -- No. J-3-2-1
@@ -4281,30 +4281,30 @@ not used hint:
 duplication hint:
 error hint:
 
-              QUERY PLAN              
---------------------------------------
+                 QUERY PLAN                 
+--------------------------------------------
  Merge Join
    Merge Cond: (p1.c1 = p2.c1)
    ->  Sort
          Sort Key: p1.c1
          ->  Append
-               ->  Seq Scan on p1
-               ->  Seq Scan on p1c1
-               ->  Seq Scan on p1c2
-               ->  Seq Scan on p1c3
+               ->  Seq Scan on p1 p1_1
+               ->  Seq Scan on p1c1 p1_2
+               ->  Seq Scan on p1c2 p1_3
+               ->  Seq Scan on p1c3 p1_4
    ->  Sort
          Sort Key: p2.c1
          ->  Append
-               ->  Seq Scan on p2
-               ->  Seq Scan on p2c1
-               ->  Seq Scan on p2c2
-               ->  Seq Scan on p2c3
-               ->  Seq Scan on p2c1c1
-               ->  Seq Scan on p2c1c2
-               ->  Seq Scan on p2c2c1
-               ->  Seq Scan on p2c2c2
-               ->  Seq Scan on p2c3c1
-               ->  Seq Scan on p2c3c2
+               ->  Seq Scan on p2 p2_1
+               ->  Seq Scan on p2c1 p2_2
+               ->  Seq Scan on p2c2 p2_3
+               ->  Seq Scan on p2c3 p2_4
+               ->  Seq Scan on p2c1c1 p2_5
+               ->  Seq Scan on p2c1c2 p2_6
+               ->  Seq Scan on p2c2c1 p2_7
+               ->  Seq Scan on p2c2c2 p2_8
+               ->  Seq Scan on p2c3c1 p2_9
+               ->  Seq Scan on p2c3c2 p2_10
 (22 rows)
 
 -- No. J-3-2-2
@@ -4317,53 +4317,53 @@ MergeJoin(p1c1 p2c1)
 duplication hint:
 error hint:
 
-             QUERY PLAN             
-------------------------------------
+               QUERY PLAN                
+-----------------------------------------
  Hash Join
    Hash Cond: (p2.c1 = p1.c1)
    ->  Append
-         ->  Seq Scan on p2
-         ->  Seq Scan on p2c1
-         ->  Seq Scan on p2c2
-         ->  Seq Scan on p2c3
-         ->  Seq Scan on p2c1c1
-         ->  Seq Scan on p2c1c2
-         ->  Seq Scan on p2c2c1
-         ->  Seq Scan on p2c2c2
-         ->  Seq Scan on p2c3c1
-         ->  Seq Scan on p2c3c2
+         ->  Seq Scan on p2 p2_1
+         ->  Seq Scan on p2c1 p2_2
+         ->  Seq Scan on p2c2 p2_3
+         ->  Seq Scan on p2c3 p2_4
+         ->  Seq Scan on p2c1c1 p2_5
+         ->  Seq Scan on p2c1c2 p2_6
+         ->  Seq Scan on p2c2c1 p2_7
+         ->  Seq Scan on p2c2c2 p2_8
+         ->  Seq Scan on p2c3c1 p2_9
+         ->  Seq Scan on p2c3c2 p2_10
    ->  Hash
          ->  Append
-               ->  Seq Scan on p1
-               ->  Seq Scan on p1c1
-               ->  Seq Scan on p1c2
-               ->  Seq Scan on p1c3
+               ->  Seq Scan on p1 p1_1
+               ->  Seq Scan on p1c1 p1_2
+               ->  Seq Scan on p1c2 p1_3
+               ->  Seq Scan on p1c3 p1_4
 (19 rows)
 
 ----
 ---- No. J-3-2-2 join partitioned tables
 ----
 EXPLAIN (COSTS false) SELECT * FROM s1.pt1, s1.p2 WHERE pt1.c1 = p2.c1;
-              QUERY PLAN              
---------------------------------------
+                 QUERY PLAN                 
+--------------------------------------------
  Hash Join
-   Hash Cond: (p2.c1 = pt1_c1.c1)
+   Hash Cond: (p2.c1 = pt1.c1)
    ->  Append
-         ->  Seq Scan on p2
-         ->  Seq Scan on p2c1
-         ->  Seq Scan on p2c2
-         ->  Seq Scan on p2c3
-         ->  Seq Scan on p2c1c1
-         ->  Seq Scan on p2c1c2
-         ->  Seq Scan on p2c2c1
-         ->  Seq Scan on p2c2c2
-         ->  Seq Scan on p2c3c1
-         ->  Seq Scan on p2c3c2
+         ->  Seq Scan on p2 p2_1
+         ->  Seq Scan on p2c1 p2_2
+         ->  Seq Scan on p2c2 p2_3
+         ->  Seq Scan on p2c3 p2_4
+         ->  Seq Scan on p2c1c1 p2_5
+         ->  Seq Scan on p2c1c2 p2_6
+         ->  Seq Scan on p2c2c1 p2_7
+         ->  Seq Scan on p2c2c2 p2_8
+         ->  Seq Scan on p2c3c1 p2_9
+         ->  Seq Scan on p2c3c2 p2_10
    ->  Hash
          ->  Append
-               ->  Seq Scan on pt1_c1
-               ->  Seq Scan on pt1_c2
-               ->  Seq Scan on pt1_c3
+               ->  Seq Scan on pt1_c1 pt1_1
+               ->  Seq Scan on pt1_c2 pt1_2
+               ->  Seq Scan on pt1_c3 pt1_3
 (18 rows)
 
 /*+MergeJoin(pt1 p2)*/
@@ -4375,29 +4375,29 @@ not used hint:
 duplication hint:
 error hint:
 
-              QUERY PLAN              
---------------------------------------
+                 QUERY PLAN                 
+--------------------------------------------
  Merge Join
-   Merge Cond: (pt1_c1.c1 = p2.c1)
+   Merge Cond: (pt1.c1 = p2.c1)
    ->  Sort
-         Sort Key: pt1_c1.c1
+         Sort Key: pt1.c1
          ->  Append
-               ->  Seq Scan on pt1_c1
-               ->  Seq Scan on pt1_c2
-               ->  Seq Scan on pt1_c3
+               ->  Seq Scan on pt1_c1 pt1_1
+               ->  Seq Scan on pt1_c2 pt1_2
+               ->  Seq Scan on pt1_c3 pt1_3
    ->  Sort
          Sort Key: p2.c1
          ->  Append
-               ->  Seq Scan on p2
-               ->  Seq Scan on p2c1
-               ->  Seq Scan on p2c2
-               ->  Seq Scan on p2c3
-               ->  Seq Scan on p2c1c1
-               ->  Seq Scan on p2c1c2
-               ->  Seq Scan on p2c2c1
-               ->  Seq Scan on p2c2c2
-               ->  Seq Scan on p2c3c1
-               ->  Seq Scan on p2c3c2
+               ->  Seq Scan on p2 p2_1
+               ->  Seq Scan on p2c1 p2_2
+               ->  Seq Scan on p2c2 p2_3
+               ->  Seq Scan on p2c3 p2_4
+               ->  Seq Scan on p2c1c1 p2_5
+               ->  Seq Scan on p2c1c2 p2_6
+               ->  Seq Scan on p2c2c1 p2_7
+               ->  Seq Scan on p2c2c2 p2_8
+               ->  Seq Scan on p2c3c1 p2_9
+               ->  Seq Scan on p2c3c2 p2_10
 (21 rows)
 
 /*+MergeJoin(pt1_c1 p2c1)*/ /* will ignored */
@@ -4409,26 +4409,26 @@ MergeJoin(p2c1 pt1_c1)
 duplication hint:
 error hint:
 
-              QUERY PLAN              
---------------------------------------
+                 QUERY PLAN                 
+--------------------------------------------
  Hash Join
-   Hash Cond: (p2.c1 = pt1_c1.c1)
+   Hash Cond: (p2.c1 = pt1.c1)
    ->  Append
-         ->  Seq Scan on p2
-         ->  Seq Scan on p2c1
-         ->  Seq Scan on p2c2
-         ->  Seq Scan on p2c3
-         ->  Seq Scan on p2c1c1
-         ->  Seq Scan on p2c1c2
-         ->  Seq Scan on p2c2c1
-         ->  Seq Scan on p2c2c2
-         ->  Seq Scan on p2c3c1
-         ->  Seq Scan on p2c3c2
+         ->  Seq Scan on p2 p2_1
+         ->  Seq Scan on p2c1 p2_2
+         ->  Seq Scan on p2c2 p2_3
+         ->  Seq Scan on p2c3 p2_4
+         ->  Seq Scan on p2c1c1 p2_5
+         ->  Seq Scan on p2c1c2 p2_6
+         ->  Seq Scan on p2c2c1 p2_7
+         ->  Seq Scan on p2c2c2 p2_8
+         ->  Seq Scan on p2c3c1 p2_9
+         ->  Seq Scan on p2c3c2 p2_10
    ->  Hash
          ->  Append
-               ->  Seq Scan on pt1_c1
-               ->  Seq Scan on pt1_c2
-               ->  Seq Scan on pt1_c3
+               ->  Seq Scan on pt1_c1 pt1_1
+               ->  Seq Scan on pt1_c2 pt1_2
+               ->  Seq Scan on pt1_c3 pt1_3
 (18 rows)
 
 ----
index 9aecb8e..493f694 100644 (file)
@@ -673,28 +673,28 @@ EXPLAIN (COSTS false) SELECT * FROM s1.p1 t1, s1.p1 t2, s1.p1 t3, s1.p1 t4 WHERE
          ->  Hash Join
                Hash Cond: (t1.c1 = t2.c1)
                ->  Append
-                     ->  Seq Scan on p1 t1
-                     ->  Seq Scan on p1c1 t1_1
-                     ->  Seq Scan on p1c2 t1_2
-                     ->  Seq Scan on p1c3 t1_3
+                     ->  Seq Scan on p1 t1_1
+                     ->  Seq Scan on p1c1 t1_2
+                     ->  Seq Scan on p1c2 t1_3
+                     ->  Seq Scan on p1c3 t1_4
                ->  Hash
                      ->  Append
-                           ->  Seq Scan on p1 t2
-                           ->  Seq Scan on p1c1 t2_1
-                           ->  Seq Scan on p1c2 t2_2
-                           ->  Seq Scan on p1c3 t2_3
+                           ->  Seq Scan on p1 t2_1
+                           ->  Seq Scan on p1c1 t2_2
+                           ->  Seq Scan on p1c2 t2_3
+                           ->  Seq Scan on p1c3 t2_4
          ->  Hash
                ->  Append
-                     ->  Seq Scan on p1 t3
-                     ->  Seq Scan on p1c1 t3_1
-                     ->  Seq Scan on p1c2 t3_2
-                     ->  Seq Scan on p1c3 t3_3
+                     ->  Seq Scan on p1 t3_1
+                     ->  Seq Scan on p1c1 t3_2
+                     ->  Seq Scan on p1c2 t3_3
+                     ->  Seq Scan on p1c3 t3_4
    ->  Hash
          ->  Append
-               ->  Seq Scan on p1 t4
-               ->  Seq Scan on p1c1 t4_1
-               ->  Seq Scan on p1c2 t4_2
-               ->  Seq Scan on p1c3 t4_3
+               ->  Seq Scan on p1 t4_1
+               ->  Seq Scan on p1c1 t4_2
+               ->  Seq Scan on p1c2 t4_3
+               ->  Seq Scan on p1c3 t4_4
 (29 rows)
 
 /*+Leading(t4 t3 t2 t1)*/
@@ -715,28 +715,28 @@ error hint:
          ->  Hash Join
                Hash Cond: (t3.c1 = t4.c1)
                ->  Append
-                     ->  Seq Scan on p1 t3
-                     ->  Seq Scan on p1c1 t3_1
-                     ->  Seq Scan on p1c2 t3_2
-                     ->  Seq Scan on p1c3 t3_3
+                     ->  Seq Scan on p1 t3_1
+                     ->  Seq Scan on p1c1 t3_2
+                     ->  Seq Scan on p1c2 t3_3
+                     ->  Seq Scan on p1c3 t3_4
                ->  Hash
                      ->  Append
-                           ->  Seq Scan on p1 t4
-                           ->  Seq Scan on p1c1 t4_1
-                           ->  Seq Scan on p1c2 t4_2
-                           ->  Seq Scan on p1c3 t4_3
+                           ->  Seq Scan on p1 t4_1
+                           ->  Seq Scan on p1c1 t4_2
+                           ->  Seq Scan on p1c2 t4_3
+                           ->  Seq Scan on p1c3 t4_4
          ->  Hash
                ->  Append
-                     ->  Seq Scan on p1 t2
-                     ->  Seq Scan on p1c1 t2_1
-                     ->  Seq Scan on p1c2 t2_2
-                     ->  Seq Scan on p1c3 t2_3
+                     ->  Seq Scan on p1 t2_1
+                     ->  Seq Scan on p1c1 t2_2
+                     ->  Seq Scan on p1c2 t2_3
+                     ->  Seq Scan on p1c3 t2_4
    ->  Hash
          ->  Append
-               ->  Seq Scan on p1 t1
-               ->  Seq Scan on p1c1 t1_1
-               ->  Seq Scan on p1c2 t1_2
-               ->  Seq Scan on p1c3 t1_3
+               ->  Seq Scan on p1 t1_1
+               ->  Seq Scan on p1c1 t1_2
+               ->  Seq Scan on p1c2 t1_3
+               ->  Seq Scan on p1c3 t1_4
 (29 rows)
 
 -- No. L-1-6-3
@@ -3999,19 +3999,19 @@ error hint:
    ->  Hash Join
          Hash Cond: (t1.c1 = t2.c1)
          ->  Append
-               ->  Seq Scan on p2c1 t1
-               ->  Seq Scan on p2c1c1 t1_1
-               ->  Seq Scan on p2c1c2 t1_2
+               ->  Seq Scan on p2c1 t1_1
+               ->  Seq Scan on p2c1c1 t1_2
+               ->  Seq Scan on p2c1c2 t1_3
          ->  Hash
                ->  Append
-                     ->  Seq Scan on p2c2 t2
-                     ->  Seq Scan on p2c2c1 t2_1
-                     ->  Seq Scan on p2c2c2 t2_2
+                     ->  Seq Scan on p2c2 t2_1
+                     ->  Seq Scan on p2c2c1 t2_2
+                     ->  Seq Scan on p2c2c2 t2_3
    ->  Hash
          ->  Append
-               ->  Seq Scan on p2c3 t3
-               ->  Seq Scan on p2c3c1 t3_1
-               ->  Seq Scan on p2c3c2 t3_2
+               ->  Seq Scan on p2c3 t3_1
+               ->  Seq Scan on p2c3c1 t3_2
+               ->  Seq Scan on p2c3c2 t3_3
 (18 rows)
 
 -- No. L-3-3-2
@@ -4033,19 +4033,19 @@ error hint:
    ->  Hash Join
          Hash Cond: (t1.c1 = t2.c1)
          ->  Append
-               ->  Seq Scan on p2c1 t1
-               ->  Seq Scan on p2c1c1 t1_1
-               ->  Seq Scan on p2c1c2 t1_2
+               ->  Seq Scan on p2c1 t1_1
+               ->  Seq Scan on p2c1c1 t1_2
+               ->  Seq Scan on p2c1c2 t1_3
          ->  Hash
                ->  Append
-                     ->  Seq Scan on p2c2 t2
-                     ->  Seq Scan on p2c2c1 t2_1
-                     ->  Seq Scan on p2c2c2 t2_2
+                     ->  Seq Scan on p2c2 t2_1
+                     ->  Seq Scan on p2c2c1 t2_2
+                     ->  Seq Scan on p2c2c2 t2_3
    ->  Hash
          ->  Append
-               ->  Seq Scan on p2c3 t3
-               ->  Seq Scan on p2c3c1 t3_1
-               ->  Seq Scan on p2c3c2 t3_2
+               ->  Seq Scan on p2c3 t3_1
+               ->  Seq Scan on p2c3c1 t3_2
+               ->  Seq Scan on p2c3c2 t3_3
 (18 rows)
 
 ----
index 29290c9..eed3fe3 100644 (file)
@@ -516,16 +516,16 @@ EXPLAIN SELECT * FROM s1.p1 t1, s1.p1 t2 WHERE t1.c1 = t2.c1;
  Hash Join  (cost=xxx..xxx rows=301 width=xxx)
    Hash Cond: (t1.c1 = t2.c1)
    ->  Append  (cost=xxx..xxx rows=301 width=xxx)
-         ->  Seq Scan on p1 t1  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p1c1 t1_1  (cost=xxx..xxx rows=100 width=xxx)
-         ->  Seq Scan on p1c2 t1_2  (cost=xxx..xxx rows=100 width=xxx)
-         ->  Seq Scan on p1c3 t1_3  (cost=xxx..xxx rows=100 width=xxx)
+         ->  Seq Scan on p1 t1_1  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p1c1 t1_2  (cost=xxx..xxx rows=100 width=xxx)
+         ->  Seq Scan on p1c2 t1_3  (cost=xxx..xxx rows=100 width=xxx)
+         ->  Seq Scan on p1c3 t1_4  (cost=xxx..xxx rows=100 width=xxx)
    ->  Hash  (cost=xxx..xxx rows=301 width=xxx)
          ->  Append  (cost=xxx..xxx rows=301 width=xxx)
-               ->  Seq Scan on p1 t2  (cost=xxx..xxx rows=1 width=xxx)
-               ->  Seq Scan on p1c1 t2_1  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c2 t2_2  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c3 t2_3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1 t2_1  (cost=xxx..xxx rows=1 width=xxx)
+               ->  Seq Scan on p1c1 t2_2  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c2 t2_3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c3 t2_4  (cost=xxx..xxx rows=100 width=xxx)
 
 \o results/ut-R.tmpout
 /*+Rows(t1 t2 #1)*/
@@ -544,16 +544,16 @@ error hint:
  Hash Join  (cost=xxx..xxx rows=1 width=xxx)
    Hash Cond: (t1.c1 = t2.c1)
    ->  Append  (cost=xxx..xxx rows=301 width=xxx)
-         ->  Seq Scan on p1 t1  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p1c1 t1_1  (cost=xxx..xxx rows=100 width=xxx)
-         ->  Seq Scan on p1c2 t1_2  (cost=xxx..xxx rows=100 width=xxx)
-         ->  Seq Scan on p1c3 t1_3  (cost=xxx..xxx rows=100 width=xxx)
+         ->  Seq Scan on p1 t1_1  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p1c1 t1_2  (cost=xxx..xxx rows=100 width=xxx)
+         ->  Seq Scan on p1c2 t1_3  (cost=xxx..xxx rows=100 width=xxx)
+         ->  Seq Scan on p1c3 t1_4  (cost=xxx..xxx rows=100 width=xxx)
    ->  Hash  (cost=xxx..xxx rows=301 width=xxx)
          ->  Append  (cost=xxx..xxx rows=301 width=xxx)
-               ->  Seq Scan on p1 t2  (cost=xxx..xxx rows=1 width=xxx)
-               ->  Seq Scan on p1c1 t2_1  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c2 t2_2  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c3 t2_3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1 t2_1  (cost=xxx..xxx rows=1 width=xxx)
+               ->  Seq Scan on p1c1 t2_2  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c2 t2_3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c3 t2_4  (cost=xxx..xxx rows=100 width=xxx)
 
 -- No. R-1-6-3
 \o results/ut-R.tmpout
@@ -4696,27 +4696,27 @@ error hint:
 EXPLAIN SELECT * FROM s1.p1, s1.p2 WHERE p1.c1 = p2.c1;
 \o
 \! sql/maskout.sh results/ut-R.tmpout
-                               QUERY PLAN                                
--------------------------------------------------------------------------
+                                  QUERY PLAN                                  
+------------------------------------------------------------------------------
  Hash Join  (cost=xxx..xxx rows=301 width=xxx)
    Hash Cond: (p2.c1 = p1.c1)
    ->  Append  (cost=xxx..xxx rows=304 width=xxx)
-         ->  Seq Scan on p2  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c1  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c2  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c3  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c1c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c1c2  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c2c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c2c2  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c3c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c3c2  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2 p2_1  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c1 p2_2  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c2 p2_3  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c3 p2_4  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c1c1 p2_5  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c1c2 p2_6  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c2c1 p2_7  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c2c2 p2_8  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c3c1 p2_9  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c3c2 p2_10  (cost=xxx..xxx rows=50 width=xxx)
    ->  Hash  (cost=xxx..xxx rows=301 width=xxx)
          ->  Append  (cost=xxx..xxx rows=301 width=xxx)
-               ->  Seq Scan on p1  (cost=xxx..xxx rows=1 width=xxx)
-               ->  Seq Scan on p1c1  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c2  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1 p1_1  (cost=xxx..xxx rows=1 width=xxx)
+               ->  Seq Scan on p1c1 p1_2  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c2 p1_3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c3 p1_4  (cost=xxx..xxx rows=100 width=xxx)
 
 \o results/ut-R.tmpout
 /*+Rows(p1 p2 #1)*/
@@ -4730,54 +4730,54 @@ error hint:
 
 \o
 \! sql/maskout.sh results/ut-R.tmpout
-                               QUERY PLAN                                
--------------------------------------------------------------------------
+                                  QUERY PLAN                                  
+------------------------------------------------------------------------------
  Hash Join  (cost=xxx..xxx rows=1 width=xxx)
    Hash Cond: (p2.c1 = p1.c1)
    ->  Append  (cost=xxx..xxx rows=304 width=xxx)
-         ->  Seq Scan on p2  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c1  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c2  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c3  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c1c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c1c2  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c2c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c2c2  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c3c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c3c2  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2 p2_1  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c1 p2_2  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c2 p2_3  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c3 p2_4  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c1c1 p2_5  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c1c2 p2_6  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c2c1 p2_7  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c2c2 p2_8  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c3c1 p2_9  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c3c2 p2_10  (cost=xxx..xxx rows=50 width=xxx)
    ->  Hash  (cost=xxx..xxx rows=301 width=xxx)
          ->  Append  (cost=xxx..xxx rows=301 width=xxx)
-               ->  Seq Scan on p1  (cost=xxx..xxx rows=1 width=xxx)
-               ->  Seq Scan on p1c1  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c2  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1 p1_1  (cost=xxx..xxx rows=1 width=xxx)
+               ->  Seq Scan on p1c1 p1_2  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c2 p1_3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c3 p1_4  (cost=xxx..xxx rows=100 width=xxx)
 
 -- No. R-3-4-2
 \o results/ut-R.tmpout
 EXPLAIN SELECT * FROM s1.p1, s1.p2 WHERE p1.c1 = p2.c1;
 \o
 \! sql/maskout.sh results/ut-R.tmpout
-                               QUERY PLAN                                
--------------------------------------------------------------------------
+                                  QUERY PLAN                                  
+------------------------------------------------------------------------------
  Hash Join  (cost=xxx..xxx rows=301 width=xxx)
    Hash Cond: (p2.c1 = p1.c1)
    ->  Append  (cost=xxx..xxx rows=304 width=xxx)
-         ->  Seq Scan on p2  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c1  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c2  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c3  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c1c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c1c2  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c2c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c2c2  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c3c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c3c2  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2 p2_1  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c1 p2_2  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c2 p2_3  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c3 p2_4  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c1c1 p2_5  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c1c2 p2_6  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c2c1 p2_7  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c2c2 p2_8  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c3c1 p2_9  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c3c2 p2_10  (cost=xxx..xxx rows=50 width=xxx)
    ->  Hash  (cost=xxx..xxx rows=301 width=xxx)
          ->  Append  (cost=xxx..xxx rows=301 width=xxx)
-               ->  Seq Scan on p1  (cost=xxx..xxx rows=1 width=xxx)
-               ->  Seq Scan on p1c1  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c2  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1 p1_1  (cost=xxx..xxx rows=1 width=xxx)
+               ->  Seq Scan on p1c1 p1_2  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c2 p1_3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c3 p1_4  (cost=xxx..xxx rows=100 width=xxx)
 
 \o results/ut-R.tmpout
 /*+Rows(p1c1 p2c1 #1)*/
@@ -4791,27 +4791,27 @@ error hint:
 
 \o
 \! sql/maskout.sh results/ut-R.tmpout
-                               QUERY PLAN                                
--------------------------------------------------------------------------
+                                  QUERY PLAN                                  
+------------------------------------------------------------------------------
  Hash Join  (cost=xxx..xxx rows=301 width=xxx)
    Hash Cond: (p2.c1 = p1.c1)
    ->  Append  (cost=xxx..xxx rows=304 width=xxx)
-         ->  Seq Scan on p2  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c1  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c2  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c3  (cost=xxx..xxx rows=1 width=xxx)
-         ->  Seq Scan on p2c1c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c1c2  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c2c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c2c2  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c3c1  (cost=xxx..xxx rows=50 width=xxx)
-         ->  Seq Scan on p2c3c2  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2 p2_1  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c1 p2_2  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c2 p2_3  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c3 p2_4  (cost=xxx..xxx rows=1 width=xxx)
+         ->  Seq Scan on p2c1c1 p2_5  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c1c2 p2_6  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c2c1 p2_7  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c2c2 p2_8  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c3c1 p2_9  (cost=xxx..xxx rows=50 width=xxx)
+         ->  Seq Scan on p2c3c2 p2_10  (cost=xxx..xxx rows=50 width=xxx)
    ->  Hash  (cost=xxx..xxx rows=301 width=xxx)
          ->  Append  (cost=xxx..xxx rows=301 width=xxx)
-               ->  Seq Scan on p1  (cost=xxx..xxx rows=1 width=xxx)
-               ->  Seq Scan on p1c1  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c2  (cost=xxx..xxx rows=100 width=xxx)
-               ->  Seq Scan on p1c3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1 p1_1  (cost=xxx..xxx rows=1 width=xxx)
+               ->  Seq Scan on p1c1 p1_2  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c2 p1_3  (cost=xxx..xxx rows=100 width=xxx)
+               ->  Seq Scan on p1c3 p1_4  (cost=xxx..xxx rows=100 width=xxx)
 
 ----
 ---- No. R-3-5 conflict join method hint
index 1780b46..0d6f13c 100644 (file)
@@ -377,12 +377,12 @@ error hint:
 
 -- No. S-1-5-2
 EXPLAIN (COSTS false) SELECT * FROM s1.p1 WHERE p1.c1 = 1;
-        QUERY PLAN        
---------------------------
+         QUERY PLAN          
+-----------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (c1 = 1)
-   ->  Seq Scan on p1c1
+   ->  Seq Scan on p1c1 p1_2
          Filter: (c1 = 1)
 (5 rows)
 
@@ -395,12 +395,12 @@ not used hint:
 duplication hint:
 error hint:
 
-              QUERY PLAN               
----------------------------------------
+                 QUERY PLAN                 
+--------------------------------------------
  Append
-   ->  Index Scan using p1_i on p1
+   ->  Index Scan using p1_i on p1 p1_1
          Index Cond: (c1 = 1)
-   ->  Index Scan using p1c1_i on p1c1
+   ->  Index Scan using p1c1_i on p1c1 p1_2
          Index Cond: (c1 = 1)
 (5 rows)
 
@@ -3761,9 +3761,8 @@ error hint:
  c4     | text    |           |          | 
 Indexes:
     "ti1_pkey" PRIMARY KEY, btree (c1)
-    "ti1_c2_key" UNIQUE CONSTRAINT, btree (c2)
-    "ti1_uniq" UNIQUE, btree (c1)
     "ti1_btree" btree (c1)
+    "ti1_c2_key" UNIQUE CONSTRAINT, btree (c2)
     "ti1_expr" btree ((c1 < 100))
     "ti1_gin" gin (c1)
     "ti1_gist" gist (c1)
@@ -3775,6 +3774,7 @@ Indexes:
     "ti1_multi" btree (c1, c2, c3, c4)
     "ti1_pred" btree (lower(c4))
     "ti1_ts" gin (to_tsvector('english'::regconfig, c4))
+    "ti1_uniq" UNIQUE, btree (c1)
 
 EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 < 100 AND c2 = 1 AND lower(c4) = '1' AND to_tsvector('english', c4) @@ 'a & b' AND ctid = '(1,1)';
                                                                QUERY PLAN                                                                
@@ -4979,12 +4979,12 @@ error hint:
 
 -- No. S-3-8-2
 EXPLAIN (COSTS false) SELECT * FROM s1.p1 WHERE c1 = 1;
-        QUERY PLAN        
---------------------------
+         QUERY PLAN          
+-----------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (c1 = 1)
-   ->  Seq Scan on p1c1
+   ->  Seq Scan on p1c1 p1_2
          Filter: (c1 = 1)
 (5 rows)
 
@@ -4997,12 +4997,12 @@ not used hint:
 duplication hint:
 error hint:
 
-              QUERY PLAN               
----------------------------------------
+                 QUERY PLAN                 
+--------------------------------------------
  Append
-   ->  Index Scan using p1_i on p1
+   ->  Index Scan using p1_i on p1 p1_1
          Index Cond: (c1 = 1)
-   ->  Index Scan using p1c1_i on p1c1
+   ->  Index Scan using p1c1_i on p1c1 p1_2
          Index Cond: (c1 = 1)
 (5 rows)
 
@@ -5050,14 +5050,14 @@ error hint:
 
 -- No. S-3-8-4
 EXPLAIN (COSTS false) UPDATE s1.p1 SET c4 = c4 WHERE c1 = 1;
-        QUERY PLAN        
---------------------------
+         QUERY PLAN          
+-----------------------------
  Update on p1
    Update on p1
-   Update on p1c1
+   Update on p1c1 p1_1
    ->  Seq Scan on p1
          Filter: (c1 = 1)
-   ->  Seq Scan on p1c1
+   ->  Seq Scan on p1c1 p1_1
          Filter: (c1 = 1)
 (7 rows)
 
@@ -5070,14 +5070,14 @@ not used hint:
 duplication hint:
 error hint:
 
-              QUERY PLAN               
----------------------------------------
+                 QUERY PLAN                 
+--------------------------------------------
  Update on p1
    Update on p1
-   Update on p1c1
+   Update on p1c1 p1_1
    ->  Index Scan using p1_i on p1
          Index Cond: (c1 = 1)
-   ->  Index Scan using p1c1_i on p1c1
+   ->  Index Scan using p1c1_i on p1c1 p1_1
          Index Cond: (c1 = 1)
 (7 rows)
 
@@ -5094,14 +5094,14 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                
-------------------------------------------
+                  QUERY PLAN                   
+-----------------------------------------------
  Update on p1
    Update on p1
-   Update on p1c1
+   Update on p1c1 p1_1
    ->  Index Scan using p1_pkey on p1
          Index Cond: (c1 = 1)
-   ->  Index Scan using p1c1_pkey on p1c1
+   ->  Index Scan using p1c1_pkey on p1c1 p1_1
          Index Cond: (c1 = 1)
 (7 rows)
 
@@ -5110,12 +5110,12 @@ error hint:
 ----
 -- No. S-3-9-1
 EXPLAIN (COSTS false) SELECT * FROM s1.p1 WHERE c1 = 1;
-        QUERY PLAN        
---------------------------
+         QUERY PLAN          
+-----------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (c1 = 1)
-   ->  Seq Scan on p1c1
+   ->  Seq Scan on p1c1 p1_2
          Filter: (c1 = 1)
 (5 rows)
 
@@ -5128,25 +5128,25 @@ not used hint:
 duplication hint:
 error hint:
 
-              QUERY PLAN               
----------------------------------------
+                 QUERY PLAN                 
+--------------------------------------------
  Append
-   ->  Index Scan using p1_i on p1
+   ->  Index Scan using p1_i on p1 p1_1
          Index Cond: (c1 = 1)
-   ->  Index Scan using p1c1_i on p1c1
+   ->  Index Scan using p1c1_i on p1c1 p1_2
          Index Cond: (c1 = 1)
 (5 rows)
 
 -- No. S-3-9-2
 EXPLAIN (COSTS false) SELECT * FROM s1.p2 WHERE c1 = 1;
-        QUERY PLAN        
---------------------------
+          QUERY PLAN           
+-------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: (c1 = 1)
-   ->  Seq Scan on p2c1
+   ->  Seq Scan on p2c1 p2_2
          Filter: (c1 = 1)
-   ->  Seq Scan on p2c1c1
+   ->  Seq Scan on p2c1c1 p2_3
          Filter: (c1 = 1)
 (7 rows)
 
@@ -5159,14 +5159,14 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Append
-   ->  Index Scan using p2_i on p2
+   ->  Index Scan using p2_i on p2 p2_1
          Index Cond: (c1 = 1)
-   ->  Index Scan using p2c1_i on p2c1
+   ->  Index Scan using p2c1_i on p2c1 p2_2
          Index Cond: (c1 = 1)
-   ->  Index Scan using p2c1c1_i on p2c1c1
+   ->  Index Scan using p2c1c1_i on p2c1c1 p2_3
          Index Cond: (c1 = 1)
 (7 rows)
 
@@ -5174,14 +5174,14 @@ error hint:
 ---- No. S-3-10 inheritance table specified table
 ----
 EXPLAIN (COSTS false) SELECT * FROM s1.p2 WHERE c1 = 1;
-        QUERY PLAN        
---------------------------
+          QUERY PLAN           
+-------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: (c1 = 1)
-   ->  Seq Scan on p2c1
+   ->  Seq Scan on p2c1 p2_2
          Filter: (c1 = 1)
-   ->  Seq Scan on p2c1c1
+   ->  Seq Scan on p2c1c1 p2_3
          Filter: (c1 = 1)
 (7 rows)
 
@@ -5195,14 +5195,14 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Append
-   ->  Index Scan using p2_i on p2
+   ->  Index Scan using p2_i on p2 p2_1
          Index Cond: (c1 = 1)
-   ->  Index Scan using p2c1_i on p2c1
+   ->  Index Scan using p2c1_i on p2c1 p2_2
          Index Cond: (c1 = 1)
-   ->  Index Scan using p2c1c1_i on p2c1c1
+   ->  Index Scan using p2c1c1_i on p2c1c1 p2_3
          Index Cond: (c1 = 1)
 (7 rows)
 
@@ -5216,14 +5216,14 @@ not used hint:
 duplication hint:
 error hint:
 
-              QUERY PLAN               
----------------------------------------
+                 QUERY PLAN                 
+--------------------------------------------
  Append
-   ->  Seq Scan on p2
+   ->  Seq Scan on p2 p2_1
          Filter: (c1 = 1)
-   ->  Index Scan using p2c1_i on p2c1
+   ->  Index Scan using p2c1_i on p2c1 p2_2
          Index Cond: (c1 = 1)
-   ->  Seq Scan on p2c1c1
+   ->  Seq Scan on p2c1c1 p2_3
          Filter: (c1 = 1)
 (7 rows)
 
@@ -5232,12 +5232,12 @@ error hint:
 EXPLAIN SELECT c4 FROM s1.p1 WHERE c2 * 2 < 100 AND c1 < 10;
 \o
 \! sql/maskout.sh results/ut-S.tmpout
-                        QUERY PLAN                        
-----------------------------------------------------------
+                          QUERY PLAN                           
+---------------------------------------------------------------
  Append  (cost=xxx..xxx rows=4 width=xxx)
-   ->  Seq Scan on p1  (cost=xxx..xxx rows=1 width=xxx)
+   ->  Seq Scan on p1 p1_1  (cost=xxx..xxx rows=1 width=xxx)
          Filter: ((c1 < 10) AND ((c2 * 2) < 100))
-   ->  Seq Scan on p1c1  (cost=xxx..xxx rows=3 width=xxx)
+   ->  Seq Scan on p1c1 p1_2  (cost=xxx..xxx rows=3 width=xxx)
          Filter: ((c1 < 10) AND ((c2 * 2) < 100))
 
 \o results/ut-S.tmpout
@@ -5253,12 +5253,12 @@ error hint:
 
 \o
 \! sql/maskout.sh results/ut-S.tmpout
-                                     QUERY PLAN                                     
-------------------------------------------------------------------------------------
+                                       QUERY PLAN                                        
+-----------------------------------------------------------------------------------------
  Append  (cost=xxx..xxx rows=4 width=xxx)
-   ->  Index Scan using p1_parent on p1  (cost=xxx..xxx rows=1 width=xxx)
+   ->  Index Scan using p1_parent on p1 p1_1  (cost=xxx..xxx rows=1 width=xxx)
          Filter: ((c2 * 2) < 100)
-   ->  Index Scan using p1c1_c4_expr_idx on p1c1  (cost=xxx..xxx rows=3 width=xxx)
+   ->  Index Scan using p1c1_c4_expr_idx on p1c1 p1_2  (cost=xxx..xxx rows=3 width=xxx)
          Filter: ((c2 * 2) < 100)
 
 -- No. S-3-10-4
@@ -5277,16 +5277,16 @@ error hint:
 
 \o
 \! sql/maskout.sh results/ut-S.tmpout
-                                  QUERY PLAN                                   
--------------------------------------------------------------------------------
+                                    QUERY PLAN                                     
+-----------------------------------------------------------------------------------
  Append  (cost=xxx..xxx rows=4 width=xxx)
-   ->  Index Scan using p1_i2 on p1  (cost=xxx..xxx rows=1 width=xxx)
+   ->  Index Scan using p1_i2 on p1 p1_1  (cost=xxx..xxx rows=1 width=xxx)
          Index Cond: (c2 = 1)
-   ->  Seq Scan on p1c1  (cost={inf}..{inf} rows=1 width=xxx)
+   ->  Seq Scan on p1c1 p1_2  (cost={inf}..{inf} rows=1 width=xxx)
          Filter: (c2 = 1)
-   ->  Seq Scan on p1c2  (cost={inf}..{inf} rows=1 width=xxx)
+   ->  Seq Scan on p1c2 p1_3  (cost={inf}..{inf} rows=1 width=xxx)
          Filter: (c2 = 1)
-   ->  Seq Scan on p1c3  (cost={inf}..{inf} rows=1 width=xxx)
+   ->  Seq Scan on p1c3 p1_4  (cost={inf}..{inf} rows=1 width=xxx)
          Filter: (c2 = 1)
 
 -- No. S-3-10-5
@@ -5304,14 +5304,14 @@ error hint:
 
 \o
 \! sql/maskout.sh results/ut-S.tmpout
-                                   QUERY PLAN                                    
----------------------------------------------------------------------------------
+                                      QUERY PLAN                                      
+--------------------------------------------------------------------------------------
  Append  (cost={inf}..{inf} rows=3 width=xxx)
-   ->  Seq Scan on p2  (cost={inf}..{inf} rows=1 width=xxx)
+   ->  Seq Scan on p2 p2_1  (cost={inf}..{inf} rows=1 width=xxx)
          Filter: (c1 = 1)
-   ->  Index Scan using p2c1_pkey on p2c1  (cost=xxx..xxx rows=1 width=xxx)
+   ->  Index Scan using p2c1_pkey on p2c1 p2_2  (cost=xxx..xxx rows=1 width=xxx)
          Index Cond: (c1 = 1)
-   ->  Seq Scan on p2c1c1  (cost={inf}..{inf} rows=1 width=xxx)
+   ->  Seq Scan on p2c1c1 p2_3  (cost={inf}..{inf} rows=1 width=xxx)
          Filter: (c1 = 1)
 
 ----
@@ -6032,12 +6032,12 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                
-------------------------------------------
+                  QUERY PLAN                   
+-----------------------------------------------
  Append
-   ->  Index Scan using p1_pkey on p1
+   ->  Index Scan using p1_pkey on p1 p1_1
          Index Cond: (c1 = 1)
-   ->  Index Scan using p1c1_pkey on p1c1
+   ->  Index Scan using p1c1_pkey on p1c1 p1_2
          Index Cond: (c1 = 1)
 (5 rows)
 
@@ -6053,12 +6053,12 @@ not used hint:
 duplication hint:
 error hint:
 
-              QUERY PLAN               
----------------------------------------
+                 QUERY PLAN                 
+--------------------------------------------
  Append
-   ->  Index Scan using p1_i on p1
+   ->  Index Scan using p1_i on p1 p1_1
          Index Cond: (c1 = 1)
-   ->  Index Scan using p1c1_i on p1c1
+   ->  Index Scan using p1c1_i on p1c1 p1_2
          Index Cond: (c1 = 1)
 (5 rows)
 
@@ -6074,12 +6074,12 @@ not used hint:
 duplication hint:
 error hint:
 
-        QUERY PLAN        
---------------------------
+         QUERY PLAN          
+-----------------------------
  Append
-   ->  Seq Scan on p1
+   ->  Seq Scan on p1 p1_1
          Filter: (c1 = 1)
-   ->  Seq Scan on p1c1
+   ->  Seq Scan on p1c1 p1_2
          Filter: (c1 = 1)
 (5 rows)
 
index 12ee9e5..3a9c1c8 100644 (file)
@@ -97,20 +97,20 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Gather
    Workers Planned: 1
    ->  Append
-         ->  Parallel Seq Scan on p1
-         ->  Parallel Seq Scan on p1_c1
-         ->  Parallel Seq Scan on p1_c2
-         ->  Parallel Seq Scan on p1_c3
-         ->  Parallel Seq Scan on p1_c4
-         ->  Parallel Seq Scan on p1_c1_c1
-         ->  Parallel Seq Scan on p1_c1_c2
-         ->  Parallel Seq Scan on p1_c3_c1
-         ->  Parallel Seq Scan on p1_c3_c2
+         ->  Parallel Seq Scan on p1 p1_1
+         ->  Parallel Seq Scan on p1_c1 p1_2
+         ->  Parallel Seq Scan on p1_c2 p1_3
+         ->  Parallel Seq Scan on p1_c3 p1_4
+         ->  Parallel Seq Scan on p1_c4 p1_5
+         ->  Parallel Seq Scan on p1_c1_c1 p1_6
+         ->  Parallel Seq Scan on p1_c1_c2 p1_7
+         ->  Parallel Seq Scan on p1_c3_c1 p1_8
+         ->  Parallel Seq Scan on p1_c3_c2 p1_9
 (12 rows)
 
 SET enable_parallel_append to true;
@@ -123,20 +123,20 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Gather
    Workers Planned: 2
    ->  Parallel Append
-         ->  Seq Scan on p1
-         ->  Seq Scan on p1_c1
-         ->  Seq Scan on p1_c3
-         ->  Parallel Seq Scan on p1_c2
-         ->  Parallel Seq Scan on p1_c4
-         ->  Parallel Seq Scan on p1_c1_c1
-         ->  Parallel Seq Scan on p1_c1_c2
-         ->  Parallel Seq Scan on p1_c3_c1
-         ->  Parallel Seq Scan on p1_c3_c2
+         ->  Seq Scan on p1 p1_1
+         ->  Seq Scan on p1_c1 p1_2
+         ->  Seq Scan on p1_c3 p1_4
+         ->  Parallel Seq Scan on p1_c2 p1_3
+         ->  Parallel Seq Scan on p1_c4 p1_5
+         ->  Parallel Seq Scan on p1_c1_c1 p1_6
+         ->  Parallel Seq Scan on p1_c1_c2 p1_7
+         ->  Parallel Seq Scan on p1_c3_c1 p1_8
+         ->  Parallel Seq Scan on p1_c3_c2 p1_9
 (12 rows)
 
 SET parallel_setup_cost to DEFAULT;
@@ -153,20 +153,20 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Gather
    Workers Planned: 8
    ->  Append
-         ->  Parallel Seq Scan on p1
-         ->  Parallel Seq Scan on p1_c1
-         ->  Parallel Seq Scan on p1_c2
-         ->  Parallel Seq Scan on p1_c3
-         ->  Parallel Seq Scan on p1_c4
-         ->  Parallel Seq Scan on p1_c1_c1
-         ->  Parallel Seq Scan on p1_c1_c2
-         ->  Parallel Seq Scan on p1_c3_c1
-         ->  Parallel Seq Scan on p1_c3_c2
+         ->  Parallel Seq Scan on p1 p1_1
+         ->  Parallel Seq Scan on p1_c1 p1_2
+         ->  Parallel Seq Scan on p1_c2 p1_3
+         ->  Parallel Seq Scan on p1_c3 p1_4
+         ->  Parallel Seq Scan on p1_c4 p1_5
+         ->  Parallel Seq Scan on p1_c1_c1 p1_6
+         ->  Parallel Seq Scan on p1_c1_c2 p1_7
+         ->  Parallel Seq Scan on p1_c3_c1 p1_8
+         ->  Parallel Seq Scan on p1_c3_c2 p1_9
 (12 rows)
 
 SET enable_parallel_append to true;
@@ -179,20 +179,20 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Gather
    Workers Planned: 8
    ->  Parallel Append
-         ->  Seq Scan on p1
-         ->  Seq Scan on p1_c1
-         ->  Seq Scan on p1_c3
-         ->  Parallel Seq Scan on p1_c2
-         ->  Parallel Seq Scan on p1_c4
-         ->  Parallel Seq Scan on p1_c1_c1
-         ->  Parallel Seq Scan on p1_c1_c2
-         ->  Parallel Seq Scan on p1_c3_c1
-         ->  Parallel Seq Scan on p1_c3_c2
+         ->  Seq Scan on p1 p1_1
+         ->  Seq Scan on p1_c1 p1_2
+         ->  Seq Scan on p1_c3 p1_4
+         ->  Parallel Seq Scan on p1_c2 p1_3
+         ->  Parallel Seq Scan on p1_c4 p1_5
+         ->  Parallel Seq Scan on p1_c1_c1 p1_6
+         ->  Parallel Seq Scan on p1_c1_c2 p1_7
+         ->  Parallel Seq Scan on p1_c3_c1 p1_8
+         ->  Parallel Seq Scan on p1_c3_c2 p1_9
 (12 rows)
 
 -- hinting on children doesn't work (changed as of pg_hint_plan 10)
@@ -206,18 +206,18 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
-   ->  Seq Scan on p1_c1
-   ->  Seq Scan on p1_c2
-   ->  Seq Scan on p1_c3
-   ->  Seq Scan on p1_c4
-   ->  Seq Scan on p1_c1_c1
-   ->  Seq Scan on p1_c1_c2
-   ->  Seq Scan on p1_c3_c1
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1 p1_1
+   ->  Seq Scan on p1_c1 p1_2
+   ->  Seq Scan on p1_c2 p1_3
+   ->  Seq Scan on p1_c3 p1_4
+   ->  Seq Scan on p1_c4 p1_5
+   ->  Seq Scan on p1_c1_c1 p1_6
+   ->  Seq Scan on p1_c1_c2 p1_7
+   ->  Seq Scan on p1_c3_c1 p1_8
+   ->  Seq Scan on p1_c3_c2 p1_9
 (10 rows)
 
 SET enable_parallel_append to true;
@@ -230,18 +230,18 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
-   ->  Seq Scan on p1_c1
-   ->  Seq Scan on p1_c2
-   ->  Seq Scan on p1_c3
-   ->  Seq Scan on p1_c4
-   ->  Seq Scan on p1_c1_c1
-   ->  Seq Scan on p1_c1_c2
-   ->  Seq Scan on p1_c3_c1
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1 p1_1
+   ->  Seq Scan on p1_c1 p1_2
+   ->  Seq Scan on p1_c2 p1_3
+   ->  Seq Scan on p1_c3 p1_4
+   ->  Seq Scan on p1_c4 p1_5
+   ->  Seq Scan on p1_c1_c1 p1_6
+   ->  Seq Scan on p1_c1_c2 p1_7
+   ->  Seq Scan on p1_c3_c1 p1_8
+   ->  Seq Scan on p1_c3_c2 p1_9
 (10 rows)
 
 -- Joins
@@ -357,33 +357,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                      QUERY PLAN                       
--------------------------------------------------------
+                         QUERY PLAN                         
+------------------------------------------------------------
  Gather
    Workers Planned: 1
    ->  Parallel Hash Join
          Hash Cond: (p1.id = p2.id)
          ->  Append
-               ->  Parallel Seq Scan on p1
-               ->  Parallel Seq Scan on p1_c1
-               ->  Parallel Seq Scan on p1_c2
-               ->  Parallel Seq Scan on p1_c3
-               ->  Parallel Seq Scan on p1_c4
-               ->  Parallel Seq Scan on p1_c1_c1
-               ->  Parallel Seq Scan on p1_c1_c2
-               ->  Parallel Seq Scan on p1_c3_c1
-               ->  Parallel Seq Scan on p1_c3_c2
+               ->  Parallel Seq Scan on p1 p1_1
+               ->  Parallel Seq Scan on p1_c1 p1_2
+               ->  Parallel Seq Scan on p1_c2 p1_3
+               ->  Parallel Seq Scan on p1_c3 p1_4
+               ->  Parallel Seq Scan on p1_c4 p1_5
+               ->  Parallel Seq Scan on p1_c1_c1 p1_6
+               ->  Parallel Seq Scan on p1_c1_c2 p1_7
+               ->  Parallel Seq Scan on p1_c3_c1 p1_8
+               ->  Parallel Seq Scan on p1_c3_c2 p1_9
          ->  Parallel Hash
                ->  Append
-                     ->  Parallel Seq Scan on p2
-                     ->  Parallel Seq Scan on p2_c1
-                     ->  Parallel Seq Scan on p2_c2
-                     ->  Parallel Seq Scan on p2_c3
-                     ->  Parallel Seq Scan on p2_c4
-                     ->  Parallel Seq Scan on p2_c1_c1
-                     ->  Parallel Seq Scan on p2_c1_c2
-                     ->  Parallel Seq Scan on p2_c3_c1
-                     ->  Parallel Seq Scan on p2_c3_c2
+                     ->  Parallel Seq Scan on p2 p2_1
+                     ->  Parallel Seq Scan on p2_c1 p2_2
+                     ->  Parallel Seq Scan on p2_c2 p2_3
+                     ->  Parallel Seq Scan on p2_c3 p2_4
+                     ->  Parallel Seq Scan on p2_c4 p2_5
+                     ->  Parallel Seq Scan on p2_c1_c1 p2_6
+                     ->  Parallel Seq Scan on p2_c1_c2 p2_7
+                     ->  Parallel Seq Scan on p2_c3_c1 p2_8
+                     ->  Parallel Seq Scan on p2_c3_c2 p2_9
 (25 rows)
 
 SET enable_parallel_append to true;
@@ -396,33 +396,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                      QUERY PLAN                       
--------------------------------------------------------
+                         QUERY PLAN                         
+------------------------------------------------------------
  Gather
    Workers Planned: 2
    ->  Parallel Hash Join
          Hash Cond: (p1.id = p2.id)
          ->  Parallel Append
-               ->  Seq Scan on p1
-               ->  Seq Scan on p1_c1
-               ->  Seq Scan on p1_c3
-               ->  Parallel Seq Scan on p1_c2
-               ->  Parallel Seq Scan on p1_c4
-               ->  Parallel Seq Scan on p1_c1_c1
-               ->  Parallel Seq Scan on p1_c1_c2
-               ->  Parallel Seq Scan on p1_c3_c1
-               ->  Parallel Seq Scan on p1_c3_c2
+               ->  Seq Scan on p1 p1_1
+               ->  Seq Scan on p1_c1 p1_2
+               ->  Seq Scan on p1_c3 p1_4
+               ->  Parallel Seq Scan on p1_c2 p1_3
+               ->  Parallel Seq Scan on p1_c4 p1_5
+               ->  Parallel Seq Scan on p1_c1_c1 p1_6
+               ->  Parallel Seq Scan on p1_c1_c2 p1_7
+               ->  Parallel Seq Scan on p1_c3_c1 p1_8
+               ->  Parallel Seq Scan on p1_c3_c2 p1_9
          ->  Parallel Hash
                ->  Parallel Append
-                     ->  Seq Scan on p2
-                     ->  Seq Scan on p2_c1
-                     ->  Seq Scan on p2_c3
-                     ->  Parallel Seq Scan on p2_c2
-                     ->  Parallel Seq Scan on p2_c4
-                     ->  Parallel Seq Scan on p2_c1_c1
-                     ->  Parallel Seq Scan on p2_c1_c2
-                     ->  Parallel Seq Scan on p2_c3_c1
-                     ->  Parallel Seq Scan on p2_c3_c2
+                     ->  Seq Scan on p2 p2_1
+                     ->  Seq Scan on p2_c1 p2_2
+                     ->  Seq Scan on p2_c3 p2_4
+                     ->  Parallel Seq Scan on p2_c2 p2_3
+                     ->  Parallel Seq Scan on p2_c4 p2_5
+                     ->  Parallel Seq Scan on p2_c1_c1 p2_6
+                     ->  Parallel Seq Scan on p2_c1_c2 p2_7
+                     ->  Parallel Seq Scan on p2_c3_c1 p2_8
+                     ->  Parallel Seq Scan on p2_c3_c2 p2_9
 (25 rows)
 
 SET enable_parallel_append to false;
@@ -436,33 +436,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                   QUERY PLAN                    
--------------------------------------------------
+                      QUERY PLAN                      
+------------------------------------------------------
  Gather
    Workers Planned: 1
    ->  Hash Join
          Hash Cond: (p1.id = p2.id)
          ->  Append
-               ->  Parallel Seq Scan on p1
-               ->  Parallel Seq Scan on p1_c1
-               ->  Parallel Seq Scan on p1_c2
-               ->  Parallel Seq Scan on p1_c3
-               ->  Parallel Seq Scan on p1_c4
-               ->  Parallel Seq Scan on p1_c1_c1
-               ->  Parallel Seq Scan on p1_c1_c2
-               ->  Parallel Seq Scan on p1_c3_c1
-               ->  Parallel Seq Scan on p1_c3_c2
+               ->  Parallel Seq Scan on p1 p1_1
+               ->  Parallel Seq Scan on p1_c1 p1_2
+               ->  Parallel Seq Scan on p1_c2 p1_3
+               ->  Parallel Seq Scan on p1_c3 p1_4
+               ->  Parallel Seq Scan on p1_c4 p1_5
+               ->  Parallel Seq Scan on p1_c1_c1 p1_6
+               ->  Parallel Seq Scan on p1_c1_c2 p1_7
+               ->  Parallel Seq Scan on p1_c3_c1 p1_8
+               ->  Parallel Seq Scan on p1_c3_c2 p1_9
          ->  Hash
                ->  Append
-                     ->  Seq Scan on p2
-                     ->  Seq Scan on p2_c1
-                     ->  Seq Scan on p2_c2
-                     ->  Seq Scan on p2_c3
-                     ->  Seq Scan on p2_c4
-                     ->  Seq Scan on p2_c1_c1
-                     ->  Seq Scan on p2_c1_c2
-                     ->  Seq Scan on p2_c3_c1
-                     ->  Seq Scan on p2_c3_c2
+                     ->  Seq Scan on p2 p2_1
+                     ->  Seq Scan on p2_c1 p2_2
+                     ->  Seq Scan on p2_c2 p2_3
+                     ->  Seq Scan on p2_c3 p2_4
+                     ->  Seq Scan on p2_c4 p2_5
+                     ->  Seq Scan on p2_c1_c1 p2_6
+                     ->  Seq Scan on p2_c1_c2 p2_7
+                     ->  Seq Scan on p2_c3_c1 p2_8
+                     ->  Seq Scan on p2_c3_c2 p2_9
 (25 rows)
 
 SET enable_parallel_append to true;
@@ -476,33 +476,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                   QUERY PLAN                    
--------------------------------------------------
+                      QUERY PLAN                      
+------------------------------------------------------
  Gather
    Workers Planned: 2
    ->  Parallel Hash Join
-         Hash Cond: (p1.id = p2_c2.id)
+         Hash Cond: (p1.id = p2.id)
          ->  Parallel Append
-               ->  Seq Scan on p1
-               ->  Seq Scan on p1_c1
-               ->  Seq Scan on p1_c3
-               ->  Parallel Seq Scan on p1_c2
-               ->  Parallel Seq Scan on p1_c4
-               ->  Parallel Seq Scan on p1_c1_c1
-               ->  Parallel Seq Scan on p1_c1_c2
-               ->  Parallel Seq Scan on p1_c3_c1
-               ->  Parallel Seq Scan on p1_c3_c2
+               ->  Seq Scan on p1 p1_1
+               ->  Seq Scan on p1_c1 p1_2
+               ->  Seq Scan on p1_c3 p1_4
+               ->  Parallel Seq Scan on p1_c2 p1_3
+               ->  Parallel Seq Scan on p1_c4 p1_5
+               ->  Parallel Seq Scan on p1_c1_c1 p1_6
+               ->  Parallel Seq Scan on p1_c1_c2 p1_7
+               ->  Parallel Seq Scan on p1_c3_c1 p1_8
+               ->  Parallel Seq Scan on p1_c3_c2 p1_9
          ->  Parallel Hash
                ->  Parallel Append
-                     ->  Seq Scan on p2_c2
-                     ->  Seq Scan on p2_c4
-                     ->  Seq Scan on p2_c1_c1
-                     ->  Seq Scan on p2_c1_c2
-                     ->  Seq Scan on p2_c3_c1
-                     ->  Seq Scan on p2_c3_c2
-                     ->  Seq Scan on p2
-                     ->  Seq Scan on p2_c1
-                     ->  Seq Scan on p2_c3
+                     ->  Seq Scan on p2_c2 p2_3
+                     ->  Seq Scan on p2_c4 p2_5
+                     ->  Seq Scan on p2_c1_c1 p2_6
+                     ->  Seq Scan on p2_c1_c2 p2_7
+                     ->  Seq Scan on p2_c3_c1 p2_8
+                     ->  Seq Scan on p2_c3_c2 p2_9
+                     ->  Seq Scan on p2 p2_1
+                     ->  Seq Scan on p2_c1 p2_2
+                     ->  Seq Scan on p2_c3 p2_4
 (25 rows)
 
 SET parallel_setup_cost to DEFAULT;
@@ -518,31 +518,31 @@ not used hint:
 duplication hint:
 error hint:
 
-               QUERY PLAN               
-----------------------------------------
+                 QUERY PLAN                  
+---------------------------------------------
  Hash Join
    Hash Cond: (p1.id = p2.id)
    ->  Append
-         ->  Seq Scan on p1
-         ->  Seq Scan on p1_c1
-         ->  Seq Scan on p1_c2
-         ->  Seq Scan on p1_c3
-         ->  Seq Scan on p1_c4
-         ->  Seq Scan on p1_c1_c1
-         ->  Seq Scan on p1_c1_c2
-         ->  Seq Scan on p1_c3_c1
-         ->  Seq Scan on p1_c3_c2
+         ->  Seq Scan on p1 p1_1
+         ->  Seq Scan on p1_c1 p1_2
+         ->  Seq Scan on p1_c2 p1_3
+         ->  Seq Scan on p1_c3 p1_4
+         ->  Seq Scan on p1_c4 p1_5
+         ->  Seq Scan on p1_c1_c1 p1_6
+         ->  Seq Scan on p1_c1_c2 p1_7
+         ->  Seq Scan on p1_c3_c1 p1_8
+         ->  Seq Scan on p1_c3_c2 p1_9
    ->  Hash
          ->  Append
-               ->  Seq Scan on p2
-               ->  Seq Scan on p2_c1
-               ->  Seq Scan on p2_c2
-               ->  Seq Scan on p2_c3
-               ->  Seq Scan on p2_c4
-               ->  Seq Scan on p2_c1_c1
-               ->  Seq Scan on p2_c1_c2
-               ->  Seq Scan on p2_c3_c1
-               ->  Seq Scan on p2_c3_c2
+               ->  Seq Scan on p2 p2_1
+               ->  Seq Scan on p2_c1 p2_2
+               ->  Seq Scan on p2_c2 p2_3
+               ->  Seq Scan on p2_c3 p2_4
+               ->  Seq Scan on p2_c4 p2_5
+               ->  Seq Scan on p2_c1_c1 p2_6
+               ->  Seq Scan on p2_c1_c2 p2_7
+               ->  Seq Scan on p2_c3_c1 p2_8
+               ->  Seq Scan on p2_c3_c2 p2_9
 (23 rows)
 
 /*+Parallel(p2 8 hard)*/
@@ -554,33 +554,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                      QUERY PLAN                       
--------------------------------------------------------
+                         QUERY PLAN                         
+------------------------------------------------------------
  Gather
    Workers Planned: 8
    ->  Parallel Hash Join
          Hash Cond: (p2.id = p1.id)
          ->  Parallel Append
-               ->  Seq Scan on p2
-               ->  Seq Scan on p2_c1
-               ->  Seq Scan on p2_c3
-               ->  Parallel Seq Scan on p2_c2
-               ->  Parallel Seq Scan on p2_c4
-               ->  Parallel Seq Scan on p2_c1_c1
-               ->  Parallel Seq Scan on p2_c1_c2
-               ->  Parallel Seq Scan on p2_c3_c1
-               ->  Parallel Seq Scan on p2_c3_c2
+               ->  Seq Scan on p2 p2_1
+               ->  Seq Scan on p2_c1 p2_2
+               ->  Seq Scan on p2_c3 p2_4
+               ->  Parallel Seq Scan on p2_c2 p2_3
+               ->  Parallel Seq Scan on p2_c4 p2_5
+               ->  Parallel Seq Scan on p2_c1_c1 p2_6
+               ->  Parallel Seq Scan on p2_c1_c2 p2_7
+               ->  Parallel Seq Scan on p2_c3_c1 p2_8
+               ->  Parallel Seq Scan on p2_c3_c2 p2_9
          ->  Parallel Hash
                ->  Parallel Append
-                     ->  Seq Scan on p1
-                     ->  Seq Scan on p1_c1
-                     ->  Seq Scan on p1_c3
-                     ->  Parallel Seq Scan on p1_c2
-                     ->  Parallel Seq Scan on p1_c4
-                     ->  Parallel Seq Scan on p1_c1_c1
-                     ->  Parallel Seq Scan on p1_c1_c2
-                     ->  Parallel Seq Scan on p1_c3_c1
-                     ->  Parallel Seq Scan on p1_c3_c2
+                     ->  Seq Scan on p1 p1_1
+                     ->  Seq Scan on p1_c1 p1_2
+                     ->  Seq Scan on p1_c3 p1_4
+                     ->  Parallel Seq Scan on p1_c2 p1_3
+                     ->  Parallel Seq Scan on p1_c4 p1_5
+                     ->  Parallel Seq Scan on p1_c1_c1 p1_6
+                     ->  Parallel Seq Scan on p1_c1_c2 p1_7
+                     ->  Parallel Seq Scan on p1_c3_c1 p1_8
+                     ->  Parallel Seq Scan on p1_c3_c2 p1_9
 (25 rows)
 
 -- Number of workers results to the largest number
@@ -595,33 +595,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                      QUERY PLAN                       
--------------------------------------------------------
+                         QUERY PLAN                         
+------------------------------------------------------------
  Gather
    Workers Planned: 8
    ->  Parallel Hash Join
          Hash Cond: (p1.id = p2.id)
          ->  Append
-               ->  Parallel Seq Scan on p1
-               ->  Parallel Seq Scan on p1_c1
-               ->  Parallel Seq Scan on p1_c2
-               ->  Parallel Seq Scan on p1_c3
-               ->  Parallel Seq Scan on p1_c4
-               ->  Parallel Seq Scan on p1_c1_c1
-               ->  Parallel Seq Scan on p1_c1_c2
-               ->  Parallel Seq Scan on p1_c3_c1
-               ->  Parallel Seq Scan on p1_c3_c2
+               ->  Parallel Seq Scan on p1 p1_1
+               ->  Parallel Seq Scan on p1_c1 p1_2
+               ->  Parallel Seq Scan on p1_c2 p1_3
+               ->  Parallel Seq Scan on p1_c3 p1_4
+               ->  Parallel Seq Scan on p1_c4 p1_5
+               ->  Parallel Seq Scan on p1_c1_c1 p1_6
+               ->  Parallel Seq Scan on p1_c1_c2 p1_7
+               ->  Parallel Seq Scan on p1_c3_c1 p1_8
+               ->  Parallel Seq Scan on p1_c3_c2 p1_9
          ->  Parallel Hash
                ->  Append
-                     ->  Parallel Seq Scan on p2
-                     ->  Parallel Seq Scan on p2_c1
-                     ->  Parallel Seq Scan on p2_c2
-                     ->  Parallel Seq Scan on p2_c3
-                     ->  Parallel Seq Scan on p2_c4
-                     ->  Parallel Seq Scan on p2_c1_c1
-                     ->  Parallel Seq Scan on p2_c1_c2
-                     ->  Parallel Seq Scan on p2_c3_c1
-                     ->  Parallel Seq Scan on p2_c3_c2
+                     ->  Parallel Seq Scan on p2 p2_1
+                     ->  Parallel Seq Scan on p2_c1 p2_2
+                     ->  Parallel Seq Scan on p2_c2 p2_3
+                     ->  Parallel Seq Scan on p2_c3 p2_4
+                     ->  Parallel Seq Scan on p2_c4 p2_5
+                     ->  Parallel Seq Scan on p2_c1_c1 p2_6
+                     ->  Parallel Seq Scan on p2_c1_c2 p2_7
+                     ->  Parallel Seq Scan on p2_c3_c1 p2_8
+                     ->  Parallel Seq Scan on p2_c3_c2 p2_9
 (25 rows)
 
 SET enable_parallel_append to true;
@@ -635,33 +635,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                      QUERY PLAN                       
--------------------------------------------------------
+                         QUERY PLAN                         
+------------------------------------------------------------
  Gather
    Workers Planned: 8
    ->  Parallel Hash Join
          Hash Cond: (p2.id = p1.id)
          ->  Parallel Append
-               ->  Seq Scan on p2
-               ->  Seq Scan on p2_c1
-               ->  Seq Scan on p2_c3
-               ->  Parallel Seq Scan on p2_c2
-               ->  Parallel Seq Scan on p2_c4
-               ->  Parallel Seq Scan on p2_c1_c1
-               ->  Parallel Seq Scan on p2_c1_c2
-               ->  Parallel Seq Scan on p2_c3_c1
-               ->  Parallel Seq Scan on p2_c3_c2
+               ->  Seq Scan on p2 p2_1
+               ->  Seq Scan on p2_c1 p2_2
+               ->  Seq Scan on p2_c3 p2_4
+               ->  Parallel Seq Scan on p2_c2 p2_3
+               ->  Parallel Seq Scan on p2_c4 p2_5
+               ->  Parallel Seq Scan on p2_c1_c1 p2_6
+               ->  Parallel Seq Scan on p2_c1_c2 p2_7
+               ->  Parallel Seq Scan on p2_c3_c1 p2_8
+               ->  Parallel Seq Scan on p2_c3_c2 p2_9
          ->  Parallel Hash
                ->  Parallel Append
-                     ->  Seq Scan on p1
-                     ->  Seq Scan on p1_c1
-                     ->  Seq Scan on p1_c3
-                     ->  Parallel Seq Scan on p1_c2
-                     ->  Parallel Seq Scan on p1_c4
-                     ->  Parallel Seq Scan on p1_c1_c1
-                     ->  Parallel Seq Scan on p1_c1_c2
-                     ->  Parallel Seq Scan on p1_c3_c1
-                     ->  Parallel Seq Scan on p1_c3_c2
+                     ->  Seq Scan on p1 p1_1
+                     ->  Seq Scan on p1_c1 p1_2
+                     ->  Seq Scan on p1_c3 p1_4
+                     ->  Parallel Seq Scan on p1_c2 p1_3
+                     ->  Parallel Seq Scan on p1_c4 p1_5
+                     ->  Parallel Seq Scan on p1_c1_c1 p1_6
+                     ->  Parallel Seq Scan on p1_c1_c2 p1_7
+                     ->  Parallel Seq Scan on p1_c3_c1 p1_8
+                     ->  Parallel Seq Scan on p1_c3_c2 p1_9
 (25 rows)
 
 -- Mixture with scan hints
@@ -677,33 +677,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                          QUERY PLAN                          
---------------------------------------------------------------
+                            QUERY PLAN                             
+-------------------------------------------------------------------
  Hash Join
    Hash Cond: (p2.id = p1.id)
    ->  Append
-         ->  Index Scan using p2_id2_val on p2
-         ->  Index Scan using p2_c1_id2_val on p2_c1
-         ->  Index Scan using p2_c2_id2_val on p2_c2
-         ->  Index Scan using p2_c3_id_val_idx on p2_c3
-         ->  Index Scan using p2_c4_id_val_idx on p2_c4
-         ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1
-         ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2
-         ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1
-         ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2
+         ->  Index Scan using p2_id2_val on p2 p2_1
+         ->  Index Scan using p2_c1_id2_val on p2_c1 p2_2
+         ->  Index Scan using p2_c2_id2_val on p2_c2 p2_3
+         ->  Index Scan using p2_c3_id_val_idx on p2_c3 p2_4
+         ->  Index Scan using p2_c4_id_val_idx on p2_c4 p2_5
+         ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1 p2_6
+         ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2 p2_7
+         ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1 p2_8
+         ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2 p2_9
    ->  Hash
          ->  Gather
                Workers Planned: 8
                ->  Append
-                     ->  Parallel Seq Scan on p1
-                     ->  Parallel Seq Scan on p1_c1
-                     ->  Parallel Seq Scan on p1_c2
-                     ->  Parallel Seq Scan on p1_c3
-                     ->  Parallel Seq Scan on p1_c4
-                     ->  Parallel Seq Scan on p1_c1_c1
-                     ->  Parallel Seq Scan on p1_c1_c2
-                     ->  Parallel Seq Scan on p1_c3_c1
-                     ->  Parallel Seq Scan on p1_c3_c2
+                     ->  Parallel Seq Scan on p1 p1_1
+                     ->  Parallel Seq Scan on p1_c1 p1_2
+                     ->  Parallel Seq Scan on p1_c2 p1_3
+                     ->  Parallel Seq Scan on p1_c3 p1_4
+                     ->  Parallel Seq Scan on p1_c4 p1_5
+                     ->  Parallel Seq Scan on p1_c1_c1 p1_6
+                     ->  Parallel Seq Scan on p1_c1_c2 p1_7
+                     ->  Parallel Seq Scan on p1_c3_c1 p1_8
+                     ->  Parallel Seq Scan on p1_c3_c2 p1_9
 (25 rows)
 
 SET enable_parallel_append to true;
@@ -717,33 +717,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                          QUERY PLAN                          
---------------------------------------------------------------
+                            QUERY PLAN                             
+-------------------------------------------------------------------
  Hash Join
    Hash Cond: (p2.id = p1.id)
    ->  Append
-         ->  Index Scan using p2_id2_val on p2
-         ->  Index Scan using p2_c1_id2_val on p2_c1
-         ->  Index Scan using p2_c2_id2_val on p2_c2
-         ->  Index Scan using p2_c3_id_val_idx on p2_c3
-         ->  Index Scan using p2_c4_id_val_idx on p2_c4
-         ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1
-         ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2
-         ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1
-         ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2
+         ->  Index Scan using p2_id2_val on p2 p2_1
+         ->  Index Scan using p2_c1_id2_val on p2_c1 p2_2
+         ->  Index Scan using p2_c2_id2_val on p2_c2 p2_3
+         ->  Index Scan using p2_c3_id_val_idx on p2_c3 p2_4
+         ->  Index Scan using p2_c4_id_val_idx on p2_c4 p2_5
+         ->  Index Scan using p2_c1_c1_id_val_idx on p2_c1_c1 p2_6
+         ->  Index Scan using p2_c1_c2_id_val_idx on p2_c1_c2 p2_7
+         ->  Index Scan using p2_c3_c1_id_val_idx on p2_c3_c1 p2_8
+         ->  Index Scan using p2_c3_c2_id_val_idx on p2_c3_c2 p2_9
    ->  Hash
          ->  Gather
                Workers Planned: 8
                ->  Parallel Append
-                     ->  Seq Scan on p1
-                     ->  Seq Scan on p1_c1
-                     ->  Seq Scan on p1_c3
-                     ->  Parallel Seq Scan on p1_c2
-                     ->  Parallel Seq Scan on p1_c4
-                     ->  Parallel Seq Scan on p1_c1_c1
-                     ->  Parallel Seq Scan on p1_c1_c2
-                     ->  Parallel Seq Scan on p1_c3_c1
-                     ->  Parallel Seq Scan on p1_c3_c2
+                     ->  Seq Scan on p1 p1_1
+                     ->  Seq Scan on p1_c1 p1_2
+                     ->  Seq Scan on p1_c3 p1_4
+                     ->  Parallel Seq Scan on p1_c2 p1_3
+                     ->  Parallel Seq Scan on p1_c4 p1_5
+                     ->  Parallel Seq Scan on p1_c1_c1 p1_6
+                     ->  Parallel Seq Scan on p1_c1_c2 p1_7
+                     ->  Parallel Seq Scan on p1_c3_c1 p1_8
+                     ->  Parallel Seq Scan on p1_c3_c2 p1_9
 (25 rows)
 
 -- Parallel sequential scan
@@ -758,33 +758,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                      QUERY PLAN                       
--------------------------------------------------------
+                         QUERY PLAN                         
+------------------------------------------------------------
  Gather
    Workers Planned: 8
    ->  Parallel Hash Join
          Hash Cond: (p1.id = p2.id)
          ->  Append
-               ->  Parallel Seq Scan on p1
-               ->  Parallel Seq Scan on p1_c1
-               ->  Parallel Seq Scan on p1_c2
-               ->  Parallel Seq Scan on p1_c3
-               ->  Parallel Seq Scan on p1_c4
-               ->  Parallel Seq Scan on p1_c1_c1
-               ->  Parallel Seq Scan on p1_c1_c2
-               ->  Parallel Seq Scan on p1_c3_c1
-               ->  Parallel Seq Scan on p1_c3_c2
+               ->  Parallel Seq Scan on p1 p1_1
+               ->  Parallel Seq Scan on p1_c1 p1_2
+               ->  Parallel Seq Scan on p1_c2 p1_3
+               ->  Parallel Seq Scan on p1_c3 p1_4
+               ->  Parallel Seq Scan on p1_c4 p1_5
+               ->  Parallel Seq Scan on p1_c1_c1 p1_6
+               ->  Parallel Seq Scan on p1_c1_c2 p1_7
+               ->  Parallel Seq Scan on p1_c3_c1 p1_8
+               ->  Parallel Seq Scan on p1_c3_c2 p1_9
          ->  Parallel Hash
                ->  Append
-                     ->  Parallel Seq Scan on p2
-                     ->  Parallel Seq Scan on p2_c1
-                     ->  Parallel Seq Scan on p2_c2
-                     ->  Parallel Seq Scan on p2_c3
-                     ->  Parallel Seq Scan on p2_c4
-                     ->  Parallel Seq Scan on p2_c1_c1
-                     ->  Parallel Seq Scan on p2_c1_c2
-                     ->  Parallel Seq Scan on p2_c3_c1
-                     ->  Parallel Seq Scan on p2_c3_c2
+                     ->  Parallel Seq Scan on p2 p2_1
+                     ->  Parallel Seq Scan on p2_c1 p2_2
+                     ->  Parallel Seq Scan on p2_c2 p2_3
+                     ->  Parallel Seq Scan on p2_c3 p2_4
+                     ->  Parallel Seq Scan on p2_c4 p2_5
+                     ->  Parallel Seq Scan on p2_c1_c1 p2_6
+                     ->  Parallel Seq Scan on p2_c1_c2 p2_7
+                     ->  Parallel Seq Scan on p2_c3_c1 p2_8
+                     ->  Parallel Seq Scan on p2_c3_c2 p2_9
 (25 rows)
 
 SET enable_parallel_append to true;
@@ -798,33 +798,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                      QUERY PLAN                       
--------------------------------------------------------
+                         QUERY PLAN                         
+------------------------------------------------------------
  Gather
    Workers Planned: 8
    ->  Parallel Hash Join
          Hash Cond: (p1.id = p2.id)
          ->  Parallel Append
-               ->  Seq Scan on p1
-               ->  Seq Scan on p1_c1
-               ->  Seq Scan on p1_c3
-               ->  Parallel Seq Scan on p1_c2
-               ->  Parallel Seq Scan on p1_c4
-               ->  Parallel Seq Scan on p1_c1_c1
-               ->  Parallel Seq Scan on p1_c1_c2
-               ->  Parallel Seq Scan on p1_c3_c1
-               ->  Parallel Seq Scan on p1_c3_c2
+               ->  Seq Scan on p1 p1_1
+               ->  Seq Scan on p1_c1 p1_2
+               ->  Seq Scan on p1_c3 p1_4
+               ->  Parallel Seq Scan on p1_c2 p1_3
+               ->  Parallel Seq Scan on p1_c4 p1_5
+               ->  Parallel Seq Scan on p1_c1_c1 p1_6
+               ->  Parallel Seq Scan on p1_c1_c2 p1_7
+               ->  Parallel Seq Scan on p1_c3_c1 p1_8
+               ->  Parallel Seq Scan on p1_c3_c2 p1_9
          ->  Parallel Hash
                ->  Parallel Append
-                     ->  Seq Scan on p2
-                     ->  Seq Scan on p2_c1
-                     ->  Seq Scan on p2_c3
-                     ->  Parallel Seq Scan on p2_c2
-                     ->  Parallel Seq Scan on p2_c4
-                     ->  Parallel Seq Scan on p2_c1_c1
-                     ->  Parallel Seq Scan on p2_c1_c2
-                     ->  Parallel Seq Scan on p2_c3_c1
-                     ->  Parallel Seq Scan on p2_c3_c2
+                     ->  Seq Scan on p2 p2_1
+                     ->  Seq Scan on p2_c1 p2_2
+                     ->  Seq Scan on p2_c3 p2_4
+                     ->  Parallel Seq Scan on p2_c2 p2_3
+                     ->  Parallel Seq Scan on p2_c4 p2_5
+                     ->  Parallel Seq Scan on p2_c1_c1 p2_6
+                     ->  Parallel Seq Scan on p2_c1_c2 p2_7
+                     ->  Parallel Seq Scan on p2_c3_c1 p2_8
+                     ->  Parallel Seq Scan on p2_c3_c2 p2_9
 (25 rows)
 
 -- Parallel index scan
@@ -839,33 +839,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                              QUERY PLAN                               
------------------------------------------------------------------------
+                                 QUERY PLAN                                 
+----------------------------------------------------------------------------
  Gather
    Workers Planned: 8
    ->  Parallel Hash Join
          Hash Cond: (p1.id = p2.id)
          ->  Append
-               ->  Parallel Index Scan using p1_pkey on p1
-               ->  Parallel Index Scan using p1_c1_pkey on p1_c1
-               ->  Parallel Index Scan using p1_c2_pkey on p1_c2
-               ->  Parallel Index Scan using p1_c3_pkey on p1_c3
-               ->  Parallel Index Scan using p1_c4_pkey on p1_c4
-               ->  Parallel Index Scan using p1_c1_c1_pkey on p1_c1_c1
-               ->  Parallel Index Scan using p1_c1_c2_pkey on p1_c1_c2
-               ->  Parallel Index Scan using p1_c3_c1_pkey on p1_c3_c1
-               ->  Parallel Index Scan using p1_c3_c2_pkey on p1_c3_c2
+               ->  Parallel Index Scan using p1_pkey on p1 p1_1
+               ->  Parallel Index Scan using p1_c1_pkey on p1_c1 p1_2
+               ->  Parallel Index Scan using p1_c2_pkey on p1_c2 p1_3
+               ->  Parallel Index Scan using p1_c3_pkey on p1_c3 p1_4
+               ->  Parallel Index Scan using p1_c4_pkey on p1_c4 p1_5
+               ->  Parallel Index Scan using p1_c1_c1_pkey on p1_c1_c1 p1_6
+               ->  Parallel Index Scan using p1_c1_c2_pkey on p1_c1_c2 p1_7
+               ->  Parallel Index Scan using p1_c3_c1_pkey on p1_c3_c1 p1_8
+               ->  Parallel Index Scan using p1_c3_c2_pkey on p1_c3_c2 p1_9
          ->  Parallel Hash
                ->  Append
-                     ->  Parallel Seq Scan on p2
-                     ->  Parallel Seq Scan on p2_c1
-                     ->  Parallel Seq Scan on p2_c2
-                     ->  Parallel Seq Scan on p2_c3
-                     ->  Parallel Seq Scan on p2_c4
-                     ->  Parallel Seq Scan on p2_c1_c1
-                     ->  Parallel Seq Scan on p2_c1_c2
-                     ->  Parallel Seq Scan on p2_c3_c1
-                     ->  Parallel Seq Scan on p2_c3_c2
+                     ->  Parallel Seq Scan on p2 p2_1
+                     ->  Parallel Seq Scan on p2_c1 p2_2
+                     ->  Parallel Seq Scan on p2_c2 p2_3
+                     ->  Parallel Seq Scan on p2_c3 p2_4
+                     ->  Parallel Seq Scan on p2_c4 p2_5
+                     ->  Parallel Seq Scan on p2_c1_c1 p2_6
+                     ->  Parallel Seq Scan on p2_c1_c2 p2_7
+                     ->  Parallel Seq Scan on p2_c3_c1 p2_8
+                     ->  Parallel Seq Scan on p2_c3_c2 p2_9
 (25 rows)
 
 SET enable_parallel_append to true;
@@ -879,33 +879,33 @@ not used hint:
 duplication hint:
 error hint:
 
-                              QUERY PLAN                               
------------------------------------------------------------------------
+                                 QUERY PLAN                                 
+----------------------------------------------------------------------------
  Gather
    Workers Planned: 8
    ->  Parallel Hash Join
          Hash Cond: (p1.id = p2.id)
          ->  Parallel Append
-               ->  Parallel Index Scan using p1_pkey on p1
-               ->  Parallel Index Scan using p1_c1_pkey on p1_c1
-               ->  Parallel Index Scan using p1_c2_pkey on p1_c2
-               ->  Parallel Index Scan using p1_c3_pkey on p1_c3
-               ->  Parallel Index Scan using p1_c4_pkey on p1_c4
-               ->  Parallel Index Scan using p1_c1_c1_pkey on p1_c1_c1
-               ->  Parallel Index Scan using p1_c1_c2_pkey on p1_c1_c2
-               ->  Parallel Index Scan using p1_c3_c1_pkey on p1_c3_c1
-               ->  Parallel Index Scan using p1_c3_c2_pkey on p1_c3_c2
+               ->  Parallel Index Scan using p1_pkey on p1 p1_1
+               ->  Parallel Index Scan using p1_c1_pkey on p1_c1 p1_2
+               ->  Parallel Index Scan using p1_c2_pkey on p1_c2 p1_3
+               ->  Parallel Index Scan using p1_c3_pkey on p1_c3 p1_4
+               ->  Parallel Index Scan using p1_c4_pkey on p1_c4 p1_5
+               ->  Parallel Index Scan using p1_c1_c1_pkey on p1_c1_c1 p1_6
+               ->  Parallel Index Scan using p1_c1_c2_pkey on p1_c1_c2 p1_7
+               ->  Parallel Index Scan using p1_c3_c1_pkey on p1_c3_c1 p1_8
+               ->  Parallel Index Scan using p1_c3_c2_pkey on p1_c3_c2 p1_9
          ->  Parallel Hash
                ->  Parallel Append
-                     ->  Seq Scan on p2
-                     ->  Seq Scan on p2_c1
-                     ->  Seq Scan on p2_c3
-                     ->  Parallel Seq Scan on p2_c2
-                     ->  Parallel Seq Scan on p2_c4
-                     ->  Parallel Seq Scan on p2_c1_c1
-                     ->  Parallel Seq Scan on p2_c1_c2
-                     ->  Parallel Seq Scan on p2_c3_c1
-                     ->  Parallel Seq Scan on p2_c3_c2
+                     ->  Seq Scan on p2 p2_1
+                     ->  Seq Scan on p2_c1 p2_2
+                     ->  Seq Scan on p2_c3 p2_4
+                     ->  Parallel Seq Scan on p2_c2 p2_3
+                     ->  Parallel Seq Scan on p2_c4 p2_5
+                     ->  Parallel Seq Scan on p2_c1_c1 p2_6
+                     ->  Parallel Seq Scan on p2_c1_c2 p2_7
+                     ->  Parallel Seq Scan on p2_c3_c1 p2_8
+                     ->  Parallel Seq Scan on p2_c3_c2 p2_9
 (25 rows)
 
 -- This hint doesn't turn on parallel, so the Parallel hint is ignored
@@ -920,56 +920,56 @@ Parallel(p1 0 hard)
 duplication hint:
 error hint:
 
-                       QUERY PLAN                       
---------------------------------------------------------
+                         QUERY PLAN                          
+-------------------------------------------------------------
  Hash Join
    Hash Cond: (p1.id = p2.id)
    ->  Append
-         ->  Index Scan using p1_pkey on p1
-         ->  Index Scan using p1_c1_pkey on p1_c1
-         ->  Index Scan using p1_c2_pkey on p1_c2
-         ->  Index Scan using p1_c3_pkey on p1_c3
-         ->  Index Scan using p1_c4_pkey on p1_c4
-         ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1
-         ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2
-         ->  Index Scan using p1_c3_c1_pkey on p1_c3_c1
-         ->  Index Scan using p1_c3_c2_pkey on p1_c3_c2
+         ->  Index Scan using p1_pkey on p1 p1_1
+         ->  Index Scan using p1_c1_pkey on p1_c1 p1_2
+         ->  Index Scan using p1_c2_pkey on p1_c2 p1_3
+         ->  Index Scan using p1_c3_pkey on p1_c3 p1_4
+         ->  Index Scan using p1_c4_pkey on p1_c4 p1_5
+         ->  Index Scan using p1_c1_c1_pkey on p1_c1_c1 p1_6
+         ->  Index Scan using p1_c1_c2_pkey on p1_c1_c2 p1_7
+         ->  Index Scan using p1_c3_c1_pkey on p1_c3_c1 p1_8
+         ->  Index Scan using p1_c3_c2_pkey on p1_c3_c2 p1_9
    ->  Hash
          ->  Append
-               ->  Seq Scan on p2
-               ->  Seq Scan on p2_c1
-               ->  Seq Scan on p2_c2
-               ->  Seq Scan on p2_c3
-               ->  Seq Scan on p2_c4
-               ->  Seq Scan on p2_c1_c1
-               ->  Seq Scan on p2_c1_c2
-               ->  Seq Scan on p2_c3_c1
-               ->  Seq Scan on p2_c3_c2
+               ->  Seq Scan on p2 p2_1
+               ->  Seq Scan on p2_c1 p2_2
+               ->  Seq Scan on p2_c2 p2_3
+               ->  Seq Scan on p2_c3 p2_4
+               ->  Seq Scan on p2_c4 p2_5
+               ->  Seq Scan on p2_c1_c1 p2_6
+               ->  Seq Scan on p2_c1_c2 p2_7
+               ->  Seq Scan on p2_c3_c1 p2_8
+               ->  Seq Scan on p2_c3_c2 p2_9
 (23 rows)
 
 -- Parallel on UNION
 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
    ->  Seq Scan on p1
-   ->  Seq Scan on p1_c1
-   ->  Seq Scan on p1_c2
-   ->  Seq Scan on p1_c3
-   ->  Seq Scan on p1_c4
-   ->  Seq Scan on p1_c1_c1
-   ->  Seq Scan on p1_c1_c2
-   ->  Seq Scan on p1_c3_c1
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1_c1 p1_1
+   ->  Seq Scan on p1_c2 p1_2
+   ->  Seq Scan on p1_c3 p1_3
+   ->  Seq Scan on p1_c4 p1_4
+   ->  Seq Scan on p1_c1_c1 p1_5
+   ->  Seq Scan on p1_c1_c2 p1_6
+   ->  Seq Scan on p1_c3_c1 p1_7
+   ->  Seq Scan on p1_c3_c2 p1_8
    ->  Seq Scan on p2
-   ->  Seq Scan on p2_c1
-   ->  Seq Scan on p2_c2
-   ->  Seq Scan on p2_c3
-   ->  Seq Scan on p2_c4
-   ->  Seq Scan on p2_c1_c1
-   ->  Seq Scan on p2_c1_c2
-   ->  Seq Scan on p2_c3_c1
-   ->  Seq Scan on p2_c3_c2
+   ->  Seq Scan on p2_c1 p2_1
+   ->  Seq Scan on p2_c2 p2_2
+   ->  Seq Scan on p2_c3 p2_3
+   ->  Seq Scan on p2_c4 p2_4
+   ->  Seq Scan on p2_c1_c1 p2_5
+   ->  Seq Scan on p2_c1_c2 p2_6
+   ->  Seq Scan on p2_c3_c1 p2_7
+   ->  Seq Scan on p2_c3_c2 p2_8
 (19 rows)
 
 -- parallel hinting on any relation enables parallel
@@ -987,29 +987,29 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Gather
    Workers Planned: 1
    ->  Parallel Append
-         ->  Parallel Seq Scan on p2_c2
-         ->  Parallel Seq Scan on p2_c4
-         ->  Parallel Seq Scan on p2_c1_c1
-         ->  Parallel Seq Scan on p2_c1_c2
-         ->  Parallel Seq Scan on p2_c3_c1
-         ->  Parallel Seq Scan on p2_c3_c2
+         ->  Parallel Seq Scan on p2_c2 p2_2
+         ->  Parallel Seq Scan on p2_c4 p2_4
+         ->  Parallel Seq Scan on p2_c1_c1 p2_5
+         ->  Parallel Seq Scan on p2_c1_c2 p2_6
+         ->  Parallel Seq Scan on p2_c3_c1 p2_7
+         ->  Parallel Seq Scan on p2_c3_c2 p2_8
          ->  Parallel Seq Scan on p1
-         ->  Parallel Seq Scan on p1_c1
-         ->  Parallel Seq Scan on p1_c2
-         ->  Parallel Seq Scan on p1_c3
-         ->  Parallel Seq Scan on p1_c4
-         ->  Parallel Seq Scan on p1_c1_c1
-         ->  Parallel Seq Scan on p1_c1_c2
-         ->  Parallel Seq Scan on p1_c3_c1
-         ->  Parallel Seq Scan on p1_c3_c2
+         ->  Parallel Seq Scan on p1_c1 p1_1
+         ->  Parallel Seq Scan on p1_c2 p1_2
+         ->  Parallel Seq Scan on p1_c3 p1_3
+         ->  Parallel Seq Scan on p1_c4 p1_4
+         ->  Parallel Seq Scan on p1_c1_c1 p1_5
+         ->  Parallel Seq Scan on p1_c1_c2 p1_6
+         ->  Parallel Seq Scan on p1_c3_c1 p1_7
+         ->  Parallel Seq Scan on p1_c3_c2 p1_8
          ->  Parallel Seq Scan on p2
-         ->  Parallel Seq Scan on p2_c1
-         ->  Parallel Seq Scan on p2_c3
+         ->  Parallel Seq Scan on p2_c1 p2_1
+         ->  Parallel Seq Scan on p2_c3 p2_3
 (21 rows)
 
 -- set hint has the same effect
@@ -1022,29 +1022,29 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Gather
    Workers Planned: 1
    ->  Parallel Append
-         ->  Parallel Seq Scan on p1_c2
-         ->  Parallel Seq Scan on p1_c4
-         ->  Parallel Seq Scan on p2_c2
-         ->  Parallel Seq Scan on p2_c4
-         ->  Parallel Seq Scan on p1_c1_c1
-         ->  Parallel Seq Scan on p1_c1_c2
-         ->  Parallel Seq Scan on p1_c3_c1
-         ->  Parallel Seq Scan on p1_c3_c2
-         ->  Parallel Seq Scan on p2_c1_c1
-         ->  Parallel Seq Scan on p2_c1_c2
-         ->  Parallel Seq Scan on p2_c3_c1
-         ->  Parallel Seq Scan on p2_c3_c2
+         ->  Parallel Seq Scan on p1_c2 p1_2
+         ->  Parallel Seq Scan on p1_c4 p1_4
+         ->  Parallel Seq Scan on p2_c2 p2_2
+         ->  Parallel Seq Scan on p2_c4 p2_4
+         ->  Parallel Seq Scan on p1_c1_c1 p1_5
+         ->  Parallel Seq Scan on p1_c1_c2 p1_6
+         ->  Parallel Seq Scan on p1_c3_c1 p1_7
+         ->  Parallel Seq Scan on p1_c3_c2 p1_8
+         ->  Parallel Seq Scan on p2_c1_c1 p2_5
+         ->  Parallel Seq Scan on p2_c1_c2 p2_6
+         ->  Parallel Seq Scan on p2_c3_c1 p2_7
+         ->  Parallel Seq Scan on p2_c3_c2 p2_8
          ->  Parallel Seq Scan on p1
-         ->  Parallel Seq Scan on p1_c1
-         ->  Parallel Seq Scan on p1_c3
+         ->  Parallel Seq Scan on p1_c1 p1_1
+         ->  Parallel Seq Scan on p1_c3 p1_3
          ->  Parallel Seq Scan on p2
-         ->  Parallel Seq Scan on p2_c1
-         ->  Parallel Seq Scan on p2_c3
+         ->  Parallel Seq Scan on p2_c1 p2_1
+         ->  Parallel Seq Scan on p2_c3 p2_3
 (21 rows)
 
 -- applies largest number of workers on merged parallel paths
@@ -1063,29 +1063,29 @@ not used hint:
 duplication hint:
 error hint:
 
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Gather
    Workers Planned: 6
    ->  Parallel Append
          ->  Seq Scan on p1
-         ->  Seq Scan on p1_c1
-         ->  Seq Scan on p1_c3
+         ->  Seq Scan on p1_c1 p1_1
+         ->  Seq Scan on p1_c3 p1_3
          ->  Seq Scan on p2
-         ->  Seq Scan on p2_c1
-         ->  Seq Scan on p2_c3
-         ->  Parallel Seq Scan on p1_c2
-         ->  Parallel Seq Scan on p1_c4
-         ->  Parallel Seq Scan on p1_c1_c1
-         ->  Parallel Seq Scan on p1_c1_c2
-         ->  Parallel Seq Scan on p1_c3_c1
-         ->  Parallel Seq Scan on p1_c3_c2
-         ->  Parallel Seq Scan on p2_c2
-         ->  Parallel Seq Scan on p2_c4
-         ->  Parallel Seq Scan on p2_c1_c1
-         ->  Parallel Seq Scan on p2_c1_c2
-         ->  Parallel Seq Scan on p2_c3_c1
-         ->  Parallel Seq Scan on p2_c3_c2
+         ->  Seq Scan on p2_c1 p2_1
+         ->  Seq Scan on p2_c3 p2_3
+         ->  Parallel Seq Scan on p1_c2 p1_2
+         ->  Parallel Seq Scan on p1_c4 p1_4
+         ->  Parallel Seq Scan on p1_c1_c1 p1_5
+         ->  Parallel Seq Scan on p1_c1_c2 p1_6
+         ->  Parallel Seq Scan on p1_c3_c1 p1_7
+         ->  Parallel Seq Scan on p1_c3_c2 p1_8
+         ->  Parallel Seq Scan on p2_c2 p2_2
+         ->  Parallel Seq Scan on p2_c4 p2_4
+         ->  Parallel Seq Scan on p2_c1_c1 p2_5
+         ->  Parallel Seq Scan on p2_c1_c2 p2_6
+         ->  Parallel Seq Scan on p2_c3_c1 p2_7
+         ->  Parallel Seq Scan on p2_c3_c2 p2_8
 (21 rows)
 
 -- Negative hints
@@ -1096,20 +1096,20 @@ SET min_parallel_table_scan_size to 0;
 SET min_parallel_index_scan_size to 0;
 SET max_parallel_workers_per_gather to 5;
 EXPLAIN (COSTS false) SELECT * FROM p1;
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Gather
    Workers Planned: 4
    ->  Parallel Append
-         ->  Parallel Seq Scan on p1_c2
-         ->  Parallel Seq Scan on p1_c4
-         ->  Parallel Seq Scan on p1_c1_c1
-         ->  Parallel Seq Scan on p1_c1_c2
-         ->  Parallel Seq Scan on p1_c3_c1
-         ->  Parallel Seq Scan on p1_c3_c2
-         ->  Parallel Seq Scan on p1
-         ->  Parallel Seq Scan on p1_c1
-         ->  Parallel Seq Scan on p1_c3
+         ->  Parallel Seq Scan on p1_c2 p1_3
+         ->  Parallel Seq Scan on p1_c4 p1_5
+         ->  Parallel Seq Scan on p1_c1_c1 p1_6
+         ->  Parallel Seq Scan on p1_c1_c2 p1_7
+         ->  Parallel Seq Scan on p1_c3_c1 p1_8
+         ->  Parallel Seq Scan on p1_c3_c2 p1_9
+         ->  Parallel Seq Scan on p1 p1_1
+         ->  Parallel Seq Scan on p1_c1 p1_2
+         ->  Parallel Seq Scan on p1_c3 p1_4
 (12 rows)
 
 SET enable_parallel_append to false;
@@ -1122,18 +1122,18 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
-   ->  Seq Scan on p1_c1
-   ->  Seq Scan on p1_c2
-   ->  Seq Scan on p1_c3
-   ->  Seq Scan on p1_c4
-   ->  Seq Scan on p1_c1_c1
-   ->  Seq Scan on p1_c1_c2
-   ->  Seq Scan on p1_c3_c1
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1 p1_1
+   ->  Seq Scan on p1_c1 p1_2
+   ->  Seq Scan on p1_c2 p1_3
+   ->  Seq Scan on p1_c3 p1_4
+   ->  Seq Scan on p1_c4 p1_5
+   ->  Seq Scan on p1_c1_c1 p1_6
+   ->  Seq Scan on p1_c1_c2 p1_7
+   ->  Seq Scan on p1_c3_c1 p1_8
+   ->  Seq Scan on p1_c3_c2 p1_9
 (10 rows)
 
 SET enable_parallel_append to true;
@@ -1146,18 +1146,18 @@ not used hint:
 duplication hint:
 error hint:
 
-         QUERY PLAN         
-----------------------------
+           QUERY PLAN            
+---------------------------------
  Append
-   ->  Seq Scan on p1
-   ->  Seq Scan on p1_c1
-   ->  Seq Scan on p1_c2
-   ->  Seq Scan on p1_c3
-   ->  Seq Scan on p1_c4
-   ->  Seq Scan on p1_c1_c1
-   ->  Seq Scan on p1_c1_c2
-   ->  Seq Scan on p1_c3_c1
-   ->  Seq Scan on p1_c3_c2
+   ->  Seq Scan on p1 p1_1
+   ->  Seq Scan on p1_c1 p1_2
+   ->  Seq Scan on p1_c2 p1_3
+   ->  Seq Scan on p1_c3 p1_4
+   ->  Seq Scan on p1_c4 p1_5
+   ->  Seq Scan on p1_c1_c1 p1_6
+   ->  Seq Scan on p1_c1_c2 p1_7
+   ->  Seq Scan on p1_c3_c1 p1_8
+   ->  Seq Scan on p1_c3_c2 p1_9
 (10 rows)
 
 -- Errors
@@ -1188,29 +1188,29 @@ Parallel(p1 8 soft)
 Parallel()
 Parallel()
 
-                QUERY PLAN                 
--------------------------------------------
+                   QUERY PLAN                   
+------------------------------------------------
  Gather
    Workers Planned: 1
    ->  Parallel Append
-         ->  Parallel Seq Scan on p1_c2
-         ->  Parallel Seq Scan on p1_c4
-         ->  Parallel Seq Scan on p2_c2
-         ->  Parallel Seq Scan on p2_c4
-         ->  Parallel Seq Scan on p1_c1_c1
-         ->  Parallel Seq Scan on p1_c1_c2
-         ->  Parallel Seq Scan on p1_c3_c1
-         ->  Parallel Seq Scan on p1_c3_c2
-         ->  Parallel Seq Scan on p2_c1_c1
-         ->  Parallel Seq Scan on p2_c1_c2
-         ->  Parallel Seq Scan on p2_c3_c1
-         ->  Parallel Seq Scan on p2_c3_c2
+         ->  Parallel Seq Scan on p1_c2 p1_2
+         ->  Parallel Seq Scan on p1_c4 p1_4
+         ->  Parallel Seq Scan on p2_c2 p2_2
+         ->  Parallel Seq Scan on p2_c4 p2_4
+         ->  Parallel Seq Scan on p1_c1_c1 p1_5
+         ->  Parallel Seq Scan on p1_c1_c2 p1_6
+         ->  Parallel Seq Scan on p1_c3_c1 p1_7
+         ->  Parallel Seq Scan on p1_c3_c2 p1_8
+         ->  Parallel Seq Scan on p2_c1_c1 p2_5
+         ->  Parallel Seq Scan on p2_c1_c2 p2_6
+         ->  Parallel Seq Scan on p2_c3_c1 p2_7
+         ->  Parallel Seq Scan on p2_c3_c2 p2_8
          ->  Parallel Seq Scan on p1
-         ->  Parallel Seq Scan on p1_c1
-         ->  Parallel Seq Scan on p1_c3
+         ->  Parallel Seq Scan on p1_c1 p1_1
+         ->  Parallel Seq Scan on p1_c3 p1_3
          ->  Parallel Seq Scan on p2
-         ->  Parallel Seq Scan on p2_c1
-         ->  Parallel Seq Scan on p2_c3
+         ->  Parallel Seq Scan on p2_c1 p2_1
+         ->  Parallel Seq Scan on p2_c3 p2_3
 (21 rows)
 
 -- Hints on unhintable relations are just ignored
@@ -1253,23 +1253,23 @@ error hint:
                ->  Gather
                      Workers Planned: 5
                      ->  Parallel Append
-                           ->  Seq Scan on p1
+                           ->  Seq Scan on p1 p1_1
                                  Filter: ((id % 2) = 0)
-                           ->  Seq Scan on p1_c1
+                           ->  Seq Scan on p1_c1 p1_2
                                  Filter: ((id % 2) = 0)
-                           ->  Seq Scan on p1_c3
+                           ->  Seq Scan on p1_c3 p1_4
                                  Filter: ((id % 2) = 0)
-                           ->  Parallel Seq Scan on p1_c2
+                           ->  Parallel Seq Scan on p1_c2 p1_3
                                  Filter: ((id % 2) = 0)
-                           ->  Parallel Seq Scan on p1_c4
+                           ->  Parallel Seq Scan on p1_c4 p1_5
                                  Filter: ((id % 2) = 0)
-                           ->  Parallel Seq Scan on p1_c1_c1
+                           ->  Parallel Seq Scan on p1_c1_c1 p1_6
                                  Filter: ((id % 2) = 0)
-                           ->  Parallel Seq Scan on p1_c1_c2
+                           ->  Parallel Seq Scan on p1_c1_c2 p1_7
                                  Filter: ((id % 2) = 0)
-                           ->  Parallel Seq Scan on p1_c3_c1
+                           ->  Parallel Seq Scan on p1_c3_c1 p1_8
                                  Filter: ((id % 2) = 0)
-                           ->  Parallel Seq Scan on p1_c3_c2
+                           ->  Parallel Seq Scan on p1_c3_c2 p1_9
                                  Filter: ((id % 2) = 0)
    ->  Function Scan on pg_stat_statements
    ->  Subquery Scan on "*SELECT* 5"
index e34bded..8eef7ef 100644 (file)
@@ -405,8 +405,9 @@ static void pg_hint_plan_ProcessUtility(PlannedStmt *pstmt,
                                        const char *queryString,
                                        ProcessUtilityContext context,
                                        ParamListInfo params, QueryEnvironment *queryEnv,
-                                       DestReceiver *dest, char *completionTag);
-static PlannedStmt *pg_hint_plan_planner(Query *parse, int cursorOptions,
+                                       DestReceiver *dest, QueryCompletion *qc);
+static PlannedStmt *pg_hint_plan_planner(Query *parse, const char *query_string,
+                                                                                int cursorOptions,
                                                                                 ParamListInfo boundParams);
 static RelOptInfo *pg_hint_plan_join_search(PlannerInfo *root,
                                                                                        int levels_needed,
@@ -480,10 +481,11 @@ void pg_hint_plan_set_rel_pathlist(PlannerInfo * root, RelOptInfo *rel,
 static void create_plain_partial_paths(PlannerInfo *root,
                                                                                                        RelOptInfo *rel);
 static void make_rels_by_clause_joins(PlannerInfo *root, RelOptInfo *old_rel,
+                                                                         List *other_rels_list,
                                                                          ListCell *other_rels);
 static void make_rels_by_clauseless_joins(PlannerInfo *root,
                                                                                  RelOptInfo *old_rel,
-                                                                                 ListCell *other_rels);
+                                                                                 List *other_rels);
 static bool has_join_restriction(PlannerInfo *root, RelOptInfo *rel);
 static void set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel,
                                                                   RangeTblEntry *rte);
@@ -3012,14 +3014,14 @@ static void
 pg_hint_plan_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
                                        ProcessUtilityContext context,
                                        ParamListInfo params, QueryEnvironment *queryEnv,
-                                       DestReceiver *dest, char *completionTag)
+                                       DestReceiver *dest, QueryCompletion *qc)
 {
        if (prev_ProcessUtility_hook)
                prev_ProcessUtility_hook(pstmt, queryString, context, params, queryEnv,
-                                                                dest, completionTag);
+                                                                dest, qc);
        else
                standard_ProcessUtility(pstmt, queryString, context, params, queryEnv,
-                                                                dest, completionTag);
+                                                                dest, qc);
 
        if (plpgsql_recurse_level == 0)
                current_hint_retrieved = false;
@@ -3029,7 +3031,7 @@ pg_hint_plan_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
  * Read and set up hint information
  */
 static PlannedStmt *
-pg_hint_plan_planner(Query *parse, int cursorOptions, ParamListInfo boundParams)
+pg_hint_plan_planner(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams)
 {
        int                             save_nestlevel;
        PlannedStmt        *result;
@@ -3143,9 +3145,11 @@ pg_hint_plan_planner(Query *parse, int cursorOptions, ParamListInfo boundParams)
        PG_TRY();
        {
                if (prev_planner)
-                       result = (*prev_planner) (parse, cursorOptions, boundParams);
+                       result = (*prev_planner) (parse, query_string,
+                                                                         cursorOptions, boundParams);
                else
-                       result = standard_planner(parse, cursorOptions, boundParams);
+                       result = standard_planner(parse, query_string,
+                                                                         cursorOptions, boundParams);
 
                current_hint_str = prev_hint_str;
                recurse_level--;
@@ -3201,9 +3205,11 @@ standard_planner_proc:
        }
        current_hint_state = NULL;
        if (prev_planner)
-               result =  (*prev_planner) (parse, cursorOptions, boundParams);
+               result =  (*prev_planner) (parse, query_string,
+                                                                  cursorOptions, boundParams);
        else
-               result = standard_planner(parse, cursorOptions, boundParams);
+               result = standard_planner(parse, query_string,
+                                                                 cursorOptions, boundParams);
 
        /* The upper-level planner still needs the current hint state */
        if (HintStateStack != NIL)
@@ -3390,7 +3396,6 @@ restrict_indexes(PlannerInfo *root, ScanMethodHint *hint, RelOptInfo *rel,
                           bool using_parent_hint)
 {
        ListCell           *cell;
-       ListCell           *prev;
        ListCell           *next;
        StringInfoData  buf;
        RangeTblEntry  *rte = root->simple_rte_array[rel->relid];
@@ -3420,7 +3425,6 @@ restrict_indexes(PlannerInfo *root, ScanMethodHint *hint, RelOptInfo *rel,
         * Leaving only an specified index, we delete it from a IndexOptInfo list
         * other than it.
         */
-       prev = NULL;
        if (debug_level > 0)
                initStringInfo(&buf);
 
@@ -3431,8 +3435,7 @@ restrict_indexes(PlannerInfo *root, ScanMethodHint *hint, RelOptInfo *rel,
                ListCell           *l;
                bool                    use_index = false;
 
-               next = lnext(cell);
-
+               next = lnext(rel->indexlist, cell);
                foreach(l, hint->indexnames)
                {
                        char   *hintname = (char *) lfirst(l);
@@ -3602,10 +3605,18 @@ restrict_indexes(PlannerInfo *root, ScanMethodHint *hint, RelOptInfo *rel,
                }
 
                if (!use_index)
-                       rel->indexlist = list_delete_cell(rel->indexlist, cell, prev);
-               else
-                       prev = cell;
+               {
+                       rel->indexlist = list_delete_cell(rel->indexlist, cell);
 
+                       /*
+                        * the elements after cell moved to the list head by 1 element.
+                        * the next iteration should visit the cell at the same address if
+                        * any.
+                        */
+                       if (next)
+                               next = cell;
+               }
+                       
                pfree(indexname);
        }
 
@@ -3865,7 +3876,7 @@ setup_hint_enforcement(PlannerInfo *root, RelOptInfo *rel,
 
                                parentrel_oid =
                                        root->simple_rte_array[current_hint_state->parent_relid]->relid;
-                               parent_rel = heap_open(parentrel_oid, NoLock);
+                               parent_rel = table_open(parentrel_oid, NoLock);
 
                                /* Search the parent relation for indexes match the hint spec */
                                foreach(l, RelationGetIndexList(parent_rel))
@@ -3889,7 +3900,7 @@ setup_hint_enforcement(PlannerInfo *root, RelOptInfo *rel,
                                                lappend(current_hint_state->parent_index_infos,
                                                                parent_index_info);
                                }
-                               heap_close(parent_rel, NoLock);
+                               table_close(parent_rel, NoLock);
                        }
                }
        }
@@ -4069,8 +4080,8 @@ OuterInnerJoinCreate(OuterInnerRels *outer_inner, LeadingHint *leading_hint,
                                                                                 leading_hint->base.hint_str));
        }
 
-       outer_rels = lfirst(outer_inner->outer_inner_pair->head);
-       inner_rels = lfirst(outer_inner->outer_inner_pair->tail);
+       outer_rels = linitial(outer_inner->outer_inner_pair);
+       inner_rels = llast(outer_inner->outer_inner_pair);
 
        outer_relids = OuterInnerJoinCreate(outer_rels,
                                                                                leading_hint,
@@ -4377,14 +4388,13 @@ transform_join_hints(HintState *hstate, PlannerInfo *root, int nbaserel,
                {
                        if (hstate->join_hint_level[i] != NIL)
                        {
-                               ListCell *prev = NULL;
                                ListCell *next = NULL;
                                for(l = list_head(hstate->join_hint_level[i]); l; l = next)
                                {
 
                                        JoinMethodHint *hint = (JoinMethodHint *)lfirst(l);
 
-                                       next = lnext(l);
+                                       next = lnext(hstate->join_hint_level[i], l);
 
                                        if (hint->inner_nrels == 0 &&
                                                !(bms_intersect(hint->joinrelids, joinrelids) == NULL ||
@@ -4392,11 +4402,8 @@ transform_join_hints(HintState *hstate, PlannerInfo *root, int nbaserel,
                                                  hint->joinrelids)))
                                        {
                                                hstate->join_hint_level[i] =
-                                                       list_delete_cell(hstate->join_hint_level[i], l,
-                                                                                        prev);
+                                                       list_delete_cell(hstate->join_hint_level[i], l);
                                        }
-                                       else
-                                               prev = l;
                                }
                        }
                }