首页 > 解决方案 > 带有动态列名的 json_agg()

问题描述

我正在尝试使用这样的代码段从表中获取 JSON 的结果。

SELECT json_agg(json_build_object('latitude',my_table.latitude,
                                  'longitude',my_table.longitude
))  from my_table;

结果:

[
  { "latitude": -24.719103042657146, "longitude": 16.97771468195161 }
]

不幸的是,由于列名是动态的,因此对列名进行硬编码将不起作用。我不确定如何在不确切知道列名的情况下获得相同的结果。

我发现我可以通过这样做来获取列名,但除此之外,我不太确定该去哪里。

SELECT column_name 
from information_schema.columns 
WHERE table_name = 'my_table';

我的方法是错误的还是有更简单的方法?

标签: postgresql

解决方案


您可以将完整的行转换为 JSON 值,使用to_jsonb该值将列名用作 JSON 键:

select jsonb_agg(to_jsonb(t))
from (
   select latitude, longitude
   from my_table
) t

推荐阅读