【发布时间】:2018-10-04 21:27:33
【问题描述】:
我的目标是让 Web 服务使用以下机制触发异步查询:
select dblink_connect('asyncconnect', 'host=localhost port=5432 dbname=mydb user=theking password=pass');
select dblink_send_query('asyncconnect', 'perform pg_sleep(60)); --represents som elong running query/function
在启动该过程后,我想稍后再回来检查其进度,在新客户端实例中使用以下调用:
SELECT * from dblink_is_busy('asyncconnect');
但是,这不起作用,而是我收到一个错误:
错误:连接“asyncconnect”不可用。
尽管来自初始调度的异步查询仍在运行。
另外,如果我尝试这个查询:
select * from dblink_get_connections()
没有任何回报。
这可以通过使用两个不同的 PostgreSQL 客户端运行上述场景来重新创建:我使用 dbeaver 连接和调度第一个工作查询,使用 sqlworkbench 尝试获取查询状态。显然都连接到同一服务器和数据库。
现在,如果我在一个客户端中执行所有操作,那么它会按预期工作。
但是,异步处理的本质是您触发某些东西,然后稍后再回来检查它的状态或结果,而不管会话如何。
就 PostgreSQL 而言,不是这样吗?
我创建了一个解决方法,让长时间运行的进程将其状态发布到我可以查询的表中,但似乎提供的状态函数应该可以工作。
【问题讨论】:
标签: sql postgresql asynchronous postgresql-9.5 dblink