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