Эффективное преобразование данных JSONB в структурированную таблицу - PullRequest
0 голосов
/ 17 мая 2019

У меня есть несколько сотен записей, содержащих следующие данные:

{
"participants": [
    {
      "name": "xxxx"
    },
    {
      "name": "xxxx"
    }
  ],
  "messages": [
    {
      "sender_name": "xxxx",
      "timestamp_ms": 1xxxx,
      "content": "xxxx",
      "type": "xxxx"
    },
    {
      "sender_name": "xxxx",
      "timestamp_ms": xxxx,
      "content": "xxxx",
      "type": "xxxx"
    }
 ],
  "title": "xxxx",
  "is_still_participant": xxxx,
  "thread_type": "xxxx",
  "thread_path": "xxxxx"
}

До сих пор я сделал следующее

psql
select ab.value, tb.messagenumber, message:: json ->> 'title' as title
FROM public.ImportTable as tb, json_array_elements(message:: json -> 
'messages') as ab

То, что я ожидаю, в основном:

Message array 1 | MessageID 1|Title 1
Message array 2 | MessageID 1|Title 1
Message array 3 | MessageID 1|Title 1
Message array 4 | MessageID 1|Title 1
Message array 1 | MessageID 2|Title 2
Message array 2 | MessageID 2|Title 2

Массив сообщений типа jsonb, идентификатор bigint и заголовок типа text.Затем я буду использовать следующий оператор, чтобы превратить массив в значения пары ключей.

psql
SELECT * FROM public.jsonmessage as tb, json_each_text(Message array:: 
json)

Моя проблема заключается в том, что все работает отдельно, но мне нужно 2-3 промежуточных таблицы, чтобы выполнить его.Мои запросы также необычно медленны, когда я пытаюсь сделать несколько вещей одновременно, в то время как они выполняются довольно быстро по отдельности.Ребята, есть ли у вас какие-либо предложения относительно того, как это ускорить?

...