sql - 异步查询状态功能仅在同一 session 中可用?

标签 sql postgresql asynchronous postgresql-9.5 dblink

我的目标是使用以下机制让 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');

但是,这不起作用,相反我收到一个错误:

ERROR: connection "asyncconnect" not available.

尽管来自初始分派(dispatch)的异步查询仍在运行。

另外,如果我尝试这个查询:

select * from dblink_get_connections()

没有返回。

这可以通过使用两个不同的 PostgreSQL 客户端运行上述场景来重新创建:我使用 dbeaver 连接和分派(dispatch)第一个工作查询,并使用 sqlworkbench 尝试获取查询状态。两者显然都连接到同一服务器和数据库。

现在,如果我在一个客户端中执行所有操作,那么它会按预期工作。

但是,异步处理的本质是您启动某些东西,然后稍后返回并检查它的状态或结果,而不管 session 如何。

就 PostgreSQL 而言,情况不是这样吗?

我已经创建了一个解决方法,让长时间运行的进程将其状态发布到一个表中,然后我可以查询,但似乎提供的状态函数应该可以工作。

最佳答案

dblink 连接仅在创建它的数据库 session 中可用。

所以是的,您将不得不使用不同的技术,就像您在解决方法中所做的那样。在那种情况下,您根本不需要 dblink。它只是不是您想要的工具。

关于sql - 异步查询状态功能仅在同一 session 中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52655389/

相关文章:

c++ - boost::asio 将动态大小的数据传递给异步处理程序时出现问题

c# - 下载数千个网页的最有效方法

sql - 如果字段为 NULL,则更新或插入值

sql - Laravel 查询生成器使用两个条件之一进行连接

php - 无法将从 sql 查询获取的元素添加到数组

ruby-on-rails - ActiveRecord::NoDatabaseError fatal error :数据库 "db/development.postgresql"不存在

MySQL - 如何将数据库组织到文件夹中

sql - 2个数组中具有相同索引的元素的乘积

postgresql - to_tsquery 查询电话号码

asp.net-mvc - 如何在 MVC 3 中正确进行长轮询