我能够对现有数据库运行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]
答案 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>
这根本没有经过测试,可能无效。