我有这个json结构,我也存储PostgreSQL类型名称
{
"temperature":{
"value":"(-75,-70]",
"type":"int4range"
}
}
我可以获得诸如
之类的值SELECT '{"temperature":{"value":"(-75,-70]","type":"int4range"}}'::jsonb #> ARRAY['temperature','value']
现在值类型是文本,我知道我只能在json中存储简单类型但是如何使用我拥有的类型名称动态地将值转换为int4range
?
答案 0 :(得分:1)
正如@Bread所说,你无法动态投射数据。
但是你可以这样做:
WITH jsonb as (
SELECT '{"temperature":{"value":"[-75,-70]","type":"int4range"}}'::json
), fromjsonb as (
SELECT json->'temperature'->'value' as element,
json->'temperature'->'type' as type
FROM jsonb
), trim as (
SELECT trim(both '"' from element::text) as element,
trim(both '"' from type::text) as type
FROM fromjsonb
)
SELECT CASE WHEN type = 'int4range' THEN element::int4range
-- ELSE element::text
END
FROM trim;
case
-----------
[-75,-69)
(1 row)
在我的示例中,它选择数据并且无法正常工作,因为PostgreSQL不允许您选择第一行为int4range
,然后将第一行选为另一种类型。
但你可以使用同样的逻辑在另一个表格中插入数据(我认为这是你的目标),这样就可以了。