使用 flyway 截断所有表

Posted

技术标签:

【中文标题】使用 flyway 截断所有表【英文标题】:Truncate all tables with flyway 【发布时间】:2021-04-10 22:54:46 【问题描述】:

我是 flyway 新手,我不知道是否可以使用 flyway 截断特定模式中的所有表,所以我想删除此表中的所有数据但不想删除表。 当我使用 flyway.clean() 时,它会删除此架构中的所有表,我不希望这样。谢谢各位

【问题讨论】:

在 github/flyway 上看到这个issue(PS 我不知道 Flyway,但我知道如何搜索互联网...) 嗨 luuk 我在 github 上看到过这个问题,它已关闭,没有解决方案。谢谢。 【参考方案1】:

正如其他人在 cmets 中提到的,Flyway 目前没有内置方法来截断目标数据库中的表中的数据,同时保留架构。

不过,您可以通过多种方式使用 Flyway 完成这项工作。

例如,您可以:

编写或修改一个截断数据库中所有表的脚本 - 为了简化排序和执行,我将其写为 repeatable migration 将其存储在自己的迁移文件夹中 当您想要删除所有数据时,在调用 flyway migrate 时指定该位置

需要考虑的一点是,用于截断表的脚本通常需要具有特定于数据库平台的逻辑。如果命令未按特定顺序运行,则外键、索引视图等可能会导致截断或删除命令失败或速度非常慢。

【讨论】:

以上是关于使用 flyway 截断所有表的主要内容,如果未能解决你的问题,请参考以下文章

使用 eloquent 截断 laravel 中的所有表

使用 Flyway 加载参考数据表

在一个命令中截断 MySQL 数据库中的所有表?

在 SQL Server 2005 中截断数据库的所有表

sql 存储过程,删除Postgres中所有表中的所有条目而不删除或截断,并使用可选的忽略。

截断所有 MySql 表的 shell 脚本