Postgres 将多行获取到单个 json 对象中

Bas*_*raj 4 sql arrays postgresql json aggregate-functions

我有一个用户表,其中包含 、id、等列。我想在单个 json 对象中以以下格式检索某些用户的信息:nameemail

{
    "userId_1" : {"name" : "A", "email": "A@gmail.com"},
    "userId_2" : {"name" : "B", "email": "B@gmail.com"}
}
Run Code Online (Sandbox Code Playgroud)

其中user uniqueid是key,包含其信息的json是其对应的value。

我可以使用以下方法在两个单独的行中获取此信息,json_build_object但我希望它以一个 json 对象的形式将其获取到单行中。

GMB*_*GMB 9

您可以使用 json 聚合函数:

select jsonb_object_agg(id, to_jsonb(t) - 'id') res
from mytable t
Run Code Online (Sandbox Code Playgroud)

jsonb_object_agg()将键/值对聚合到单个对象中。键是id每行的 ,值是由表中除 之外的所有列组成的 jsonb 对象id。

DB Fiddle 上的演示

样本数据:

编号 | 名称 | 电子邮件      
:----- | :--- | :----------
用户id_1 | 一个 | A@gmail.com
用户id_2 | 乙| B@gmail.com

结果:

| 资源 |
| :---------------------------------------------------------------- -------------------------------------------------- --|
| {“userid_1”:{“姓名”:“A”,“电子邮件”:“A@gmail.com”},“userid_2”:{“姓名”:“B”,“电子邮件”:“B@gmail.com” “}} |