如何在PostgreSql上使用Jooq级联截断



我正在编写集成测试,并希望在每次测试后清理(postgres(数据库。因此,我认为对所有(实际上只有大部分(表执行级联截断操作是可行的。

我正在开发一个使用Kotlin、Spring和Jooq的应用程序,这就是为什么我用truncateCascade来映像Truncator类,我可以将其自动连接到我的SpringBootTest类中。

import org.jooq.DSLContext
import org.jooq.Table
@Service
class Truncator(private val dsl: DSLContext) {
fun truncateCascade(tables: List<Table<*>>) {
dsl.truncate ...
}
//      single truncate work only for tables without foreign key constraints
//      so I can't simply iterate over all tables and call this method.
//    fun truncate(table: Table<*>) {
//        dsl.truncate(table).execute()
//    }
}

基本上,我正在寻找truncateCascade的实现(假设这不是一种错误的方法(。

在调查这个问题时,我发现了Jooq的TruncateCascadeStep的文档,并提到了continueIdentity或restartIdentity,但我对Jooq或一般数据库没有足够的经验来将其拼凑在一起。

您缺少的是在truncate()命令上调用cascade()

fun truncate(table: Table<*>) {
dsl.truncate(table).cascade().execute()
}

另一种选择是简单地完全删除模式,然后从头开始重新创建。这对于测试来说可能更健壮,对于中小型模式来说不应该花费太多时间。

相关内容

  • 没有找到相关文章

最新更新