You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:45:08