SymmetricDS中的转换与表触发器

时间:2019-04-15 10:20:23

标签: symmetricds

在源数据库中,我们有一个表,我们称它为TableA。主键PK_TableA。该表在源数据库中有一个依赖表,可以通过FK将其称为TableB-将其称为FK_TableA。 我们使用相同的表名将TableA从源数据库同步到目标数据库。 我们没有将TableB从源数据库同步到目标数据库,但是它以相同的名称存在于目标数据库中,并且与TableA的依赖关系相同。

从源数据库中的TableA中删除一行时,通过使用删除的FK修改所有行并将FK_TableA列设置为null来更新TableB。 我们打算在目标数据库中产生相同的行为,而不必同步TableB。 因此,在从源数据库的TableA中删除一行时,我们: 1)想要将目标数据库中TableB的FK_TableA列更新为空 2)从targert数据库的TableA中删除行

这可能吗? 最好的机制是什么?转换还是表触发器(可能具有删除时同步的条件)? 能否请您解释一下这样做的方法? 谢谢。

1 个答案:

答案 0 :(得分:1)

可以使用负载过滤器或负载转换。对于这种情况,负载过滤器可能更简单。使用sym_load_filter配置执行此操作的“写入前” BeanShell脚本:

{
    "FIRST-KEY"   = "FOO",
    "SECOND-KEY-3"= "BAZ",
    "THIRD-KEY-2" = "BAR",
    "SECOND-KEY-1"= "FOO",
    "SECOND-KEY-2"= "BAR",
    "THIRD-KEY-1" = "FOO",
    "FIRST-KEY"   = "FOO",
    "SECOND-KEY"  = ["FOO", "BAR", "BAZ"],
    "THIRD-KEY"   = ["FOO", "BAR"]
}

该脚本检查它是否为DELETE语句,然后它将运行您需要的SQL。当前行的表列的值可用作大写变量。该脚本返回true,因此原始删除操作也将运行。

有关如何使用负载过滤器的更多详细信息,请参见https://www.symmetricds.org/doc/3.10/html/user-guide.html#_load_filters