drop function if exists storage.search; CREATE OR REPLACE FUNCTION storage.search(prefix text, bucketname text, limits int DEFAULT 100, levels int DEFAULT 1, offsets int DEFAULT 0) RETURNS TABLE ( name text, id uuid, updated_at TIMESTAMPTZ, created_at TIMESTAMPTZ, last_accessed_at TIMESTAMPTZ, metadata jsonb ) LANGUAGE plpgsql AS $function$ BEGIN return query with files_folders as ( select path_tokens[levels] as folder from storage.objects where objects.name ilike prefix || '%' and bucket_id = bucketname GROUP by folder limit limits offset offsets ) select files_folders.folder as name, objects.id, objects.updated_at, objects.created_at, objects.last_accessed_at, objects.metadata from files_folders left join storage.objects on prefix || files_folders.folder = objects.name and objects.bucket_id=bucketname; END $function$;