【问题标题】:Liquibase - Error : relation "databasechangelog" already existsLiquibase - 错误:关系“databasechangelog”已经存在
【发布时间】:2014-06-13 16:06:20
【问题描述】:

我正在尝试将 liquibase 与我们的应用程序集成。我正在使用 Maven 集成方法执行它。

当我执行时,我看到数据库更改日志的创建脚本被调用了两次并得到“表已存在”错误。以下是来自控制台的语句。我正在使用 liquibase-core-3.1.1 罐子。

INFO 2014-04-28 06:49:liquibase: Successfully acquired change log lock
INFO 2014-04-28 06:49:liquibase: Creating database history table with name: databasechangelog
INFO 2014-04-28 06:49:liquibase: ChangeSet src/main/resources/sql/postGre/db.changelog-2.0.xml::1::fms ran successfully in 555ms
INFO 2014-04-28 06:49:liquibase: Creating database history table with name: databasechangelog
SEVERE 2014-04-28 06:49:liquibase: Error executing SQL CREATE TABLE databasechangelog (ID VARCHAR(63) NOT NULL, AUTHOR VARCHAR(63) NOT NULL, FILENAME VARCHAR(200) NOT NULL, DATEEXECUTED TIMESTAMP WITH TIME ZONE NOT NULL, ORDEREXECUTED INT NOT NULL, EXECTYPE VARCHAR(10) NOT NULL, MD5SUM VARCHAR(35), DESCRIPTION VARCHAR(255), COMMENTS VARCHAR(255), TAG VARCHAR(255), LIQUIBASE VARCHAR(20), CONSTRAINT PK_DATABASECHANGELOG PRIMARY KEY (ID, AUTHOR, FILENAME))
org.postgresql.util.PSQLException: ERROR: relation "databasechangelog" already exists

POM 文件入口

<plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>2.0.1</version>
            <configuration>
                <changeLogFile>src/main/resources/sql/postGre/changelog-master.xml</changeLogFile>
                <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                <defaultschemaName><<my application schema>> </defaultschemaName>
                <driver>org.postgresql.Driver</driver>
                <url>jdbc:<<mydburl>> </url>
                <username>user</username>
                <password>pwd</password>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>update</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

请告诉我哪里出错了..

【问题讨论】:

  • 你可以在 3.1.1 版本中尝试使用 liquibase-maven-plugin 吗?
  • 试过了,没用
  • 带有 defaultSchemaName 的示例在占位符后有一个空格。那个空间真的存在吗?不用 defaultSchemaName 可以试试吗?
  • 我最初尝试不使用 defaultSchemaName,在寻找解决方案时,我发现了一个博客,他们在其中设置了 defaultSchemaName 并使其正常工作,看起来它对我没有帮助...关于空间...不,没有空间

标签: liquibase


【解决方案1】:

对于 h2 数据库我有同样的问题。

我的连接字符串是

jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;

在我从末尾删除 DATABASE_TO_UPPER=false 后,它开始工作。

最后一个连接字符串如下:

jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;

【讨论】:

  • DATABASE_TO_UPPER 字段的默认值很可能是 true。
【解决方案2】:

得到这个工作,我们使用的是旧版本的 posgres,9.1 版本现在接受 defaultSchemaName 和它的 workign。感谢所有的建议。

【讨论】:

  • 我在 liquibase-maven-plugin xml 中设置了 ,它现在可以工作了。
  • 我在 URL 中添加了数据库名称并注释掉了 部分。
【解决方案3】:

尝试将 CASE_INSENSITIVE_IDENTIFIERS=TRUE; 参数添加到您的 url 连接。示例:

datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE;

【讨论】:

    【解决方案4】:

    Mysql 数据库中的相同问题,在更改日志中添加架构名称后得到解决,如下所示。

    <changeSet author="chiran" id="Creation of Static Marker">
        <createTable tableName="STATIC_MARKER2" schemaName="SWIFT">
        <column name="marker_id" type="BIGINT" autoIncrement="true">
            <constraints primaryKey="true" nullable="false" />
        </column>
        <column name="marker_name" type="varchar(50)">
            <constraints nullable="false" />
        </column>
        <column name="refillable" type="BIGINT"></column>
        <column name="created" type="TIMESTAMP"/>
        </createTable>
    </changeSet>
    
    And below is the snapshot of maven-liquibase plugin version used.
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.6.2</version>
    

    【讨论】:

      猜你喜欢
      • 2022-06-26
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2018-10-05
      • 2018-06-29
      相关资源
      最近更新 更多