Files
database/migrations/000.033.sql
T

64 lines
1.9 KiB
SQL

-- Materialized View: public.v_categorytree
DO $$
BEGIN
DROP MATERIALIZED VIEW IF EXISTS public.v_categorytree;
EXCEPTION WHEN others THEN
RAISE NOTICE 'Materialized view does not exist';
END;
$$;
DO $$
BEGIN
DROP VIEW IF EXISTS public.v_categorytree;
EXCEPTION WHEN others THEN
RAISE NOTICE 'View does not exist';
END;
$$;
CREATE MATERIALIZED VIEW public.v_categorytree AS
SELECT c.id,
c.name,
( SELECT array_to_string(array_agg(main.parent_name), '/'::text) AS path
FROM ( SELECT node.id,
parent.name AS parent_name
FROM categories node,
categories parent
WHERE node.lft >= parent.lft AND node.lft <= parent.rgt AND node.id = c.id
ORDER BY parent.lft) main
GROUP BY main.id) AS path,
( SELECT array_to_string(array_agg(main.parent_id), '/'::text) AS path
FROM ( SELECT node.id,
parent.id AS parent_id
FROM categories node,
categories parent
WHERE node.lft >= parent.lft AND node.lft <= parent.rgt AND node.id = c.id
ORDER BY parent.lft) main
GROUP BY main.id) AS path_numeric,
CASE c.rgt - c.lft
WHEN 1 THEN 1
ELSE 0
END AS is_leaf,
( SELECT count(*) - 1
FROM categories node,
categories parent
WHERE node.lft >= parent.lft AND node.lft <= parent.rgt AND node.id = c.id) AS depth,
( SELECT count(*) - 1
FROM categories c1
WHERE c1.lft >= c.lft AND c1.lft <= c.rgt) AS child_count,
c.lft,
c.rgt
FROM categories c
ORDER BY c.lft
WITH DATA;
GRANT ALL ON TABLE v_categorytree TO photowall;
-- Index: public.v_categorytree_key
-- DROP INDEX public.v_categorytree_key;
CREATE UNIQUE INDEX v_categorytree_key
ON public.v_categorytree
USING btree
(id);