web-dev-qa-db-ja.com

Postgresql update json dataプロパティ

フィールド名を結果、タイプをテキストとして作成しました。列の「lat」を更新したいだけです。このクエリを使用すると、構文エラーが発生します。どのようにできるのか?

列データは

"{"lat":"48.00855","lng":"58.97342","referer":"https:\/\/abc.com\/index.php"}"

クエリは

update public.log set (result::json)->>'lat'=123 where id=6848202

構文エラーは

ERROR:  syntax error at or near "::"
7
Fatih Doğan

jsonb連結演算子Postgres 9.5 +)を使用します。

_update log
set result = result::jsonb || '{"lat":"123"}'
where id = 6848202
_

Postgres 9.4では、json_each()json_object_agg()を使用します(jsonb_object_agg()が9.4)。

_update log
set result = (
    select json_object_agg(key, case key when 'lat' then '123' else value end)
    from json_each(result)
    )
where id = 6848202
_

どちらのソリューションも、json列がnullではないと想定しています。 latキーが含まれていない場合、最初のクエリでは作成されますが、2番目のクエリでは作成されません。

12
klin

列がまだnullの場合は、coalesceを使用できます。答えはここにあります: PostgreSQL 9.5-NULLをJSONとマージするときに更新が機能しません

0