如何区(upsert/insert into on conflict) 是INSERT还是UPDATE?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

2018-10-17 21:58:29 5052 3
有这样一个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操作?
取消 提交回答
全部回答(3)
  • ImSoo
    2019-07-17 23:09:02
    已采纳

    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

    0 0
  • wangccsy
    2019-07-17 23:09:02

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

    0 0
  • 吃奥利奥吗
    2019-07-17 23:09:02

    同问

    0 0
添加回答
相关问答

5

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 130192浏览量 回答数 5

20

回答

【大咖问答】对话PostgreSQL 中国社区发起人之一,阿里云数据库高级专家 德哥

阿里ACE 彭飞 2019-07-10 09:36:10 1275955浏览量 回答数 20

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 160034浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 341405浏览量 回答数 8

38

回答

[@饭娱咖啡][¥20]对于慢sql有没有什么比较实用的诊断和处理方法?

江小白太白 2018-10-30 18:47:38 144422浏览量 回答数 38

3

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 133606浏览量 回答数 3

8

回答

flink sql 支持checkpoints吗?

游客izljdlkgbdwfc 2019-07-10 17:46:37 126353浏览量 回答数 8

39

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 263678浏览量 回答数 39

251

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 310384浏览量 回答数 251

2

回答

区域选择帮助

fanyue88888 2012-12-07 15:54:30 205768浏览量 回答数 2
+关注
0
文章
21
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载