首页 > 解决方案 > Postgres 将选定的 json_agg'regated 字符串视为一个数组

问题描述

在以下查询(*)中,我发现它foo_ids以数组的字符串表示形式返回。当我最终运行to_json我的ActiveRecord::Base.connection.select_all结果时,我看到它当然在结果输出中被表示为一个字符串。

SELECT
  bar.a,
  bar.b,
  bar.c,
  (
    SELECT JSON_AGG(DISTINCT foo_id)
    FROM foo
    WHERE bar.id = foo.bar_id
  ) AS foo_ids
FROM bar

我可以做些什么来将所需的选择作为数组放入最终的 JSON 输出中,而无需修改中间结果?

(*) 该问题的查询已被简化。

标签: ruby-on-railspostgresqlrails-activerecord

解决方案


我在@unabridged 对这个问题的回答的帮助下解决了这个问题:Getting typed results from ActiveRecord raw SQL

我还使用array_agg而不是json_agg确保数据将是稍后转换为 JSON 的数组。

我得出的结论是,没有办法解决这个问题,我只需要找到一种合适的方法来使用 ActiveRecord 转换类型,如下所示:

result = ActiveRecord::Base.connection.select_all(query)
  .to_a.map { |o| o.each { |k, v| o[k] = result.column_types[k].cast(v) } }

querySQL 字符串在哪里。


推荐阅读