您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Postgres 9.5中正确进行upsert

如何在Postgres 9.5中正确进行upsert

ON CONFLICT构造需要UNIQUE约束才能起作用。从INSERT .. ON CONFLICT子句的文档中:

可选ON CONFLICT子句指定了引发 或 违反错误的替代操作。对于建议插入的每个单独行,要么继续插入,要么如果违反了由conflict_target指定的仲裁者约束或索引,则采用替代性的action_action。ON CONFLICT DO NOTHING只是避免插入一行作为其替代操作。ON CONFLICT DO UPDATE更新与建议插入的行冲突的现有行作为其替代操作。

现在,问题还不是很清楚,但是您可能需要UNIQUE对合并的2列进行约束(category_id, gallery_id)

ALTER TABLE category_gallery
    ADD CONSTRAINT category_gallery_uq
    UNIQUE (category_id, gallery_id) ;

如果该行被插入的比赛 已经在桌子上有一个行的值,然后代替INSERT,这样做的UPDATE

INSERT INTO category_gallery (
  category_id, gallery_id, create_date, create_by_user_id
  ) VALUES ($1, $2, $3, $4)
  ON CONFLICT (category_id, gallery_id)
  DO UPDATE SET
    last_modified_date = EXCLUDED.create_date,
    last_modified_by_user_id = EXCLUDED.create_by_user_id ;

您可以使用UNIQUE约束的任一列:

  ON CONFLICT (category_id, gallery_id)

或约束名称

  ON CONFLICT ON CONSTRAINT category_gallery_uq
Postgres 2022/1/1 18:42:30 有517人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶