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

问题描述

在 PostgreSQL 11 中跟踪长时间运行函数的进度的最佳方法是什么?

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

我在这里读到了一些尝试,但它们是从 2010 年开始的。

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

此外,这种方法看起来非常不方便。

截至今天,跟踪进度的最佳方法是什么?

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

提前谢谢了。

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

标签: postgresqlpostgresql-11

解决方案


我不知道有一个内置到 postgres 中的好方法,但是有几种方法可以实现在函数之外可见的日志记录。

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

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


推荐阅读