From 06e9ea4027c1994c726af333f29c773c0a88c3a5 Mon Sep 17 00:00:00 2001 From: naisila Date: Thu, 20 Jul 2023 16:08:31 +0300 Subject: [PATCH] Fix assert crash execMain.c l603 /* * Only relation RTEs and subquery RTEs that were once relation * RTEs (views) have their perminfoindex set. */ Assert(rte->rtekind == RTE_RELATION || (rte->rtekind == RTE_SUBQUERY && rte->relkind == RELKIND_VIEW)); Scenario that was crashing because RTE_RELATION was converted to RTE_SUBQUERY: CREATE TABLE events_table_local(user_id bigint, value_1 int, value_2 int); INSERT INTO events_table_local SELECT i, i %9, i %50 FROM generate_series(0, 100) i; CREATE TABLE events_table_part(user_id bigint, value_1 int, value_2 int) PARTITION BY RANGE (value_1); CREATE TABLE events_table_part_0 PARTITION OF events_table_part FOR VALUES FROM (0) TO (1); CREATE TABLE events_table_part_1 PARTITION OF events_table_part FOR VALUES FROM (1) TO (2); CREATE TABLE events_table_part_2 PARTITION OF events_table_part FOR VALUES FROM (2) TO (3); CREATE TABLE events_table_part_3 PARTITION OF events_table_part FOR VALUES FROM (3) TO (4); CREATE TABLE events_table_part_4 PARTITION OF events_table_part FOR VALUES FROM (4) TO (5); CREATE TABLE events_table_part_5 PARTITION OF events_table_part FOR VALUES FROM (5) TO (6); CREATE TABLE events_table_part_6 PARTITION OF events_table_part FOR VALUES FROM (6) TO (7); CREATE TABLE events_table_part_7 PARTITION OF events_table_part FOR VALUES FROM (7) TO (8); CREATE TABLE events_table_part_8 PARTITION OF events_table_part FOR VALUES FROM (8) TO (9); SELECT create_distributed_table('events_table_part', 'user_id'); INSERT INTO events_table_part SELECT i, i %9, i %50 FROM generate_series(0, 100) i; CREATE TABLE users_table_part(user_id bigint, value_1 int, value_2 int) PARTITION BY RANGE (value_1); CREATE TABLE users_table_part_0 PARTITION OF users_table_part FOR VALUES FROM (0) TO (1); CREATE TABLE users_table_part_1 PARTITION OF users_table_part FOR VALUES FROM (1) TO (2); CREATE TABLE users_table_part_2 PARTITION OF users_table_part FOR VALUES FROM (2) TO (3); CREATE TABLE users_table_part_3 PARTITION OF users_table_part FOR VALUES FROM (3) TO (4); CREATE TABLE users_table_part_4 PARTITION OF users_table_part FOR VALUES FROM (4) TO (5); CREATE TABLE users_table_part_5 PARTITION OF users_table_part FOR VALUES FROM (5) TO (6); CREATE TABLE users_table_part_6 PARTITION OF users_table_part FOR VALUES FROM (6) TO (7); CREATE TABLE users_table_part_7 PARTITION OF users_table_part FOR VALUES FROM (7) TO (8); CREATE TABLE users_table_part_8 PARTITION OF users_table_part FOR VALUES FROM (8) TO (9); SELECT create_distributed_table('users_table_part', 'user_id'); INSERT INTO users_table_part SELECT i, i %9, i %50 FROM generate_series(0, 100) i; SELECT * FROM (SELECT * FROM events_table_local UNION ALL SELECT events_table_local.* FROM events_table_part JOIN events_table_local USING(user_id)) AS foo JOIN users_table_part USING(user_id) LIMIT 1; $$); --- src/backend/distributed/planner/recursive_planning.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/distributed/planner/recursive_planning.c b/src/backend/distributed/planner/recursive_planning.c index c50eb78e0..10dad962d 100644 --- a/src/backend/distributed/planner/recursive_planning.c +++ b/src/backend/distributed/planner/recursive_planning.c @@ -1780,6 +1780,9 @@ ReplaceRTERelationWithRteSubquery(RangeTblEntry *rangeTableEntry, /* replace the function with the constructed subquery */ rangeTableEntry->rtekind = RTE_SUBQUERY; +#if PG_VERSION_NUM >= PG_VERSION_16 + rangeTableEntry->perminfoindex = 0; +#endif rangeTableEntry->subquery = subquery; /*