【发布时间】:2017-02-21 15:47:04
【问题描述】:
我正在尝试从 postgresql 请求创建 Json 格式。
首先,我使用 Rails 在控制器的 format.json 块中请求我的数据库,然后使用 json.builder 文件来格式化 json 视图。它一直有效,直到我的请求返回数十万行,所以我搜索了如何优化 json 创建,避免所有 ActiveRecord 堆栈。
为此,我使用 Postgresql 9.6 json 函数以正确的格式直接获取我的数据,例如:
SELECT array_to_json('{{1157241840,-1.95},{1157241960,-1.96}}'::float[]);
[[1157241840, -1.95], [1157241960, -1.96]]
但是使用来自这种请求的数据:
SELECT date,value FROM measures;
我能得到的最好的东西是这样的:
SELECT array_to_json(array_agg(t)) FROM (SELECT date,value FROM measures) t;
导致:
[
{"date":"1997-06-13T19:12:00","value":1608.4},
{"date":"1997-06-13T19:12:00","value":-0.6}
]
这是完全不同的......你将如何构建这个 SQL 请求?
感谢您的帮助!
我的度量表如下所示:
id | value | created_at | updated_at | parameter_id | quality_id | station_id | date | campain_id | elevation | sensor_id | comment_id
--------+-------+----------------------------+----------------------------+--------------+------------+------------+---------------------+------------+-----------+-----------+------------
799634 | -1.99 | 2017-02-21 09:41:09.062795 | 2017-02-21 09:41:09.118807 | 2 | | 1 | 2006-06-26 23:24:00 | 1 | -5.0 | |
1227314 | -1.59 | 2017-02-21 09:44:12.032576 | 2017-02-21 09:44:12.088311 | 2 | | 1 | 2006-11-30 19:48:00 | 1 | -5.0 | |
1227315 | 26.65 | 2017-02-21 09:44:12.032576 | 2017-02-21 09:44:12.088311 | 3 | | 1 | 2006-11-30 19:48:00 | 1 | -5.0 | |
【问题讨论】:
-
显示测量样本..
-
id | value | created_at | updated_at | parameter_id | quality_id | station_id | date | campain_id | elevation | sensor_id | comment_id 799634 | -1.99 | 2017-02-21 09:41:09.062795 | 2017-02-21 09:41:09.118807 | 2 | | 1 | 2006-06-26 23:24:00 | 1 | -5.0 | | -
抱歉缩进不好,我还没有找到如何在 cmets 中换行。度量的标题在“comment_id”处停止,示例从 799634 开始。
-
请用字段更新您的问题,而不是评论。同样,当我运行您的示例时,出现错误:
t=# SELECT array_to_json('{{1157241840,-1.95},{1157241960,-1.96}}'::int[]); ERROR: invalid input syntax for integer: "-1.95" LINE 1: SELECT array_to_json('{{1157241840,-1.95},{1157241960,-1.96}... -
确实,我的意思不是 int[] 而是 float[]。我编辑了我的问题。
标签: ruby-on-rails json postgresql