Получить значение внутри случайного ключа в PostgreSQL JSONB? - PullRequest
0 голосов
/ 26 сентября 2019

есть ли способ извлечь значение из jsonb, если ваш ключ "случайный"?Пример:

{"6": {"id": "6", "name": "book-name", "genre": "history", "book_id": "3"}}

Здесь ключ «6», который в моем случае является псевдослучайным числом.Он всегда различен для каждого ряда, поэтому недоступен, просто указывая на него.(jsonb -> 'key') Я перепробовал почти все, что смог найти, и до сих пор не могу решить эту проблему.Есть ли способ получить значение в этом случае?Версия PG - 9.6.Спасибо:)

1 Ответ

0 голосов
/ 26 сентября 2019

Мне непонятно, что вы хотите получить, но, может быть, вы ищете это:

with sample_data (js) as (
  values ('{"6": {"id": "6", "name": "book-name", "genre": "history", "book_id": "3"}}'::jsonb)
)
select x.v
from sample_data sd
  cross join lateral jsonb_each(sd.js) as x(k,v)

Вышеприведенное вернет:

v                                                                   
--------------------------------------------------------------------
{"id": "6", "name": "book-name", "genre": "history", "book_id": "3"}

Если вы хотите индивидуальныйключ / значения, то вы можете использовать

with sample_data (js) as (
  values ('{"6": {"id": "6", "name": "book-name", "genre": "history", "book_id": "3"}}'::jsonb)
)
select d.*
from sample_data sd
  cross join lateral jsonb_each(sd.js) as x(k,v)
  cross join lateral jsonb_each_text(x.v) as d(k,v);

Выше вернется:

k       | v        
--------+----------
id      | 6        
name    | book-name
genre   | history  
book_id | 3        
...