Lists: | pgsql-hackers |
---|
From: | Alena Rybakina <a(dot)rybakina(at)postgrespro(dot)ru> |
---|---|
To: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Invalid Path with UpperRel |
Date: | 2023-10-27 08:53:12 |
Message-ID: | [email protected] |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-hackers |
Hi, hackers!
I recently encountered strange behavior when, after running the
create_ms.sql test, I ran the last query from this test. In general, the
playback looks like this:
\i src/test/regress/sql/create_misc.sql
I added Assert(0) in create_sort_plan() before calling
create_plan_recurse and restarted postgres. After that I run query:
SELECT relname, reltoastrelid <> 0 AS has_toast_table
FROM pg_class
WHERE oid::regclass IN ('a_star', 'c_star')
ORDER BY 1;
I found Invalid_path in cheapest_startup_path:
(gdb) p *(IndexPath *)((SortPath
*)best_path)->subpath->parent->cheapest_startup_path
$12 = {path = {type = T_Invalid, pathtype = T_Invalid, parent =
0x7f7f7f7f7f7f7f7f, pathtarget = 0x7f7f7f7f7f7f7f7f, param_info =
0x7f7f7f7f7f7f7f7f,
parallel_aware = 127, parallel_safe = 127, parallel_workers =
2139062143 <tel:2139062143>, rows = 1.3824172084878715e+306,
startup_cost = 1.3824172084878715e+306,
total_cost = 1.3824172084878715e+306, pathkeys =
0x7f7f7f7f7f7f7f7f}, indexinfo = 0x7f7f7f7f7f7f7f7f, indexclauses =
0x7f7f7f7f7f7f7f7f,
indexorderbys = 0x7f7f7f7f7f7f7f7f, indexorderbycols =
0x7f7f7f7f7f7f7f7f, indexscandir = 2139062143 <tel:2139062143>,
indextotalcost = 1.3824172084878715e+306,
indexselectivity = 1.3824172084878715e+306}
(gdb) p (IndexPath *)((SortPath
*)best_path)->subpath->parent->cheapest_startup_path
$11 = (IndexPath *) 0x555febc66160
I found that this beginning since creation upperrel (fetch_upper_rel
function):
/* primary planning entry point (may recurse for subqueries) */ root =
subquery_planner(glob, parse, NULL, false, tuple_fraction); /*
Select best Path and turn it into a Plan */ * final_rel =
fetch_upper_rel(root, UPPERREL_FINAL, NULL);* best_path =
get_cheapest_fractional_path(final_rel, tuple_fraction);
Red Heart
(gdb) p *(IndexPath *)((SortPath *)final_rel->cheapest_total_path
)->subpath->parent->cheapest_startup_path
$15 = {path = {type = T_Invalid, pathtype = T_Invalid, parent =
0x7f7f7f7f7f7f7f7f, pathtarget = 0x7f7f7f7f7f7f7f7f, param_info =
0x7f7f7f7f7f7f7f7f,
parallel_aware = 127, parallel_safe = 127, parallel_workers =
2139062143 <tel:2139062143>, rows = 1.3824172084878715e+306,
startup_cost = 1.3824172084878715e+306,
total_cost = 1.3824172084878715e+306, pathkeys =
0x7f7f7f7f7f7f7f7f}, indexinfo = 0x7f7f7f7f7f7f7f7f, indexclauses =
0x7f7f7f7f7f7f7f7f,
indexorderbys = 0x7f7f7f7f7f7f7f7f, indexorderbycols =
0x7f7f7f7f7f7f7f7f, indexscandir = 2139062143 <tel:2139062143>,
indextotalcost = 1.3824172084878715e+306,
indexselectivity = 1.3824172084878715e+306}
(gdb) p (IndexPath *)((SortPath *)final_rel->cheapest_total_path
)->subpath->parent->cheapest_startup_path
$16 = (IndexPath *) 0x555febc66160
I know it doesn't cause a crash anywhere, but can anybody explain me
what's going on here and why Invalid Path appears?
--
Regards,
Alena Rybakina