如何使用Flyway,以便在错误地删除表时,再次运行应用程序时,会创建已删除的表?

时间:2018-02-01 10:35:39

标签: migration restore flyway drop-table

我有一个要求,即如果一个数据库表被错误地删除,我们需要它,无论是否有数据。我们已经使用Flyway进行迁移,有什么方法可以使用Flyway或其他方式实现这一目标吗?

2 个答案:

答案 0 :(得分:0)

似乎无法使用versioned migrations,因为它们只应用一次或repeatable migrations,因为只有在校验和更改时才会重新应用它们。

另一种选择 - 创建一个callback,它将在迁移后运行。

例如,afterMigrate回调可以执行此操作,您只需在该位置创建一个名为afterMigrate.sql的脚本,用于加载迁移。现在你只需要创建一个SQL脚本来重新创建一些表(如果它不存在)。

有些供应商支持这样的选项,例如,PostgreSQL您可以使用CREATE TABLE选项使用IF NOT EXISTS查询,只创建一个不存在的表。

答案 1 :(得分:0)

我认为您可以使用回调(SQL或Java)来破解解决方案,但是如果您在第一次使用flyway来控制迁移和修改数据库时,您必须询问如何删除表地点。

这基本上是flyway打算防止的,因为来自飞路常见问题解答的以下片段确认并且解决方案可能是关闭首先应用外部修改的可能性。

Can I make structure changes to the DB outside of Flyway?

  

没有。能够依赖数据库中的元数据并具有可靠的迁移的先决条件之一是所有数据库更改都是由Flyway完成的。没有例外。这种可靠性的代价是纪律。临时变更在这里没有空间,因为它们会破坏你的信心。如果已经手动添加索引,即使是添加索引这样的简单事情也可以跳过迁移。