Postgres从函数运行多线程调用



我需要在PostgreSQL服务器中从另一个存储函数运行一个存储的函数,但我需要在4个线程中运行内部函数以减少执行时间。我可以通过从后端进行4个线程调用来做到这一点,但这将比PostgeSQL服务器内部的调用更复杂。我使用的是plpgsql语言。

我想做一些类似于的东西

create or replace function abc(some_data integer)
returns integer
language plpgsql
as $$
declare
intermediate_data some_my_type;
is_done boolean;
result integer;
begin
intermediate_data := result_of_synchronous_call(some_data);
async perform asinchronous_call(intermediate_data.part1);
async perform asinchronous_call(intermediate_data.part2);
async perform asinchronous_call(intermediate_data.part3);
async perform asinchronous_call(intermediate_data.part4);
SELECT count(*) = 4 INTO is_done FROM results;
while not is_done loop
SELECT pg_sleep(10);
SELECT count(*) = 4 INTO is_done FROM results;
end loop;

SELECT sum(result_field) INTO result FROM results;
return result;
end;
$$

没有很好的方法可以做到这一点。我能想到的最好的方法是使用dblink扩展并使用dblink_send_query发送查询。可以使用dblink_is_busy检查完成状态,并最终使用dblink_get_result收集结果。

最新更新