问题标签 [flyway]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3134 浏览

database - 用于数据库结构的 Flyway/Liquibase 和用于数据库插入的 DBUnit?

我的应用程序有以下场景:

  • 1 台生产服务器
  • 1 台测试服务器
  • n 开发计算机

对于数据库迁移,我们使用 Hibernate Schema Update 来为 Schema 和 DBUnit 填充所有生产数据(在所有服务器/计算机上)。模式更新完成后,我为新模式生成了一个新的 DTD 文件,因此我可以重新导入 DBUnit XML。应用程序在启动时使用 XML 文件更新数据库(仅在开发和测试服务器/计算机上!)

当然,这种方法不是最优的和脆弱的。所以我研究了 Liquibase 和 Flyway。两者似乎都是很棒的工具,但我没有得到的是:如何迁移数据?就我而言,我每周转储一次生产系统的数据,并将其作为 DBUnit XML 文件添加到应用程序源代码管理中,因此所有开发人员都有“新鲜”数据,测试服务器也有当前生产数据。

我在 Liquibase 和 Flyway 中看到的问题是,没有解决方案如何从数据库数据中进行自动差异并自动生成迁移更改。

所以我的想法是以下步骤:

  1. 将 Hibernate 设置为验证而不是更新。
  2. 当需要更改 STRUCTURAL 数据库时,我将其添加到主要版本的迁移脚本中
  3. 迁移脚本中没有数据库插入。
  4. 根据新的数据库结构为 DBunit 生成新的 DTD
  5. 从生产数据库生成 DBUnit XML。

另一个想法是利用 flyways JavaMigration 并提供基于 DBUnit 的初始数据库转储。数据库数据的所有其他更改将在迁移脚本中处理。但仍然存在问题:如何从当前迁移脚本状态和生产数据库状态进行差异?

如果有人能给我提示如何处理我的场景,那就太棒了:)

0 投票
1 回答
443 浏览

postgresql - Flyway 和 Postgres 元命令

我想在 flyway 中使用 psql 元命令(http://www.postgresql.org/docs/9.1/static/app-psql.htm)。但是,当我做类似的事情时

我得到这个例外:

我想 psql 解释器没有运行。那是对的吗?有没有办法使用元命令之类的东西?我应该更广泛地使用飞行路占位符吗?

0 投票
1 回答
398 浏览

flyway - 一次执行多个语句

据我所见,Flyway 在给定带有一些语句的 SQL 文件时,会使用 ; 一个一个地执行它们。作为分隔符(这是我从 SqlScript.execute() 中理解的)。因此,在远程服务器上应用补丁需要大量时间,因为文件的每个语句都是单独发送的。

我想知道是否可以通过将整个文件一次性发送然后立即应用来进行“批量更新”。或者也许是我们在这里遇到的一些 JDBC 约束?

0 投票
2 回答
17360 浏览

cdi - Flyway 的 CDI 扩展

在休眠连接到我的 JBoss AS 7.1 之前,我尝试在我的应用程序中运行 flyway。我尝试使用@javax.ejb.Startup注释,但这会在初始化 Hibernate 并检查数据库方案后执行。

据我了解,我们可以使用在 Hibernate 初始化之前挂钩的 CDI 扩展。flyway开箱即用是否有一些支持?如果没有,有没有人尝试过这样做?

0 投票
1 回答
2911 浏览

jar - Flyway 在 jar 文件中找不到迁移

我在我支持的许多应用程序中实现了 Flyway,它的工作就像做梦一样。

但是,一旦我将应用程序部署到测试环境,迁移就会停止工作。

经过一番调查,我发现当它们被加载到 jar 文件中时,Flyway 没有找到迁移,但是当它们没有被压缩时(比如当我在 Eclipse 中工作或者我将 jar 提取到类路径中时)它可以工作正如预期的那样。

由于应用程序的插件架构,我无法使用“默认”设置,因此我将 Flyway 对象设置如下:

如果要解压缩 jar 文件,则 sql 文件将位于:za/co/company/application/db/migration

如前所述,我知道迁移有效,只是在 jar 文件中时无效。上面的代码执行完美,只是没有找到作为迁移的一部分运行的 sql 文件。

虽然最初是使用 flyway-core-1.6 开发的,但我已经在 1.6.1 和 1.7_SNAPSHOT 版本中尝试过(同样的负面结果),我在这里这里发现了类似的问题。

编辑:附加信息

操作系统:Windows XP
JDK:1.7.0_04
DB:SQL Server 2005
通过 bat 文件直接从命令窗口运行。

我已确认我使用的是默认前缀 (V) 和后缀 (.sql)。日志中提到的被过滤掉的迁移文件的名称确实是我想要执行的迁移。

编辑:还有更多信息。 我克隆了源存储库并在资源被记录为被过滤之前获得了堆栈跟踪。

我已经确认迁移被过滤掉的唯一时间是当它在 jar 文件中找到它们时。就好像 .sql 迁移在 jar 文件中时甚至没有被扫描。

我仍在四处寻找,并将相应地更新。

编辑:源代码查询: 我对 Flyway 源代码并不太熟悉,我只在其中闲逛了几个小时......

SqlMigrationResolver 类的 resolveMigrations 方法中的这段代码应该做什么?如果我从代码中删除它,SQLmigrations 会从 Jar 文件中完美加载,否则它们不会加载并记录警告。

0 投票
1 回答
1903 浏览

maven-3 - 如何停用 flyway:clean 配置文件中的目标

我正在使用 flyway maven 插件来迁移数据库:

我有三个环境(dev、pre、pro)和每个环境的配置文件。每个环境都设置了自己的属性,因此我可以使用 flyway 设置具体配置文件并迁移到我想要的 DB。

Flyway 有一个干净的目标,这个目标允许删除模式中的所有对象而不删除模式本身。

有什么方法可以仅在我的一个个人资料中停用此目标?(很明显:P)

0 投票
1 回答
131 浏览

java - Flyway 1.5 & jBoss 7 migrate() 返回 0 且未应用 sql 迁移

我试图让 Flyway 1.5 在 jboss 7 下工作,当我调用 migrate() 它返回零并且没有从目录执行迁移。baseDir 返回 db/migration,我在 PROJECT_ROOT/src/main/resources/db/migration 下进行了迁移。迁移文件名为 V1__Test.sql。我应该提到,我还尝试通过显式设置 baseDir 并且 schema_version 表中包含版本 0(由 flyway.init() 设置)。

我也在 Flyway 1.6 和 1.6.1 下尝试过这个,我在一些已知的 1.6 问题下看到了 VFS 协议异常。

有什么建议么?

问候,吉姆

0 投票
1 回答
753 浏览

java - 在 JBoss 7 上运行 Flyway 时出错

我正在尝试设置我的应用程序,以便当它部署在任何环境中时它会自动升级数据库,所以我在 Spring 配置中添加了以下内容:

但是当我在 JBoss 7 中运行它时,出现以下错误:

com.googlecode.flyway.core.validation.ValidationException: Found non-empty schema 'WMYERS' without metadata table! Use init() first to initialize the metadata table.

我已经对数据库运行了一个flyway clean-migrate,所以它已经设置好并准备好了,并且存在SCHEMA_HISTORY表,有什么想法吗?

0 投票
2 回答
3878 浏览

database - flyway 迁移是否支持 PostgreSQL 的 COPY?

在执行了现有 posgresql 模式的 pg_dump 之后,我有一个 sql 文件,其中包含许多使用副本的表填充语句。

虽然不是标准的,但这是 PostgreSQL 的 PLSQL 实现的一部分。

执行 flyway 迁移(通过 maven 插件)我得到:

我做错了什么,还是不支持?

谢谢。

0 投票
1 回答
4542 浏览

java - 使用 Flyway 的 MySQL JDBC 驱动程序

在我的 ~/.bashrc 中:

CLASSPATH 变量是正确的:

尝试运行它:

任何想法为什么它找不到驱动程序?

谢谢!