在单个事务中将数据从 database1 复制到 database2 (Apache NiFi)

Copy data from database1 into database2 in single transaction (Apache NiFi)

我们有两个数据库:database1database2。 每天我们都想从 database1 复制两个表的所有数据:db1.table1db2.table2database2 中具有相似(不相同)结构的表单笔交易.

现在我已经遵循解决方案,但我不确定单笔交易:

  1. SELECT * FROM db1.table 处理器 ExecuteSQL
  2. db2 中创建 缓冲区表 1 并将数据放入 PutDatabaseRecord 和预 SQL 查询:
DROP TABLE IF EXISTS db2.buffer_table1;
CREATE TABLE db2.buffer_table1
AS (SELECT t1.account_name, t1.cabinet_id
    FROM db1.table1 t1
    WHERE 1=2);
  1. db1.table2.
  2. 抓取所有数据
  3. db2 中创建 buffer table2 并将数据放入 PutDatabaseRecord 和预 SQL 查询。
  4. 如果没有错误发生,我将在 db2 的缓冲表中获得来自 db1 的数据。

对于上面的操作,我真的不需要事务状态,但在下一步中,我应该在单个事务中将缓冲表中的数据放入真实表中。

我需要:

我可以将上面的所有 sql 命令放入单个 ExecuteSQL 处理器,但我想这不是事务性的(我没有找到任何相关信息)。

例如,在第一步(中删除)之后,将数据插入数据库时​​可能会发生错误。而且我将丢失之前存在的所有数据并且处理器将抛出错误,但数据已经丢失,回滚将仅应用于上次失败的操作。或者说错了?

是否可以在 PostgreSQL 服务器中仅使用 Apache NiFi 而无需存储过程?有什么想法吗?

这似乎可行(在 ExecuteSQL 内):

BEGIN;
... //actions here
COMMIT;