【问题标题】:Why does the Maven Flyway Plugin Fail to Migrate My Hsqldb database?为什么 Maven Flyway 插件无法迁移我的 Hsqldb 数据库?
【发布时间】:2012-04-05 14:29:42
【问题描述】:

我在使用 flyway 和 maven 插件初始化和迁移 HSQLDB 数据库时遇到问题。

我的 pom.xml 中有这个 XML 块:

<plugin>
    <groupId>com.googlecode.flyway</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
    <version>1.5</version>
    <configuration>
        <driver>org.hsqldb.jdbcDriver</driver>
        <url>jdbc:hsqldb:file:${project.build.directory}/db/margarita;shutdown=true</url>
        <user>develop</user>
        <password></password>
        <schemas>margarita</schemas>
        <table>schema_history</table>
        <initialVersion>118</initialVersion>
        <initialDescription>Base Migration</initialDescription>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>2.2.8</version>
        </dependency>
    </dependencies>
</plugin>

当我运行这个命令时:

mvn flyway:migrate

我收到此错误消息:

[INFO] --- flyway-maven-plugin:1.5:migrate (default-cli) @ Margarita ---
[INFO] Database closed
[INFO] Hsql does not support locking. No concurrent migration supported.
[INFO] Database closed
[ERROR] com.googlecode.flyway.core.exception.FlywayException: Error executing statement at line 17: CREATE TABLE MARGARITA.schema_history (
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 MARGARITA.schema_history_script_unique UNIQUE (script)
)
[ERROR] Caused by org.hsqldb.HsqlException: invalid schema name: MARGARITA
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.550s
[INFO] Finished at: Tue Mar 20 21:54:06 EDT 2012
[INFO] Final Memory: 6M/81M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.googlecode.flyway:flyway-maven-plugin:1.5:migrate (default-cli) on project Margarita: Flyway Error: com.googlecode.flyway.core.exception.FlywayException: Error executing statement at line 17: CREATE TABLE MARGARITA.schema_history (
[ERROR] version VARCHAR(20) PRIMARY KEY,
[ERROR] description VARCHAR(100),
[ERROR] type VARCHAR(10) NOT NULL,
[ERROR] script VARCHAR(200) NOT NULL,
[ERROR] checksum INT,
[ERROR] installed_by VARCHAR(30) NOT NULL,
[ERROR] installed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
[ERROR] execution_time INT,
[ERROR] state VARCHAR(15) NOT NULL,
[ERROR] current_version BIT NOT NULL,
[ERROR] CONSTRAINT MARGARITA.schema_history_script_unique UNIQUE (script)
[ERROR] ): StatementCallback; uncategorized SQLException for SQL [CREATE TABLE MARGARITA.schema_history (
[ERROR] version VARCHAR(20) PRIMARY KEY,
[ERROR] description VARCHAR(100),
[ERROR] type VARCHAR(10) NOT NULL,
[ERROR] script VARCHAR(200) NOT NULL,
[ERROR] checksum INT,
[ERROR] installed_by VARCHAR(30) NOT NULL,
[ERROR] installed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
[ERROR] execution_time INT,
[ERROR] state VARCHAR(15) NOT NULL,
[ERROR] current_version BIT NOT NULL,
[ERROR] CONSTRAINT MARGARITA.schema_history_script_unique UNIQUE (script)
[ERROR] )]; SQL state [3F000]; error code [-4850]; invalid schema name: MARGARITA; nested exception is java.sql.SQLException: invalid schema name: MARGARITA
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

这不是受支持的进程吗?我以为 hsqldb 会自动创建引用的架构,所以我很困惑。

【问题讨论】:

    标签: maven hsqldb flyway


    【解决方案1】:

    您的 SQL 脚本中似乎有错误:

    Caused by org.hsqldb.HsqlException: invalid schema name: MARGARITA

    尝试通过从 CREATE TABLE 子句中删除模式名称来更新您的 SQL 脚本。示例:

    CREATE TABLE schema_history (
    version VARCHAR(20) PRIMARY KEY,
    description VARCHAR(100),
    ...
    

    【讨论】:

    • 或者在CREATE TABLE MARGARITA.schema_history(...语句之前执行CREATE SCHEMA MARGARITA AUTHORIZATION DBA
    • 我认为 fredt 的解决方案在这种情况下是正确的,谢谢!
    【解决方案2】:

    尝试运行下一条命令:mvn flyway:clean flyway:init flyway:migrate 它应该工作

    看看这里:http://flywaydb.org/documentation/maven/

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 2018-12-28
      • 2017-07-10
      • 2016-04-28
      • 2013-03-06
      • 2014-08-02
      • 2021-09-30
      • 2013-08-10
      • 2021-01-18
      相关资源
      最近更新 更多