如何在Postgres中仅从jsonb类型中选择特定键的值

Nih*_*rma 6 postgresql jsonb

我有一个jsonb列,其数据如下.

[
   {"key": "unit_type", "value": "Tablet", "display_name": "Unit Type"},
   {"key": "pack_type", "value": "Packet", "display_name": "Pack Type"},
   {"key": "units_in_pack", "value": "60", "display_name": "Units in Pack"},
   {"key": "item_unit", "value": "", "display_name": "Item unit"},
   {"key": "item_size", "value": "1", "display_name": "Item Size"}, 
   {"key": "details", "value": "", "display_name": "Details"},
   {"key": "slug", "value": "otc7087", "display_name": "Slug"}
]
Run Code Online (Sandbox Code Playgroud)

我想value从具有key被调用的数组中获取字段slug,这样当我对表执行select查询时,我从列中获取此特定值.对于上面这行select name, slug, price from table,我应该得到med1, otc7087, 100输出.我无法为此事构建查询.我可以获取所有键或所有值,但如何在同一个选择查询中选择特定键?

或者我只是如何slugs从表中选择?那会回答.

小智 6

我相信你的json更有条理,只需尝试jsonb_to_recordset

对于前:

select * from json_to_recordset('[
   {"key": "unit_type", "value": "Tablet", "display_name": "Unit Type"},
   {"key": "pack_type", "value": "Packet", "display_name": "Pack Type"},
   {"key": "units_in_pack", "value": "60", "display_name": "Units in Pack"},
   {"key": "item_unit", "value": "", "display_name": "Item unit"},
   {"key": "item_size", "value": "1", "display_name": "Item Size"}, 
   {"key": "details", "value": "", "display_name": "Details"},
   {"key": "slug", "value": "otc7087", "display_name": "Slug"}
]') as x(key int, value text, display_name text);
Run Code Online (Sandbox Code Playgroud)

它会将jsonb转换为带有key,value,display_name作为列的表,然后你可以触发任何类型的查询,它也适用于提取键,而@Craig Ringer建议你不能将它转换成表喜欢的事情和解雇复杂的选择查询,如不在,!=,范围查询,ilike将是非常困难,可能性能较差.