gpt4 book ai didi

postgresql - 替代已弃用的 PostgresDataType.JSON?

转载 作者:行者123 更新时间:2023-11-29 13:42:04 26 4
gpt4 key购买 nike

我将 JOOQ 与 PostgreSQL 结合使用,并尝试实现如下查询:

INSERT INTO dest_table (id,name,custom_data)
SELECT key as id,
nameproperty as name,
CONCAT('{"propertyA": "',property_a,'", "propertyB": "',property_b,'","propertyC": "',property_c,'"}')::json as custom_data
FROM source_table

连接/JSON 位是我在这里要问的。我实际上已经设法让它工作了,但只能通过使用这个(Kotlin):

val concatBits = mutableListOf<Field<Any>>()
... build up various bits of the concatenation ...
val concatField = concat(*(concatBits.toTypedArray())).cast(PostgresDataType.JSON)

我担心 PostgresDataType 已被弃用。文档说我应该改用 SQLDataType,但它没有 JSON 值。

推荐的方法是什么?

编辑:更多信息......

我正在构建这样的查询:

val innerSelectFields = listOf(
field("key").`as`(DEST_TABLE.ID),
field("nameproperty").`as`(DEST_TABLE.NAME),
concatField.`as`(DEST_TABLE.CUSTOM_DATA)
)

val innerSelect = dslContext
.select(innerSelectFields)
.from(table("source_table"))

val insertInto = dslContext
.insertInto(DEST_TABLE)
.select(innerSelect)

我发布的初始查询有点误导,因为从这段代码生成的 SQL 没有(id,name,custom_data) 部分。

此外,如果重要的话,“source_table”是一个临时表,在运行时创建,因此没有自动生成的类。

最佳答案

jOOQ 目前不支持开箱即用的 JSON 数据类型。主要原因是不清楚将 JSON 数据结构绑定(bind)到哪种 Java 类型,因为 JDK 没有这样的标准类型,并且 jOOQ 不会偏爱第三方库。

目前推荐的方法是为您首选的第三方 JSON 库创建您自己的自定义数据类型绑定(bind): https://www.jooq.org/doc/latest/manual/code-generation/custom-data-type-bindings

在这种情况下,您将不再需要将绑定(bind)变量显式转换为某种 JSON 类型,因为您的绑定(bind)会透明地处理该问题。

关于postgresql - 替代已弃用的 PostgresDataType.JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53829811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com