- 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.
* 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
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.
* 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);
* 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
*/
make_rels_by_clauseless_joins(root,
old_rel,
- list_head(joinrels[1]));
+ joinrels[1]);
}
}
foreach(r, joinrels[k])
{
RelOptInfo *old_rel = (RelOptInfo *) lfirst(r);
+ List *other_rels_list;
ListCell *other_rels;
ListCell *r2;
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);
make_rels_by_clauseless_joins(root,
old_rel,
- list_head(joinrels[1]));
+ joinrels[1]);
}
/*----------
* 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.
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);
* 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.
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);
}
/*
+ * 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"
{
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. */
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;
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
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));
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
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;
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)
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)
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)
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)
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
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)
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)
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)
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
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)
-> 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)
-> 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)
-> 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)
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
-> 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
-> 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
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
-> 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)
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
-> 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)
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
-> 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
-> 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
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)
-> 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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
-- 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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | on
enable_material | on
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)*/
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | on
enable_material | on
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;
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | on
enable_material | on
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)*/
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | on
enable_material | on
enable_seqscan | on
enable_sort | on
enable_tidscan | on
-(46 rows)
+(47 rows)
EXPLAIN (COSTS false) EXECUTE p1;
QUERY PLAN
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | on
enable_material | on
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;
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | on
enable_material | on
enable_seqscan | on
enable_sort | on
enable_tidscan | on
-(46 rows)
+(47 rows)
-- No. A-12-1-4
-- No. A-12-2-4
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | on
enable_material | on
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;
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | on
enable_material | on
enable_seqscan | on
enable_sort | on
enable_tidscan | on
-(46 rows)
+(47 rows)
DEALLOCATE p1;
SET pg_hint_plan.parse_messages TO LOG;
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | off
enable_material | on
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;
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | off
enable_material | on
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
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | off
enable_material | on
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)*/
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | off
enable_material | on
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
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | off
enable_material | on
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;
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | off
enable_material | on
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
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)*/
--------------------------------------------------
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)
---- 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
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
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)*/
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 */
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)
----
-> 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)*/
-> 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
-> 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
-> 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)
----
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)*/
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
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)*/
\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)*/
\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
-- 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)
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)
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)
"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
-- 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)
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-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)
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)
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)
----
-- 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)
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)
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)
---- 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)
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)
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)
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
\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
\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
\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)
----
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)
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)
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)
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;
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;
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;
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)
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;
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
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;
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;
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;
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;
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)*/
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
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;
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
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;
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
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;
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
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;
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
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
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
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
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
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;
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;
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
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
-> 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"
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,
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);
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;
* 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;
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--;
}
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)
bool using_parent_hint)
{
ListCell *cell;
- ListCell *prev;
ListCell *next;
StringInfoData buf;
RangeTblEntry *rte = root->simple_rte_array[rel->relid];
* Leaving only an specified index, we delete it from a IndexOptInfo list
* other than it.
*/
- prev = NULL;
if (debug_level > 0)
initStringInfo(&buf);
ListCell *l;
bool use_index = false;
- next = lnext(cell);
-
+ next = lnext(rel->indexlist, cell);
foreach(l, hint->indexnames)
{
char *hintname = (char *) lfirst(l);
}
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);
}
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))
lappend(current_hint_state->parent_index_infos,
parent_index_info);
}
- heap_close(parent_rel, NoLock);
+ table_close(parent_rel, NoLock);
}
}
}
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,
{
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 ||
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;
}
}
}