根据Postgres 10中JSON的特定值执行UPSERT

问题描述 投票:0回答:1

我有一个Postgres表messages,如下所示:

Column   |           Type             | Collation | Nullable |                    
-----------+--------------------------+-----------+----------
 id        | integer                  |           | not null |
 message   | jsonb                    |           |          | 
 date      | timestamp with time zone |           | not null | 
id | message                      | date
1  | {"name":"alpha", "pos":"x"}  | 2020-02-11 12:31:44.658667+00
2  | {"name":"bravo", "pos":"y"}  | 2020-02-11 12:32:43.123678+00
3  | {"name":"charlie", "pos":"z"}| 2020-02-11 12:38:37.623535+00

[我想做的是根据name键的值进行UPSERT,即,如果有一个具有相同name值的插入,则更新另一个值pos,否则输入一个新条目已创建。

我做了CREATE UNIQUE INDEX message_name ON messages((message->>'name'));

[我在Postgres 9.5+中找到了INSERT ON CONFLICT,但我不明白该如何使用唯一索引。

首先我不知道这是否是正确的方法,因此,如果有更好的方法,我将不胜感激。

我有一个Postgres表消息,如下所示:列|类型整理|可空| ----------- + -------------------------- + ----------- + ---------- id ...

sql json postgresql upsert postgresql-10
1个回答
1
投票

您需要从索引中重复该表达式:

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.