将Postgresql jsonb列与行数据连接起来

将Postgresql jsonb列与行数据连接起来,json,postgresql,Json,Postgresql,我有一个带有and id列的数据表和一个带有对象数据的jsonb列: id int 数据jsonb 我正在像这样查询数据 select row_to_json(t) from ( select id, data from accounts ) t; 这会得到如下数据: { "id":3, "data": { "emailAddress": "someone@gmail.com"

我有一个带有and id列的数据表和一个带有对象数据的jsonb列:

id int 数据jsonb

我正在像这样查询数据

select row_to_json(t)
from (
    select id, data from accounts
) t;
这会得到如下数据:

{
   "id":3,
   "data":
   {
      "emailAddress": "someone@gmail.com", 
      "mobileNumbers": ["5559991212"]
   }
}
我希望将数据字段合并到主记录集中,我基本上希望将数据节点中的键合并到主记录中:

{
   "id":3,
   "emailAddress": "someone@gmail.com", 
   "mobileNumbers": ["5559991212"]
}
你可以用

SELECT jsonb_set(data, '{id}', to_jsonb(id))
FROM accounts;

我不得不指出,对于我来说,只有一个主键和一个jsomb列的表似乎是一个有问题的数据库设计。

感谢您的反馈,我省略了其他列,从而大大简化了表的设计。我正在采用一种方法,将对象存储在jsonb中,但将数据反规范化为列,以便搜索和连接到其他对象表。啊,听起来更好。这是正确的答案,我已经这样做了标记。我可以在第一个问题的基础上再问一些建议吗?我有两个与accounts表相关的表,它们是1..n,我想获取这些数据并将其嵌套在account表的数据中。遇到问题时,我可以让其他数据数组相邻,但不嵌套:选择jsonb_setdata,{id}to_jsonbid account,选择array_to_jsonarray_aggjsonb_setdata,{id}to_jsonbid FROM person,其中account_id=accounts.id person FROM accounts;听起来像是第二个问题。