相关疑难解决方法(0)

如何在PostgreSQL中使用RETURNING和ON CONFLICT?

我在PostgreSQL 9.5中有以下UPSERT:

INSERT INTO chats ("user", "contact", "name") 
           VALUES ($1, $2, $3), 
                  ($2, $1, NULL) 
ON CONFLICT("user", "contact") DO NOTHING
RETURNING id;
Run Code Online (Sandbox Code Playgroud)

如果没有冲突,则返回如下内容:

----------
    | id |
----------
  1 | 50 |
----------
  2 | 51 |
----------
Run Code Online (Sandbox Code Playgroud)

但如果存在冲突,则不会返回任何行:

----------
    | id |
----------
Run Code Online (Sandbox Code Playgroud)

id如果没有冲突,我想返回新列,或者返回id冲突列的现有列.
可以这样做吗?如果是这样,怎么样?

sql postgresql upsert sql-returning

127
推荐指数
7
解决办法
4万
查看次数

PostgreSQL Upsert使用系统列XMIN,XMAX等来区分插入和更新的行

免责声明:理论问题.

这里有几个问题,询问如何在PostgreSQL upsert语句中区分插入和更新的行.

这是一个简单的例子:

nd@postgres=# create table t(i int primary key, x int);
nd@postgres=# insert into t values(1,1);
nd@postgres=# insert into t values(1,11),(2,22)
  on conflict(i) do update set x = excluded.i*11
  returning *, xmin, xmax;
????????????????????????
? i ? x  ? xmin ? xmax ?
????????????????????????
? 1 ? 11 ? 7696 ? 7696 ?
? 2 ? 22 ? 7696 ?    0 ?
????????????????????????
Run Code Online (Sandbox Code Playgroud)

所以,xmax> 0(或xmax= xmin) - 行已更新; xmax= 0 - …

postgresql upsert postgresql-9.5

17
推荐指数
1
解决办法
2179
查看次数

检测行是否已更新或插入

我在做一个INSERTON CONFLICT用java postgre。有什么方法可以确定是executeUpdate插入行还是更新行?

java sql postgresql upsert

2
推荐指数
1
解决办法
312
查看次数

标签 统计

postgresql ×3

upsert ×3

sql ×2

java ×1

postgresql-9.5 ×1

sql-returning ×1