I 表在 postgresql 数据库中有一个id
字段和一个jsonb
字段。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