CREATE OR REPLACE FUNCTION parent_paths (path ltree) RETURNS SETOF ltree AS $$ DECLARE i INTEGER; level INTEGER; mySubpath ltree; BEGIN SELECT nlevel (path) INTO level; FOR i IN 1 .. level LOOP SELECT subpath(path, 0, i) INTO mySubpath; RETURN NEXT mySubpath; END LOOP; RETURN; END; $$ LANGUAGE plpgsql IMMUTABLE; $$ LANGUAGE plpgsql WITH (ISCACHABLE);