SymmetricDS - 在转换时添加节点ID

时间:2017-02-08 00:37:40

标签: postgresql symmetricds

我有多个数据库复制到一个主数据库,我有一个表用于表ID,我也用于其他目的,我想从这个表中添加一个列,其中包含每行的数据库标识这是在我的主数据库上复制的。 可能吗?我所做的所有测试最终都无所作为。

2 个答案:

答案 0 :(得分:0)

不可能因为转换的性质而无法实现。它们是在一组节点上定义的。假设所有客户端节点属于同一个组,他们将共享一个转换定义。

让我们采取另一种方法。每个客户端节点都使用其外部ID进行唯一标识。如果每个客户端上的ID表都使用它作为前缀,并将其自由地与主服务器同步,而不必担心它会与任何其他客户端重叠。

如果应用程序是遗留的并且无法更改以适应前缀,则在主端使用写入器过滤器将拦截来自客户端节点的数据,向每个更新添加等于客户端外部ID的前缀到ID表。在客户端添加一个将删除前缀的编写器过滤器。您可以使用主服务器上的前缀仅将行路由到他们已发送的客户端。

还有另一个解释详细说明数据库编写器过滤器的答案:https://stackoverflow.com/a/39389635/32090

答案 1 :(得分:0)

可以使用"变量"转变。这是一个" store"复制到" corp"并动态添加" source_node_id"列。

INSERT INTO SYM_TRANSFORM_TABLE (TRANSFORM_ID, SOURCE_NODE_GROUP_ID, TARGET_NODE_GROUP_ID, TRANSFORM_POINT, SOURCE_TABLE_NAME, TARGET_TABLE_NAME, COLUMN_POLICY, DELETE_ACTION) 
VALUES ('item', 'corp', 'store', 'EXTRACT', 'item', 'item', 'IMPLIED', 'DEL_ROW');

INSERT INTO SYM_TRANSFORM_COLUMN (TRANSFORM_ID, INCLUDE_ON, TARGET_COLUMN_NAME, SOURCE_COLUMN_NAME, PK, TRANSFORM_TYPE, TRANSFORM_EXPRESSION, TRANSFORM_ORDER) 
VALUES ('item', '*', 'ITEM_ID', 'ITEM_ID', 1, 'copy', null, 1);

INSERT INTO SYM_TRANSFORM_COLUMN (TRANSFORM_ID, INCLUDE_ON, TARGET_COLUMN_NAME, SOURCE_COLUMN_NAME, PK, TRANSFORM_TYPE, TRANSFORM_EXPRESSION, TRANSFORM_ORDER) 
VALUES ('item', '*', 'SOURCE_NODE_ID', null, 1, 'variable', 'source_node_id', 2);