有效地将jsonb数据转换为结构化表

时间:2019-05-17 16:09:37

标签: postgresql jsonb

我有几百条包含以下数据的记录:

{
"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类型,id是bigint,标题是文本类型。 然后,我将使用以下语句将数组转换为键对值。

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

我的问题是,一切都可以分开工作,但是我需要2-3个登台表才能完成。当我尝试同时执行多项操作时,我的查询也异常缓慢,而它们的查询速度却很快。你们对如何加快速度有什么建议吗?

0 个答案:

没有答案