在单个事务中将数据从 database1 复制到 database2 (Apache NiFi)
Copy data from database1 into database2 in single transaction (Apache NiFi)
我们有两个数据库:database1
和 database2
。
每天我们都想从 database1
复制两个表的所有数据:db1.table1
和 db2.table2
到 database2
到 中具有相似(不相同)结构的表单笔交易.
现在我已经遵循解决方案,但我不确定单笔交易:
SELECT * FROM db1.table
处理器 ExecuteSQL
;
- 在 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);
- 从db1.table2.
抓取所有数据
- 在 db2 中创建 buffer table2 并将数据放入
PutDatabaseRecord
和预 SQL 查询。
- 如果没有错误发生,我将在 db2 的缓冲表中获得来自 db1 的数据。
对于上面的操作,我真的不需要事务状态,但在下一步中,我应该在单个事务中将缓冲表中的数据放入真实表中。
我需要:
- 从 db2.table2 和 db2.table1 中删除数据(顺序很重要,因为外键);
- 从缓冲区 1;
插入 db2.table1 AS select
- 从缓冲区 2;
插入 db2.table2 AS select
- 删除两个缓冲区表。
我可以将上面的所有 sql 命令放入单个 ExecuteSQL
处理器,但我想这不是事务性的(我没有找到任何相关信息)。
例如,在第一步(从中删除)之后,将数据插入数据库时可能会发生错误。而且我将丢失之前存在的所有数据并且处理器将抛出错误,但数据已经丢失,回滚将仅应用于上次失败的操作。或者说错了?
是否可以在 PostgreSQL 服务器中仅使用 Apache NiFi 而无需存储过程?有什么想法吗?
这似乎可行(在 ExecuteSQL
内):
BEGIN;
... //actions here
COMMIT;
我们有两个数据库:database1
和 database2
。
每天我们都想从 database1
复制两个表的所有数据:db1.table1
和 db2.table2
到 database2
到 中具有相似(不相同)结构的表单笔交易.
现在我已经遵循解决方案,但我不确定单笔交易:
SELECT * FROM db1.table
处理器ExecuteSQL
;- 在 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);
- 从db1.table2. 抓取所有数据
- 在 db2 中创建 buffer table2 并将数据放入
PutDatabaseRecord
和预 SQL 查询。 - 如果没有错误发生,我将在 db2 的缓冲表中获得来自 db1 的数据。
对于上面的操作,我真的不需要事务状态,但在下一步中,我应该在单个事务中将缓冲表中的数据放入真实表中。
我需要:
- 从 db2.table2 和 db2.table1 中删除数据(顺序很重要,因为外键);
- 从缓冲区 1; 插入 db2.table1 AS select
- 从缓冲区 2; 插入 db2.table2 AS select
- 删除两个缓冲区表。
我可以将上面的所有 sql 命令放入单个 ExecuteSQL
处理器,但我想这不是事务性的(我没有找到任何相关信息)。
例如,在第一步(从中删除)之后,将数据插入数据库时可能会发生错误。而且我将丢失之前存在的所有数据并且处理器将抛出错误,但数据已经丢失,回滚将仅应用于上次失败的操作。或者说错了?
是否可以在 PostgreSQL 服务器中仅使用 Apache NiFi 而无需存储过程?有什么想法吗?
这似乎可行(在 ExecuteSQL
内):
BEGIN;
... //actions here
COMMIT;