来自Postgres API的嵌套JSON,架构不存在?

时间:2013-08-30 15:56:20

标签: sql json postgresql

我的Postgres数据库有一个返回JSON的SQL API。

我有两个表:holidays,其架构为namehd_idphotos,这是当天拍摄的照片。其架构为urlcaptionh_id

我想创建一个嵌套的json对象,如下面的那个。我正在运行的SQL是

    SELECT holidays.name, holidays.h_id, 
    concat('[', group_concat(concat('{"src":"', photos.url, '","caption":"', photos.caption '"}', separater ','), ']') ) 
    FROM holidays 
    INNER JOIN photos 
    ON holidays.h_id = photos.h_id 
    GROUP BY holidays.h_id

但是这给了我错误"schema "photos" does not exist"。照片是一张桌子,而不是架构。我似乎没有和this seemingly related question犯同样的错误。我不确定如何构建JOIN。

这是所需的JSON输出。

   [
    {
        name: 'Labor Day',
        h_id: 'a1',
        photos: [
            {
                src: 'url',
                caption: 'text'
            },
            {
                src: 'url',
                caption: 'text'
            }
        ]
    },
    {
        name: 'MLK Day',
        h_id: 'a2',
        photos: [
            {
                src: 'url',
                caption: 'text'
            },
            {
                src: 'url',
                caption: 'text'
            }
        ]
    }
   ]

1 个答案:

答案 0 :(得分:1)

group_concat中没有PostgreSQL。您可以使用string_agg

select
    h.name, h.h_id, 
    '[' || string_agg('{"src":"' || p.url || '", "caption":"' || p.caption  || '"}', ',') || ']'
from holidays as h
    inner join photos as p on h.h_id = p.h_id 
group by h.name, h.h_id

请参阅此示例中的sql fiddle demo

或使用JSON functionsversion 9.3

中还有很好的JSON支持