如何在Flyway迁移脚本中处理DCL?

时间:2017-01-06 16:18:11

标签: java postgresql flyway embedded-database

我有一个postgres数据库,其中已经定义了用户和角色。此数据库中有多个模式,这些模式都通过不同的项目/ flyway脚本进行控制。我正在努力将Flyway集成添加到一个新项目中,我们将使用嵌入式Postgres实例进行测试。

由于此实例上不存在这些用户/角色,因此需要在迁移脚本中创建它们。但是,由于这些用户/角色已存在于我的操作数据库中,因此迁移在尝试创建角色时将失败。

我已经考虑为此编写一个函数,但是该函数必须包含在使用嵌入式Postgres的任何项目中,并且必须在多个代码库中进行维护。这看起来很草率。任何人都可以推荐一种使用Flyway处理这些DCL操作的方法,它可以与嵌入式方法以及我的操作数据库一起使用吗?

1 个答案:

答案 0 :(得分:1)

在之前的项目中,我们将此方法用于一组额外的Flyway迁移脚本。我们将这些脚本添加到测试环境类路径中。 在回调功能和可重复迁移功能添加之前,我们将它用于Flyway版本。

为您的测试环境添加回调配置,并在迁移阶段之前或之后添加您的用户和角色。

第三种解决方案为您的用户和角色设置使用可重复的迁移脚本,请参阅https://flywaydb.org/documentation/migration/repeatable。在生产和测试中使用此脚本。但在这种情况下,您的SQL必须正确且可重复,否则您将破坏您的生产环境。