У меня есть большая таблица (более миллиарда записей) в postgresql для обработки. Мне нужно перебрать каждую запись в этой таблице. Итак, я использую курсор. Но курсор извлекает записи по одной из базы данных, что происходит медленно.
Если я смогу каждый раз получать 20000 записей из курсора, это может повысить производительность. Итак, как это сделать. Я написал удар псевдокода, но он не может быть скомпилирован.
Или есть еще лучший способ повысить производительность?
CREATE OR REPLACE FUNCTION sample.annovar_ods_sor_test(_sample_id integer)
RETURNS INTEGER
LANGUAGE plpgsql
AS $$
DECLARE
tmp RECORD;
ods_cursor CURSOR(my_sample_id INTEGER) FOR SELECT *
FROM sample.ods_annovar
WHERE sample_id = my_sample_id;
tmp_ods RECORD ARRAY;
BEGIN
OPEN ods_cursor(my_sample_id=_sample_id);
<<ods_loop>>
LOOP
FETCH RELATIVE 20000 FROM ods_cursor INTO tmp_ods;
IF tmp_ods = NULL THEN
EXIT ods_loop;
END IF;
FOR tmp IN tmp_ods LOOP
RAISE NOTICE '%', tmp."Start";
-- do something with the record
END LOOP;
END LOOP ;
CLOSE ods_cursor;
RETURN 1;
END
$$;