java - 如何处理Flyway迁移脚本中的DCL?

标签 java postgresql flyway embedded-database

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

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

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

最佳答案

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

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

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

关于java - 如何处理Flyway迁移脚本中的DCL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41509729/

相关文章:

spring-boot - flyway 5.2.4如何升级到9.0.1?

mysql - 如何最好地处理带有嵌入式数据库的 Flyway 进行集成测试?

postgresql - 为什么只有 super 用户可以 CREATE EXTENSION hstore,而不能在 Heroku 上创建?

php postgresql pg_fetch_all

sql - 在多个表上插入的更好方法,从 SQL WITH 语句返回多个值

java - SpringBoot 2 与 Flyway : spring. Flyway.locations 被忽略

java - Eclipse:在特定文件夹中搜索文件(将其中的特定关键字作为搜索条件)的键盘快捷键是什么?

java - 高效的 BigDecimal 上下舍入到两位小数

Java - 从匿名类内部访问循环计数器

java - yyyy' -'MM' -'dd' T'HH' :'mm' :'ss - What is the meaning of ' T' 在这里?