我有一个要求,如果数据库的表被错误地删除,我们需要它回来,不管有没有数据。我们已经使用 Flyway 进行迁移,有什么方法可以使用 Flyway 或其他方式实现这一点?
问问题
1349 次
2 回答
2
我认为您可以使用回调(SQL 或 Java)破解解决方案,但您必须询问如果您首先使用 flyway 来控制对数据库的迁移和修改,如何删除表。
这从根本上是 flyway 旨在防止的,正如 flyway FAQ 中的以下片段所证实的那样,解决方案可能是首先关闭应用外部修正的可能性。
否。能够依赖数据库中的元数据并进行可靠迁移的先决条件之一是所有数据库更改均由 Flyway 进行。没有例外。这种可靠性的代价是纪律。临时更改在这里没有空间,因为它们实际上会破坏您的信心。如果之前已经手动添加过,即使是添加索引等简单的事情也可能导致迁移失败。
于 2018-02-02T23:27:36.183 回答
0
版本化迁移似乎不可能,因为它们只应用一次,或者可重复迁移,因为它们只有在校验和更改时才会重新应用。
另一种选择 - 是创建一个回调,它将在迁移后运行。
例如,afterMigrate
回调可以做到这一点,你只需要创建一个以afterMigrate.sql
该位置命名的脚本,用于加载迁移。现在您只需要制作一个 SQL 脚本来重新创建一些表(如果它不存在)。
一些供应商支持这样的选项,例如,对于PostgreSQL ,您可以使用CREATE TABLE
带有选项的查询IF NOT EXISTS
来创建一个不存在的表。
于 2018-02-01T12:42:06.763 回答