将json对象追加到postgres表中的数组中

时间:2017-02-06 20:13:49

标签: arrays json postgresql groovy

我有一个postgres表,它使用Groovy sql存储一些JSON,我想在我的'players'数组中附加一个对象,以便为我的数据库添加一个新的播放器。目前我正在尝试这个。我尝试瞄准我的'玩家'阵列并附加来自服务器的新json。这给了我一个错误

  

.PSQLException:错误:函数array_append(jsonb,jsonb)没有   存在

我想我可能会得到这个错误,第一个param需要是一个数组而不是jsonb,有没有办法在我的数据库中定位数组,所以它作为一个数组返回?或者有更好的方法将此对象追加到我的数组中吗?

  sql.executeUpdate("""
            UPDATE site_content
            SET content = array_append(content->'playersContainer'->'players', '${json}'::jsonb);
            where id = :id
        """, id: player.teamId)
}

这是我的JSON

"playersContainer": {
        "players": [
            {
                "id": "1",
                "name": "Nick Pocock",
                "teamName": "Shire Soldiers",
                "bio" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla imperdiet lorem tellus, in bibendum sem dignissim sed. Etiam eu elit sit amet lacus accumsan blandit sed ut dolor. Mauris vel dui non nisi vestibulum commodo vel id magna. Donec egestas magna in tincidunt mollis. Fusce mauris arcu, rhoncus ut lacus sed, fermentum ultrices elit. In sollicitudin at ex dapibus vestibulum. Pellentesque congue, est id lobortis viverra, mauris lectus pharetra orci, ut suscipit nisl purus vehicula est. Aliquam suscipit non velit vel feugiat. Quisque nec dictum augue.",
                "ratings": [
                    1,
                    5,
                    6,
                    9
                ],
                "assists": 17,
                "manOfTheMatches": 20,
                "cleanSheets": 1,
                "data": [
                    3,
                    2,
                    3,
                    5,
                    6
                ],
                "totalGoals": 19

            }
}

我的专栏名为内容,其中包含JSONb

1 个答案:

答案 0 :(得分:1)

对于9.5:

UPDATE site_content
            SET content = jsonb_set(content, '{playersContainer,players}'::text[], content->'playersContainer'->'players' || '${json}'::jsonb);
            where id = :id