【问题标题】:Best way to track the progress of a long-running function (from outside) - PostgreSQL 11?跟踪长时间运行的函数(从外部)进度的最佳方法 - PostgreSQL 11?
【发布时间】:2019-05-07 23:04:33
【问题描述】:

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

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

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

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

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

截至目前,跟踪进度的最佳方式是什么?

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

非常感谢。

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

【问题讨论】:

  • 函数是用什么语言编写的?根据您使用的内容,可能会有更多/更少的可用设施
  • 我认为@Jeremy 是对的。在我研究过这个的时候,似乎唯一的选择是笨拙的,而不是大多数人都愿意投入生产的东西。我希望这可以作为一项功能添加。
  • 该函数是用 PL/pgSQL 编写的,这是 PostgreSQL 中最常见的过程 SQL 语言。
  • 请注意,原问题中提到的博文已移至:endpointdev.com/blog/2010/04/…

标签: postgresql postgresql-11


【解决方案1】:

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

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

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

【讨论】:

  • 我通常用RAISE NOTICE 撒上函数并从psql 运行它。
猜你喜欢
  • 2022-07-29
  • 1970-01-01
  • 2010-10-14
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
相关资源
最近更新 更多