我有一个要求,即如果一个数据库表被错误地删除,我们需要它,无论是否有数据。我们已经使用Flyway进行迁移,有什么方法可以使用Flyway或其他方式实现这一目标吗?
答案 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完成的。没有例外。这种可靠性的代价是纪律。临时变更在这里没有空间,因为它们会破坏你的信心。如果已经手动添加索引,即使是添加索引这样的简单事情也可以跳过迁移。