postgresql - 跟踪长时间运行的函数(从外部)进度的最佳方法 - PostgreSQL 11?
问题描述
在 PostgreSQL 11 中跟踪长时间运行函数的进度的最佳方法是什么?
由于每个函数都在单个事务中执行,即使函数写入某个“日志”表,其他会话/事务也无法看到此输出,除非函数以 SUCCESS 完成。
我在这里读到了一些尝试,但它们是从 2010 年开始的。
https://www.endpointdev.com/blog/2010/04/viewing-postgres-function-progress-from/
此外,这种方法看起来非常不方便。
截至今天,跟踪进度的最佳方法是什么?
我知道的一种方法...是将函数转换为过程,然后在 SP 中进行部分提交。但是如果我想从函数中返回一些结果集怎么办......在那种情况下我不能把它变成一个SP,对吧?那么......在这种情况下如何进行?
提前谢谢了。
注意:该函数是用 PL/pgSQL 编写的,这是 PostgreSQL 中最常见的过程 SQL 语言。
解决方案
我不知道有一个内置到 postgres 中的好方法,但是有几种方法可以实现在函数之外可见的日志记录。
- 您可以使用 pg_background 扩展在后台运行插入,该插入将在函数外部可见。这需要编译和安装这个扩展。
- 使用 dblink 连接到同一个数据库并插入数据。这很可能需要设置一些权限。
这两种选择都不是理想的,但希望可以为您工作。将您的函数转换为过程也可能有效,但您将无法从事务中调用该过程。
推荐阅读
- python - 包含 NaN 值的时间序列的运行平均值
- python - Pygame窗口未加载
- python - django 模型中的一些 get_absolute_url() 方法
- laravel - 如何防止多对多 Laravel 查询中的重复数据
- java - 计算距离 3d 课程结束的剩余距离
- gcc - GCC Undefined Behavior Sanitizer 似乎认为 inf/inf 不是未定义的行为。为什么?
- python - bqplot 图像的 on_click/hover 事件
- tfs - 带有 TFS 的 ADO API 正在删除 URL 项目并返回错误
- python - Python Web Scraping - 两个不同的父类名称,不同的结构但相同的子类名称
- spring - 使用 Webflux 下载文件并在浏览器中查看的更好方法