postgresql suppoert async functions?如果是的话,它的语法是什么

时间:2017-05-31 10:03:44

标签: postgresql

我们有一个要求,即使在上一个事务完全执行之前,命令也应该到达UI 所以需要一个异步函数或一个异步触发器 或者我们可以在DB ??

中的特定表上进行异步提交

1 个答案:

答案 0 :(得分:1)

您可以使用dblink在事务中执行不会被它隔离的查询 - 结果将在提交之前提供,甚至在回滚之后可用。

create extension dblink;

create table logs (id serial, log text);

create or replace function log_me()
returns void
as $$
begin
  perform dblink('dbname=postgres', $q$ INSERT INTO logs (log) values ('Hello world'); $q$);
  perform pg_sleep(100);
end;
$$
language plpgsql;

select log_me();

--in different session/conenction, while function still waits on pg_sleep - returns 1 row
select * from logs;

dblink还可以发送异步查询:https://www.postgresql.org/docs/current/static/contrib-dblink-send-query.html如果这是你需要的。