2017-02-06 2 views
-1

У меня есть таблица postgres, в которой хранится некоторый JSON с использованием Groovy sql, я хочу добавить объект в свой массив «игроков», чтобы добавить нового игрока в мою базу данных. На данный момент я пытаюсь это сделать. Я пытаюсь настроить таргетинг на мой массив «игроков» и добавить новый json, который поступает с сервера. Это дает мне ошибкудобавить объект json к массиву в моей таблице postgres

.PSQLException: ERROR: function array_append(jsonb, jsonb) does not exist

Я думаю, что я могу получать эту ошибку имеет первые пары должны быть массив не 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

Для 9.5:

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

я получаю эту ошибку, потому что: Ошибка: оператор делает не существует: jsonb || jsonb Подсказка: оператор не соответствует указанному имени и типу аргументов. Возможно, вам придется добавлять явные типы. Должность: 164 –

+0

|| \t jsonb \t Объединить два значения jsonb в новое значение jsonb (https://www.postgresql.org/docs/9.5/static/functions-json.html) –

+0

Вы используете 9.5 или 9.4 postgresql? –

Смежные вопросы