Таблица
I с полем id
и полем jsonb
в базе данных postgresql.Структура jsonb выглядит примерно так:
{
"id": "some-id",
"lastUpdated": "2018-10-24T10:36:29.174Z",
"counters": {
"counter1": 100,
"counter2": 200
}
}
Мне нужно обновить lastModified
и один из счетчиков:
def update(id: String, counter: Option[String])
Так, например, еслиЯ делаю update("some-id", Some("counter2"))
Мне нужно, чтобы lastUpdated
было текущим временем даты, а counter2
должно быть увеличено до 201
.
Я использую ScalikeJDBC, и вот где я дошел до этого:
def update(id: String, counter: Option[String]): Option[ApiKey] = DB localTx { implicit session =>
val update =
if(counter.isDefined)
sqls"""'{"lastUpdated": ${DateTime.now()}, "counters": {'${counter.get}: COALESCE('counters'->>${counter.get},'0')::int'}'"""
else
sqls"""'{"lastUpdated": ${DateTime.now()}}'"""
sql"UPDATE apiKey SET content = content || $update WHERE id = $key".update().apply()
}
Но я получаю следующую ошибку:
org.postgresql.util.PSQLException: The column index is out of range: 4, number of columns: 3
Я пробовал другие подходы, но я не смог заставить его работать.Можно ли записать это как один запрос?
Вот сломанная скрипка, чтобы помочь с тестированием https://www.db -fiddle.com / f / bsteTUMXDGDSHp32fw2Zop / 1