From 8cf647f2995afbd594d67abb1e6556b97096a1c6 Mon Sep 17 00:00:00 2001 From: Sven Klemm Date: Thu, 24 Sep 2020 04:42:45 +0200 Subject: [PATCH] Adjust hypertable expansion to PG13 changes PG13 merges setup_append_rel_array into setup_simple_rel_arrays which we use to build the append_rel_array. https://github.com/postgres/postgres/commit/1661a40505 Signed-off-by: Maxim Kochetkov Fetch from: https://github.com/timescale/timescaledb/pull/2735/commits/e6e2711d8e00958cb0a35c23f4e81a75f273113a.patch --- src/plan_expand_hypertable.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/plan_expand_hypertable.c b/src/plan_expand_hypertable.c index 2b99c93b..4baa1b4c 100644 --- a/src/plan_expand_hypertable.c +++ b/src/plan_expand_hypertable.c @@ -95,6 +95,24 @@ is_time_bucket_function(Expr *node) return false; } +#if PG13_GE +/* PG13 merged setup_append_rel_array with setup_simple_rel_arrays */ +static void +setup_append_rel_array(PlannerInfo *root) +{ + root->append_rel_array = + repalloc(root->append_rel_array, root->simple_rel_array_size * sizeof(AppendRelInfo *)); + ListCell *lc; + foreach (lc, root->append_rel_list) + { + AppendRelInfo *appinfo = lfirst_node(AppendRelInfo, lc); + int child_relid = appinfo->child_relid; + + root->append_rel_array[child_relid] = appinfo; + } +} +#endif + /* * Pre-check to determine if an expression is eligible for constification. * A more thorough check is in constify_timestamptz_op_interval. @@ -1146,7 +1164,6 @@ ts_plan_expand_hypertable_chunks(Hypertable *ht, PlannerInfo *root, RelOptInfo * .join_conditions = NIL, .propagate_conditions = NIL, }; - Size old_rel_array_len; Index first_chunk_index = 0; #if PG12_GE Index i; @@ -1178,6 +1195,11 @@ ts_plan_expand_hypertable_chunks(Hypertable *ht, PlannerInfo *root, RelOptInfo * propagate_join_quals(root, rel, &ctx); inh_oids = get_chunk_oids(&ctx, root, rel, ht); + + /* nothing to do here if we have no chunks and no data nodes */ + if (list_length(inh_oids) + list_length(ht->data_nodes) == 0) + return; + oldrelation = table_open(parent_oid, NoLock); /* @@ -1185,7 +1207,10 @@ ts_plan_expand_hypertable_chunks(Hypertable *ht, PlannerInfo *root, RelOptInfo * * children to them. We include potential data node rels we might need to * create in case of a distributed hypertable. */ - old_rel_array_len = root->simple_rel_array_size; +#if PG12_GE + expand_planner_arrays(root, list_length(inh_oids) + list_length(ht->data_nodes)); +#else + Size old_rel_array_len = root->simple_rel_array_size; root->simple_rel_array_size += (list_length(inh_oids) + list_length(ht->data_nodes)); root->simple_rel_array = repalloc(root->simple_rel_array, root->simple_rel_array_size * sizeof(RelOptInfo *)); @@ -1200,6 +1225,7 @@ ts_plan_expand_hypertable_chunks(Hypertable *ht, PlannerInfo *root, RelOptInfo * memset(root->simple_rte_array + old_rel_array_len, 0, list_length(inh_oids) * sizeof(*root->simple_rte_array)); +#endif /* Adding partition info will make PostgreSQL consider the inheritance * children as part of a partitioned relation. This will enable -- 2.29.2