У меня есть 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
Что я хотел бы сделать, это сделать UPSERT на основе значения клавиши name
, т. Е. если есть вставка с таким же значением name
, тогда обновляется другое значение pos
, в противном случае создается новая запись.
Я сделал CREATE UNIQUE INDEX message_name ON messages((message->>'name'));
Я нашел ВСТАВИТЬ В КОНФЛИКТ в Postgres 9,5+, но я не могу понять, как использовать уникальный индекс с этим.
Я не знаю, является ли это правильным подходом, чтобы сделать это в первое место, так что если есть лучший способ сделать это, я был бы признателен за ввод.