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 * into tablename
from(
values
('gadgets',1,4, 1),
('games', 2,3, 2)
)t(name, lft, rgt, level);
SELECT 2
select * into newNodes
from(
values
('console'),
('cartridge')
)t(name);
SELECT 2
create procedure addNodesFromNewNodes(posname varchar(10))
LANGUAGE plpgsql
as $$
declare
pos int; lvl int;
N int;
begin
select rgt, level into pos, lvl
FROM tablename
WHERE Name = posname;
select count(*) into N
from newNodes;
update tablename
set lft = lft + 2*N
where lft > pos;
update tablename
set rgt = rgt + 2*N
where rgt > pos;
insert into tablename(name, lft, rgt, level)
select t.Name, pos + 2 * rn - 1, pos + 2 * rn, lvl
from (
select Name, row_number() over(order by name) rn
from NewNodes
) t;
end;
$$
CREATE PROCEDURE
call addNodesFromNewNodes('games');
select * from tablename;
CALL
name lft rgt level
games 2 3 2
gadgets 1 8 1
cartridge 4 5 2
console 6 7 2
SELECT 4