Postgres 查询 jsonb 以根据另一个名称:值对的值提取一个名称:值对的值



我有一个使用 benthos.dev/Golang 创建的postgres表,无法更改其创建方式。 此表将 json 数据作为字符串插入到列中。 一个单独的底栖动物将使用postgres查询这一点。 对于该表中的 select 语句,目的是查找具有给定名称的"system"元素,并返回相应"值"的值。 (不是系统的值,称为"值"的元素的值) 所有响应需要在同一行上。 这是一个模型 列名 : 水荸荠属

name Suigeneris
baz [{"system":"https://alpha.com/externalid","use":"home","value":"JJO5H0001"},{"system":"http://gee.org/berlin/uni/Suigeneris-num","use":"common","value":"2122206077"}]

您可以使用 JSON 路径查询:

select name, 
"unique",
jsonb_path_query_first("unique", '$[*] ? (@.system == "https://alpha.com/externalid").value') #>> '{}' as unique_alpha,
jsonb_path_query_first("unique", '$[*] ? (@.system == "http://gee.org/berlin/uni/unique-num").value') #>> '{}' as unique_berlin
from the_table       

jsonb_path_query_first返回一个jsonb值。不幸的是,没有直接投射到jsonb的文本。为此,使用#>> '{}'

请注意,对于列名来说,unique是一个非常糟糕的选择,因为这是一个保留关键字。

最新更新