Полагаю, вы хотите вставить в таблицу уникальные комбинации id
и key
. Затем вам нужно уникальное ограничение для них:
create unique index on testtable ( (data->>'key'), (data->>'id') );
, а также использовать дополнительные скобки для предложения on conflict
в качестве кортежа:
on conflict( (data->>'key'), (data->>'id') )
и квалифицировать имя столбца jsonb (data
) по имени таблицы (testtable
) всякий раз, когда вы встречаетесь после do update set
или после where
пунктов как testtable.data
. Итак, преобразуйте ваше утверждение в:
insert into testtable(data) values('{
"key": "Key",
"id": "350B79AD",
"value": "Custom1"
}')
on conflict( (data->>'key'), (data->>'id') )
do update set data = testtable.data || '{"value":"Custom2"}'
where testtable.data ->> 'key' ='Key' and testtable.data ->> 'id'='350B79AD';
кстати, data ->> 'appid'='350B79AD'
преобразовано to data ->> 'id'='350B79AD'
(appid
-> id
)
Демо