开发者社区> 问答> 正文

如何区(upsert/insert into on conflict) 是INSERT还是UPDATE?

已解决

有这样一个sql语句
   INSERT INTO name_test (
        name_id, name
    )
    VALUES (%s, %s)
    ON CONFLICT(name_id) 
    DO UPDATE SET name_id=EXCLUDED.name_id,name=EXCLUDED.name
在代码中执行,如何判断PostgreSQL是执行的insert,还是update操作?

展开
收起
ImSoo 2018-10-17 21:58:29 6403 0
3 条回答
写回答
取消 提交回答
  • 采纳回答

    PG可以通过xmax字段的值是否为0,作为判断依据.
    但是需要在SQL后面跟上returning xmax,才能返回xmax的值.
    代码修改为:

      INSERT INTO name_test (
            name_id, name
        )
        VALUES (%s, %s)
        ON CONFLICT(name_id) 
        DO UPDATE SET name_id=EXCLUDED.name_id,name=EXCLUDED.name
        returning xmax;
    update:
    [('1481076451',)]
    insert:
    [('0',)]

    最后取值,可做判断.
    详情参考https://github.com/digoal/blog/blob/master/201810/20181017_01.md

    2019-07-17 23:09:02
    赞同 展开评论 打赏
  • 前一个帐号wangccsy@126.com不知道怎么的就成了企业帐号,改不成个人。所以重新注册了一个个人帐号。老程序员。精通JAVA,C#,数据库,对软件开发过程和流程熟悉。考取系统分析师,项目管理师和系统架构设计师等软件资格考试认证。愿意和大家一起前进。

    这个似乎确实不能判断。返回受影响的行数都是1。为什么有这样的需求?

    2019-07-17 23:09:02
    赞同 展开评论 打赏
  • 先为大家带来一点福利,领取千元大礼包,阿里云代金券领取地址:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=qyowv5ea

    同问

    2019-07-17 23:09:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载