PostgreSQL插入t1时数据同步至t2,如何避免该交互?
解决PostgreSQL中插入t1时t2自动联动插入的问题
这种联动插入的情况,几乎100%是因为t1表上存在自定义的INSERT触发器(或规则),触发器的逻辑里包含了向t2表插入数据的操作。以下是具体排查和解决步骤:
排查t1表上的触发器
执行以下SQL语句,查看t1表上的所有自定义触发器(排除系统内部触发器):SELECT tgname, tgfoid FROM pg_trigger WHERE tgrelid = 't1'::regclass AND tgisinternal = false;如果查询结果返回了触发器名称,说明就是这个触发器在起作用。
查看触发器的具体逻辑
如果查到了触发器名称(比如t1_insert_sync_t2),执行下面的语句查看对应的触发器函数内容,确认是否包含向t2插入数据的代码:SELECT pg_get_functiondef('触发器函数名'::regproc);(把上面的
触发器函数名替换成第一步查询结果里的tgfoid对应的函数名,或者直接用tgfoid的值,比如pg_get_functiondef(12345::regproc))删除不需要的触发器
如果确认这个触发器是导致联动插入的原因,且你不需要这个功能,直接删除触发器即可:DROP TRIGGER IF EXISTS 触发器名称 ON t1;比如触发器叫
t1_insert_to_t2,就执行:DROP TRIGGER IF EXISTS t1_insert_to_t2 ON t1;额外排查:检查是否存在规则(Rule)
如果上面没查到触发器,再检查t1表是否有INSERT规则:SELECT rulename FROM pg_rewrite WHERE ev_class = 't1'::regclass;如果有规则,删除规则的语句是:
DROP RULE IF EXISTS 规则名称 ON t1;
内容的提问来源于stack exchange,提问作者Fathy Geaiessah
相关产品推荐
相关产品推荐

