PostgreSQL如何编写无参函数与触发器实现表D操作同步到表B
PostgreSQL 表D到表B自动同步实现方案
字段映射说明
以下实现默认采用映射规则:B.bbb = D.ddd、B.bbbb = D.dddd,可根据实际业务需求调整字段赋值逻辑。
触发器函数代码
CREATE OR REPLACE FUNCTION sync_d_to_b_func() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN -- 插入操作:同步新增数据到表B IF TG_OP = 'INSERT' THEN INSERT INTO B (x, a, dd, bbb, bbbb) VALUES (NEW.x, NEW.a, NEW.dd, NEW.ddd, NEW.dddd); RETURN NEW; -- 更新操作:同步更新表B对应记录 ELSIF TG_OP = 'UPDATE' THEN UPDATE B SET x = NEW.x, a = NEW.a, dd = NEW.dd, bbb = NEW.ddd, bbbb = NEW.dddd WHERE x = OLD.x AND a = OLD.a AND dd = OLD.dd; RETURN NEW; -- 删除操作:同步删除表B对应记录 ELSIF TG_OP = 'DELETE' THEN DELETE FROM B WHERE x = OLD.x AND a = OLD.a AND dd = OLD.dd; RETURN OLD; END IF; END; $$;
触发器创建语句
需同时监听插入、更新、删除三种操作,不要仅绑定更新事件:
CREATE TRIGGER trigger_sync_d_to_b AFTER INSERT OR UPDATE OR DELETE ON D FOR EACH ROW EXECUTE PROCEDURE sync_d_to_b_func();
注意事项
- 不要使用
function、trigger这类SQL保留字作为函数、触发器的名称,会触发语法错误 - 如果表D的主键字段(x/a/dd)存在更新场景,可将UPDATE分支逻辑调整为先删除OLD主键对应B表记录,再插入NEW的完整记录,避免主键变更导致同步失效
内容的提问来源于stack exchange,提问作者fortnite
相关产品推荐
相关产品推荐

