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