在源数据库中,我们有一个表,我们称它为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中删除行
这可能吗? 最好的机制是什么?转换还是表触发器(可能具有删除时同步的条件)? 能否请您解释一下这样做的方法? 谢谢。
答案 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。