簡體   English   中英

Postgresql 更新 json 數據屬性

[英]Postgresql update json data property

我創建了一個字段名稱是結果,類型是文本。 我只想更新列中的“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 "::"

使用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 列不為空。 如果它不包含lat鍵,第一個查詢將創建它,但第二個不會。

撥打PostgreSQL 13、您可以:

update public.log set result = jsonb_set(result,'{lat}','"123"') where id=6848202;

如果該列仍然為空,您可以使用coalesce 答案在此處提供: PostgreSQL 9.5 - 將 NULL 與 JSON 合並時更新不起作用

我還嘗試更新 json 類型字段中的 json 值,但找不到合適的示例。 所以我使用 PgAdmin4 連接到 postgres DB,打開所需的表並更改所需字段的值,然后查看查詢歷史以查看它使用什么命令來更改它。

所以,最后,我有下一個簡單的 python 代碼,用於更新 postgres db 中的 json 字段:

import psycopg2

conn = psycopg2.connect(host='localhost', dbname='mydbname', user='myusername', password='mypass', port='5432')
cur = conn.cursor()
cur.execute("UPDATE public.mytable SET options = '{\"credentials\": \"required\", \"users\": [{\"name\": \"user1\", \"type\": \"string\"}]}'::json WHERE id = 8;")
cur.execute("COMMIT")

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM