SymmetricDS pk替代

时间:2015-05-13 15:31:10

标签: postgresql symmetricds

阅读SymmetricDS用户指南后,我不确定SymmetricDS是否支持冲突解决方案,该解决方案不是基于PK而是完全在我自己的自定义列上。

鉴于以下情况:

  • 2个具有双向更新的节点
  • 每个节点都有一个必须同步的表products

现在,表架构看起来像这样(简化):

id (pk) |  name (char)  | reference (char)

我想知道的是,是否可以将列reference定义为冲突解决和插入/更新操作的标识符,而不是pk列id

示例:

Node0
id (pk) |  name (char)  | reference (char)
1          Foo            IN001
2          FooBaz         IN003
----

Node1
id (pk) |  name (char)  | reference (char)
1          Bar            EX001
2          Foo            IN001

Node1中第2行的更改将触发节点1中第1行的更新,而在Node0 / 1中创建新记录将触发相应节点中的插入,但考虑到PK可能已被占用。

此外,我想按列reference的值过滤要同步的表行。这意味着行应同步reference startwith('IN') == True

谢谢!

1 个答案:

答案 0 :(得分:1)

查看TRIGGER表中的“SYNC_KEY_NAMES”列。

  

指定以逗号分隔的列列表,这些列应该用作   同步操作的关键。默认情况下,如果未指定,则   将使用该表的主键。

如果您将值'name'插入此列,则SDS会将其作为PK进行处理。

将id作为PK留下了障碍。如果此列自动递增,您可以尝试在触发器表列“EXCLUDED_COLUMN_NAMES”中将其排除。由于这是PK,我不知道SDS是否会忽略它。

如果这不起作用,则必须编写Custom Load Filter来增加插入时的id字段。