Postgres 选择为 json 哈希

jem*_*ger 2 postgresql json

我可以从 Postgres 中选择行作为 JSON,例如

select row_to_json(t)
    from (
      select id, name from accounts
    ) t
Run Code Online (Sandbox Code Playgroud)

它以这种格式返回每一行:

{"id":6001,"name":"Foo"}
Run Code Online (Sandbox Code Playgroud)

我想以这种格式获取它们:

{ 6001: {"name":"Foo"} }
Run Code Online (Sandbox Code Playgroud)

这可能吗?

编辑:

这将为我提供一行的正确格式:

select json_build_object(id,json_build_object('name',name)) from accounts
Run Code Online (Sandbox Code Playgroud)

但是我最终想要的是由键索引的单个散列中的所有行,例如

{ 
  6001: {"name":"Foo"},
  6002: {"name":"Bar"},
  6003: {"name":"Baz"},
}
Run Code Online (Sandbox Code Playgroud)

这让我更接近:

select array_to_json(array_agg(json_build_object(id,json_build_object('name',name))))
from accounts
Run Code Online (Sandbox Code Playgroud)

但它仍然不完全存在,产生了一个哈希数组:

[
  { 6001: {"name":"Foo"} },
  { 6002: {"name":"Bar"} },
  { 6003: {"name":"Baz"} },
]
Run Code Online (Sandbox Code Playgroud)

Dan*_*etz 5

您正在尝试聚合,因此请使用聚合函数json_object_agg(),该函数“将名称/值对聚合为 JSON 对象”。这id是你的钥匙,你可以用它创造的价值json_build_object()

select json_object_agg(id, json_build_object('name', name))
from accounts
Run Code Online (Sandbox Code Playgroud)