SymmetricDS:如何定义覆盖所有表但排除指定表的触发器?
解决SymmetricDS触发器排除特定表的问题
要实现覆盖所有表但排除emails表的需求,无需修改原有的通配符触发器,通过添加触发器排除规则即可实现,这是SymmetricDS官方推荐的灵活方案。
具体操作
- 保留你已创建的全表覆盖触发器(无需改动):
INSERT INTO sym_trigger (trigger_id, source_schema_name, source_table_name, channel_id, sync_on_update, sync_on_insert, sync_on_delete, sync_on_update_condition, sync_on_insert_condition, sync_on_delete_condition, last_update_time, create_time, sync_on_incoming_batch) VALUES ('public.tables', 'public', '*', 'default', 1, 1, 1, '1=1', '1=1', '1=1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1);
- 插入排除规则到
sym_trigger_exclude表,指定要排除的emails表:
INSERT INTO sym_trigger_exclude (trigger_id, exclude_table_name, create_time, last_update_time) VALUES ('public.tables', 'emails', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
原理说明
- 原触发器中
source_table_name='*'会匹配publicschema下的所有表 sym_trigger_exclude表的作用是从通配符触发器的匹配范围中移除指定表,通过关联原触发器的trigger_id,就能精准将emails表排除在同步范围外
不推荐的替代方案
如果不想用排除规则,也可以把原触发器的source_table_name改为具体表名的逗号分隔列表,但这种方式需要手动维护所有表名,后续新增表时还得更新触发器,灵活性远不如排除规则。
内容的提问来源于stack exchange,提问作者Yonoss
相关产品推荐
相关产品推荐

