postgresql 使用Fluent在Postgres表中保存JSON

ih99xse1  于 2022-12-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(130)

我正在寻找如何从请求中捕获整个JSON主体并将其与一些JSON内容沿着保存到PSQL表的建议。我为json定义了一个列:

.field(.string("json"), .json)

我尝试将数据保存到数据库中,但似乎无法满足.json类型要求。我继续看到此错误:
服务器:列“json”的类型为jsonb,但表达式的类型为bytea(transformAssignedExpr)
当使用此函数转换JSON时:

if let reqData: Data = req.body.string?.data(using: .utf8) {
     try await Scan.query(on: req.db)
          .set(\.$json, to: reqData)
          .filter(\.$unitId == unitID)
          .update()
}

我确信问题出在我转换req.body.string?.data(using: .utf8)的方式上,我一直在摆弄Request类中的一些其他方法,但不知道是否有一个内置的方法,或者我是否需要做更多的工作来执行转换。我一直在寻找这方面的一些资源,我“I“我很坚韧找到更多关于这方面的常见做法的信息。
我最初也尝试使用jsonb类型,但是为了简单起见,我现在坚持使用json类型,因为Fluent并不真正支持jsonb。
先谢了!

oewdyzsn

oewdyzsn1#

经过大量的寻找一个简单的方法来做到这一点,它似乎是唯一的方法,使这项工作是:将整个JSON解码为自定义数据类型(swift模型,而不是Fluent模型),该数据类型准确地表示JSON结构并符合PostgresJSONBCodablePostgresJSONCodable,具体取决于您希望如何存储它。
一旦有了数据存储机制,就可以将JSON解码为(swift)模型,然后将其编码为PostgresData(jsonb: <#T##Data#>),然后进行数据库查询以更新数据库。
这给处理结构未知的动态JSON查询带来了巨大的挑战,但幸运的是,这里的情况并非如此,我可以严格定义数据结构。
我正在使用从这些来源中找到的信息片段来做出这一决定:

相关问题