1
저는 postgres 9.2를 사용하고 있습니다. 특정 형식의 json을 생성하는 쿼리를 생성하려고합니다. 나는 단순한 json_agg
표현식에 꽤 가깝지만 지금은 앞으로 나아갈 것입니다. json dict 키로 json을 생성합니다.
INSERT INTO project (id, name) VALUES (0, 'my_project');
INSERT INTO test (id, name, project_id) VALUES (0, 'test0', 0);
INSERT INTO data (date_entered, data, test_id) VALUES (TIMESTAMP WITH TIME ZONE '2014-04-15T09:34:41.454999 z', '["some", "data"]', 0);
INSERT INTO test (id, name, project_id) VALUES (1, 'test1', 0);
INSERT INTO data (date_entered, data, test_id) VALUES (TIMESTAMP WITH TIME ZONE '2014-04-15T09:34:41.454999 z', '["some", "data"]', 1);
:
CREATE TABLE project (
id INTEGER PRIMARY KEY,
name varchar(128) NOT NULL,
UNIQUE (name)
);
CREATE TABLE test (
id INTEGER PRIMARY KEY,
name varchar(128) NOT NULL,
project_id integer,
FOREIGN KEY (project_id) REFERENCES project(id),
);
CREATE TABLE data (
id INTEGER PRIMARY KEY,
date_entered timestamp with time zone NOT NULL,
data json NOT NULL,
test_id integer,
FOREIGN KEY (test_id) REFERENCES test(id)
);
과 같이 일부 데이터를 삽입 한 후
{
"test0": {
"first_data": "2014-04-15 09:35:10.394+00",
"data_points": 1
},
"test1": {
"first_data": "2014-04-15 09:35:10.394+00",
"data_points": 1
}
}
가장 가까운 해결책은 다음과 같습니다.
이 반환 6,SELECT
json_agg(data) as data
FROM (
SELECT
test.name as test_name,
min(data.date_entered) as first_data,
count(data.id) as data_points
FROM test
INNER JOIN data on data.test_id = test.id
INNER JOIN project on test.project_id = project.id
WHERE project.name = 'my_project'
GROUP BY test.name
) as data;
:
[
{
"test_name":"test0",
"first_data":"2014-04-15 09:34:41.454999+00",
"data_points":1
},
{
"test_name":"test1",
"first_data":"2014-04-15 09:34:41.454999+00",
"data_points":1
}
]
내가 row_to_json 및 array_to_json의 다양한 홀수 사용을 시도했습니다,하지만 외부 사전에 열쇠가 될하기 위해 test_name 값을 이동할 수없는 것.
이것도 가능합니까? Postgres의 json 생성 함수를 남용하고 있습니까?
http://stackoverflow.com/questions/19378523/postgres-9-3-json-output-multi-dimensional-object – Fabricator
@Fabricator - 그 대답은 못생긴 문자열 연결을 사용합니다. 다른 방법이 없습니까? 그게 최고의 포스트 그레스가 할 수있는 경우 내 응용 프로그램에서 대신 할거야 ... – Thomi
미안해, 나는 모른다. – Fabricator