add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
select version();
version
PostgreSQL 13.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.4.1 20200928 (Red Hat 8.4.1-1), 64-bit
create table if not exists stack (
parent int,
child int
);
insert into stack (parent, child) values
(1,2),
(2,3),
(3,4),
(4,5),
(5,6),
(6,7),
(7,8),
(8,9),
(9,null),
(1,7),
(7,8),
(8,9),
(9,null);
13 rows affected
with recursive
good_stack as (select distinct * from stack)
,cte as
(
select
parent,
child,
0 as level,
array[parent,
child] as path
from good_stack
where good_stack.parent = 1
union all
select
good_stack.parent,
good_stack.child,
cte.level + 1,
cte.path || good_stack.child
from cte
left join good_stack on cte.child = good_stack.parent
where cte.child is not null and good_stack.child is not null
)
select * from cte;
parent child level path
1 2 0 {1,2}
1 7 0 {1,7}
7 8 1 {1,7,8}
2 3 1 {1,2,3}
3 4 2 {1,2,3,4}
8 9 2 {1,7,8,9}
4 5 3 {1,2,3,4,5}
5 6 4 {1,2,3,4,5,6}
6 7 5 {1,2,3,4,5,6,7}
7 8 6 {1,2,3,4,5,6,7,8}
8 9 7 {1,2,3,4,5,6,7,8,9}