最近,作为测试实验,我已经开始将数据库的一部分从Oracle迁移到PostgreSQL环境。在此过程中,我遇到的主要缺点是缺乏实现并行性的简单方法,由于多种设计原因而需要并行处理,而这在这里并不那么重要。最近,我发现了https://www.postgresql.org/docs/11/bgworker.html的后续过程,这是我解决问题的一种方式。
还不是很真实,因为即使对于一个简单的任务(例如在进程运行时将调试消息写入记录器),我也很难找到如何实现它的任何教程或示例。我尝试了一些旧方法,在9.3版中的一些插件规范中介绍了这些方法,但是它们并没有太大帮助。
我想知道如何正确设置这些工人。任何帮助都会得到应用。
PS:同样,如果发现有个好主意可以将游标批量收集到PostgreSQL中,可以共享它。
答案 0 :(得分:1)
您链接到的bgworker文档是用于编写C代码的,可能不是您想要的。您可以使用pg_background扩展名,该扩展名可以满足您的要求。当使用自治事务编译指示转换oracle过程时,ora2pg将可选地使用pg_background。另一个选择是使用dblink打开与当前数据库的连接。
这两种解决方案都不是很好的解决方案,但是如果您需要将数据存储在表中而无论封闭事务是否成功,它都是唯一的解决方法。如果仅将内容放入日志中就可以解决问题,则可以改用RAISE NOTICE。
就批量收集游标而言,我不确定您如何使用它们,但是设置返回函数可能会为您提供帮助。 Postgres中的函数可以返回多行,而不会麻烦游标。