можно получить как: select *,(select gp.ancestors from get_path() gp where gp.ggid=g1.ggid) as gpath from ggs g1
Но для всей таблицы его просчет занимает 4с, хочу впихнуть его в триггер, чтоб хранить его в таблице и обновлять после вставки/удаления. НАписал триггер AFTER insert/update - поле остается нуллевым
BEGIN
new.ggpath = (select gp.ancestors from get_path() gp where gp.ggid=new.ggid) ;
RETURN NEW;
END;
ЧЯДНТ? При этом по времени видно, что триггер срабатывает (делаю апдейт всей таблицы, чтоб вызвать срабатывание триггера), но данные не заносятся.
надо BEFORE
А вообще, судя по именам и скоростям — у вас просто неправильная реализацыя дерева.
Ну дерево по классике, без доп.расширений, построение пути через циклы, быстрее не нашел. Количество элементов =8к, вложенность - не больше 3
Ну, покажыте https://t.me/pgsql/476688 Нет тут данных, которые можно по 4 секунды получать.
Обсуждают сегодня