从liquibase maven插件创建数据库

时间:2016-08-31 09:54:39

标签: maven liquibase

我能够对现有数据库运行liquibase,但我也试图自动创建数据库。

我正在使用maven插件,配置如下:

        <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>3.5.0</version>
            <configuration>
                <propertyFile>src/main/resources/liquibase.properties</propertyFile>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>update</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

我的liquibase.properties文件包含以下内容:

driver=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/mydb?createDatabaseIfNotExist=true
username=postgres
password=mypass
changeLogFile=db.changelog.xml
referenceUsername=postgres
referencePassword=${database.password}

根据SO上的另一个question添加URL参数createDatabaseIfNotExist = true应该在运行插件更新目标时创建数据库。但是,我收到以下错误:

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.5.0:update (default-cli) on project accommodation: Error setting up or running Liquibase: liquibase.exception.DatabaseException: org.postgresql.util.PSQLException: FATAL: database "mydb" does not exist -> [Help 1]

1 个答案:

答案 0 :(得分:0)

通常,如果数据库不存在,Liquibase将不会创建数据库。 Liquibase使用JDBC驱动程序与数据库通信,而JDBC没有用于从头创建数据库的API。许多数据库都不允许您仅使用SQL创建数据库,因此我认为这就是该功能不存在的原因。

Postgres确实有一个用于创建数据库的SQL命令,因此您可以尝试使用特定于postgres的<sql>更改标记 - 如下所示:

<changeset id="createdatabase" author="steve" dbms="postgres">
  <sql>CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace</sql>
</changeset>

这根本没有经过测试,可能无效。