Liquibase为postgres创建Schema

时间:2016-04-05 07:02:46

标签: java postgresql liquibase dropwizard

我正在使用Dropwizard(1.0.0)和Liquibase创建一个数据库(如果它不存在)。

问题在于我使用的是不同的Postgres架构(不公开)。似乎Liquibase之前无法创建此架构吗?我期待Liquibase生成这个模式,但如果我尝试构建数据库,它总是会抛出“找不到名称xx的模式”。

2 个答案:

答案 0 :(得分:7)

即使Liquibase在其捆绑的更改/重构中没有CREATE SCHEMA(因此在dropwizard db dump期间也没有生成一个),您仍然可以将此作为变更集包含在使用sql tag迁移更改日志,如下所示:

<changeSet author="christian" id="1">
    <sql dbms="postgresql" endDelimiter=";">
        CREATE SCHEMA foo
    </sql>
</changeSet>

请注意,在应用任何更改集之前,Liquibase将在 PUBLIC 架构中创建 EM>
如果你在dropwizard中运行db migrate --dry-run,你会看到Liquibase首先执行

CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK ...
CREATE TABLE PUBLIC.DATABASECHANGELOG ...
跑步前

CREATE SCHEMA foo;

答案 1 :(得分:1)

不是直接回答这个问题,而是将其发布给遇到我错误的任何人,并在多个模式中创建表。我在使用yae_or_nay.clear(); 配置从maven执行此操作时遇到错误。

'play_again: loop {
    let mut yae_or_nay = String::new();
    io::stdin().read_line(&mut yae_or_nay)
        .expect("Failed to read line.");

我试图通过在pom.xml中添加以下配置来修复它,但这只是部分解决方案:

defaultSchemaName

最后,我也通过在连接字符串的末尾添加foo来解决此问题 [ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.6.2:update (default-cli) on project demo: Error setting up or running Liquibase: ERROR: relation "databasechangelog" already exists [Failed SQL: CREATE TABLE databasechangelog (ID VARCHAR(255) NOT NULL, AUTHOR VARCHAR(255) NOT NULL, FILENAME VARCHAR(255) NOT NULL, DATEEXECUTED TIMESTAMP WITHOUT TIME ZONE NOT NULL, ORDEREXECUTED INTEGER NOT NULL, EXECTYPE VARCHAR(10) NOT NULL, MD5SUM VARCHAR(35), DESCRIPTION VARCHAR(255), COMMENTS VARCHAR(255), TAG VARCHAR(255), LIQUIBASE VARCHAR(20), CONTEXTS VARCHAR(255), LABELS VARCHAR(255), DEPLOYMENT_ID VARCHAR(10))] -> [Help 1]