postgresql - 带有动态列名的 json_agg()

标签 postgresql

我正在尝试使用像这样的代码段从表中获取 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';

是我的方法不对还是有更简单的方法?

最佳答案

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

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

关于postgresql - 带有动态列名的 json_agg(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63549571/

相关文章:

sql - 在 Postgres STRING_AGG 中对条件数据进行排序

node.js - 实体之间的循环依赖

postgresql - Heroku Blob 不存在

postgresql - postgresql 中指数的存储过程

postgresql - Postgres 命令行 - 清除/删除我正在输入的查询

mysql - Sequelize.js 模型查询对于 mySQL 和 PostgreSQL 是否相同?

Django:获取 CURRENT_TIMESTAMP 的原始 sql 查询不会在后续调用中更新

ios - 在 iOS 11 中,键盘自动更正会创建无效的 UTF8

postgresql - 将整数作为二进制字符串连接到 bytea

node.js - Redis与Postgresql同步(在线用户状态)