跟踪长时间运行的函数(从外部)进度的最佳方法-PostgreSQL 11?

时间:2019-05-07 23:04:34

标签: postgresql postgresql-11

跟踪进度的最佳方法是什么 PostgreSQL 11中长期运行的功能?

由于每个函数都在单个事务中执行,因此即使该函数写入某个“日志”表,除非该函数以SUCCESS完成,否则其他会话/事务都无法看到此输出。

我在这里阅读了一些尝试,但都是2010年的。

https://www.endpoint.com/blog/2010/04/28/viewing-postgres-function-progress-from

而且,这种方法看起来非常不方便。

到目前为止,什么是跟踪进度的最佳方法?

我知道的一种方法是将功能转换为过程,然后在SP中进行部分提交。但是,如果我想从函数中返回一些结果集,那该怎么办?那种情况下,我无法将其转换为SP,对吗?那么...在这种情况下如何进行?

非常感谢。

注意:该函数用PL / pgSQL编写,这是PostgreSQL中最常见的过程SQL语言。

1 个答案:

答案 0 :(得分:2)

我不知道有一种很棒的方法可以将其内置到postgres中,但是有两种方法可以实现在函数外部可见的日志记录。

  1. 您可以使用pg_background扩展名在后台运行一个插入,该插入在函数外部可见。这需要编译并安装此扩展程序。
  2. 使用dblink连接到同一数据库并插入数据。这很可能需要设置一些权限。

这两种方法都不是理想的选择,但希望可以为您服务。将您的函数转换为过程也可以,但是您将无法在事务中调用该过程。