Извлечь поля из столбца postgres jsonb - PullRequest
0 голосов
/ 11 июля 2019

У меня есть таблица postgres со столбцом jsonb, которая имеет следующее значение:

 id  |  messageStatus       |   payload
-----|----------------------|-------------
1    |    123               | {"commissionEvents":[{"id":1,"name1":"12","name2":15,"name4":"apple","name5":"fruit"},{"id":2,"name1":"22","name2":15,"name4":"sf","name5":"fdfjkd"}]}
2    |    124               | {"commissionEvents":[{"id":3,"name1":"32","name2":15,"name4":"sf","name5":"fdfjkd"},{"id":4,"name1":"42","name2":15,"name4":"apple","name5":"fruit"}]}
3    |    125               | {"commissionEvents":[{"id":5,"name1":"42","name2":15,"name4":"apple","name5":"fdfjkd"},{"id":6,"name1":"52","name2":15,"name4":"sf","name5":"fdfjkd"},{"id":7,"name1":"62","name2":15,"name4":"apple","name5":"fdfjkd"}]}

здесь столбец полезной нагрузки представляет собой тип данных jsonb, я хочу написать запрос postgres в получить имя1 изCommissionEvents, где name4 = apple.

Итак, мой результат будет таким:

enter image description here

Так как я был новичком в этом jsonbМожет кто-нибудь, пожалуйста, предложите мне какое-то решение для этого.

1 Ответ

2 голосов
/ 11 июля 2019

Вам нужно удалить все элементы массива, затем вы можете применить к нему условие WHERE, чтобы отфильтровать элементы с нужным именем.

select t.id, x.o ->> 'name1'
from the_table t
  cross join lateral jsonb_array_elements(t.payload -> 'commissionEvents') as x(o)
where x.o ->> 'name4' = 'apple'

Онлайн пример: https://rextester.com/XWHG26387

...