首页 > 解决方案 > 如何为 PostgreSQL 11 服务器设置后台工作人员?

问题描述

最近受命将部分数据库从Oracle迁移到PostgreSQL环境,作为测试实验。在此过程中,我遇到的主要缺点是缺乏简单的方法来实现并行性,这是由于多种设计原因所必需的,这里不那么相关。最近我发现了https://www.postgresql.org/docs/11/bgworker.html以下过程,这是我解决问题的某种方式。

然而并非如此,因为我无法轻易找到任何教程或示例如何实现它,即使是在进程运行时将调试消息写入记录器这样简单的任务。我尝试了一些旧方法,在 9.3 版的一些插件规范中提出,但它们并没有太大帮助。

我想知道如何正确设置这些工人。任何帮助都将不胜感激。

PS:另外,如果一些好心人找到了解决方法来为 PostgreSQL 中的游标实现批量收集,那么您将是最善良的,分享它。

标签: postgresqlparallel-processingbackgroundworker

解决方案


您链接到的 bgworker 文档用于编写 C 代码,这可能不是您想要的。你可以使用pg_background扩展,它会做你想做的事。在使用自主事务编译指示转换 oracle 过程时,ora2pg 将可选地使用 pg_background。另一种选择是使用 dblink 打开与当前数据库的连接。

这两种解决方案都不是很好,但如果您需要将数据存储在表中,无论封闭事务是否成功,这是唯一的方法。如果您只需将内容放入日志即可解决问题,则可以使用 RAISE NOTICE 代替。

就游标的批量收集而言,我不确定您是如何使用它们的,但设置返回函数可能会对您有所帮助。postgres 中的函数可以返回多行而无需摆弄游标。


推荐阅读