【问题标题】:flyway:init don't find initial sql scriptflyway:init 找不到初始的 sql 脚本
【发布时间】:2012-08-01 13:08:32
【问题描述】:

我用 flyway-maven-plugin 做了一些实验。我没有空数据库,所以我需要一个初始 ddl 脚本。我按照 flyway wiki 中的说明进行操作:

我将名为 V1__Base_Migration.sql 的 sql 脚本放在 src/main/resources/db/migration 中。

flyway-maven-plugin的配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>com.googlecode.flyway</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>1.7</version>
            <configuration>
                <driver>org.hsqldb.jdbcDriver</driver>
                <url>jdbc:hsqldb:hsql://localhost:9001/testdb</url>
                <user>SA</user>
                <password></password>
                <schemas>PUBLIC</schemas>
                <initialVersion>1</initialVersion>
                <initialDescription>Base Migration</initialDescription>
            </configuration>
        </plugin>
    </plugins>
</build>

当我在cmd上调用mvn install flyway:init并查看数据库中的运行时,我可以找到flyway的版本表,但找不到该表,其ddl在sql脚本中。

当我查看 Maven 的调试日志时,我找不到任何提示该 sql 脚本已运行的提示。

[DEBUG]   Excluded: classworlds:classworlds:jar:1.1
[DEBUG] Configuring mojo com.googlecode.flyway:flyway-maven-plugin:1.7:init from   plugin realm ClassRealm[plugin>com.googlecode.flyway:flyway-maven-plugin:1.7, parent: sun.misc.Launcher$AppClassLoader@11799e7]
[DEBUG] Configuring mojo 'com.googlecode.flyway:flyway-maven-plugin:1.7:init' with include-project-dependencies configurator -->
[DEBUG]   (f) driver = org.hsqldb.jdbcDriver
[DEBUG]   (f) initialDescription = Base Migration
[DEBUG]   (f) initialVersion = 1
[DEBUG]   (f) schemas = PUBLIC
[DEBUG]   (f) settings = org.apache.maven.execution.SettingsAdapter@1aa246e
[DEBUG]   (f) url = jdbc:hsqldb:hsql://localhost:9001/testdb
[DEBUG]   (f) user = SA
[DEBUG] -- end configuration --
[DEBUG] Database: HSQL Database Engine
[INFO] Hsql does not support locking. No concurrent migration supported.
[DEBUG] Schema: PUBLIC
[INFO] Creating Metadata table: schema_version (Schema: PUBLIC)
[DEBUG] Found statement at line 17: CREATE TABLE PUBLIC.schema_version (
version VARCHAR(20) PRIMARY KEY,
description VARCHAR(100),
type VARCHAR(10) NOT NULL,
script VARCHAR(200) NOT NULL,
checksum INT,
installed_by VARCHAR(30) NOT NULL,
installed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
execution_time INT,
state VARCHAR(15) NOT NULL,
current_version BIT NOT NULL,
CONSTRAINT PUBLIC.schema_version_script_unique UNIQUE (script)
);
[DEBUG] Found statement at line 30: CREATE INDEX    PUBLIC.schema_version_current_version_index ON PUBLIC.schema_version (current_version);
[DEBUG] Executing SQL: CREATE TABLE PUBLIC.schema_version (
version VARCHAR(20) PRIMARY KEY,
description VARCHAR(100),
type VARCHAR(10) NOT NULL,
script VARCHAR(200) NOT NULL,
checksum INT,
installed_by VARCHAR(30) NOT NULL,
installed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
execution_time INT,
state VARCHAR(15) NOT NULL,
current_version BIT NOT NULL,
CONSTRAINT PUBLIC.schema_version_script_unique UNIQUE (script)
)
[DEBUG] Executing SQL: CREATE INDEX PUBLIC.schema_version_current_version_index ON PUBLIC.schema_version (current_version)
[DEBUG] Metadata table created: schema_version (Schema: PUBLIC)

我做错了吗?如果有人可以给我一个提示,那会很酷,我做错了什么。

您可以在 [github] (https://github.com/skosmalla/flyway-maven-test) 中找到整个 Maven 测试项目

最好的问候,

桑德拉

【问题讨论】:

    标签: hsqldb flyway


    【解决方案1】:

    flyway:init 在生产模式中有现有表时非常有用(例如 ABC 和 XYZ)并且您决定开始使用 Flyway 来管理数据库的生命周期。

    您可以将生产模式的结构转储到 sql 脚本中,例如 V0_9__Prod.sql 以在本地执行。这样,您可以将您的开发数据库与 PROD 的当前结构对齐。在添加功能时,您可以添加其他迁移,例如 V1__Base_Migration.sql

    不过,当部署到 PROD 时,您不希望 V0_9__Prod.sql 再次运行。 为避免这种情况,您可以 flyway:init 使用 0.9 的 PROD 模式。

    当它运行迁移时,它将跳过 V0_9__Prod.sql 并直接移动到 V1__Base_Migration.sql

    如果这种情况不适用于您,您可以简单地运行 flyway:migrate。不需要 flyway:init 先。

    【讨论】:

    • 如果我理解正确,maven 目标flyway:init 意味着准备数据库以使用flyway,而不是自行初始化数据库。所以prod系统的sql dump有文档功能。
    • 不,来自 prod 的 sql 转储用于在 dev 中应用以确保所有数据库都在同一页面上。 Flyway:init 然后用于 prod,以确保在部署后不会在此处重新执行转储。
    • 也许 mvn install flyway:migrate 在你的情况下就足够了吗?
    • 是的,你是对的。 mvn install flyway:migrate 就够了。非常感谢您的帮助。
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多