繁体   English   中英

Liquibase 为 postgres 创建架构

[英]Liquibase create Schema for postgres

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

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

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

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

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

CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK ...
CREATE TABLE PUBLIC.DATABASECHANGELOG ...

在跑步之前

CREATE SCHEMA foo;

不是直接回答问题,而是将其发布给遇到错误的任何人,在多个模式中创建表。 我在使用defaultSchemaName配置从maven执行此错误时收到错误。

[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]

我尝试通过将以下配置添加到pom.xml来修复它,但这只是一个部分解决方案:

<defaultSchemaName>foo</defaultSchemaName>
<changelogSchemaName>foo</changelogSchemaName>

最后,我通过在连接字符串的末尾添加foo来解决这个问题,比如这个jdbc:postgresql://localhost:5432/postgres?currentSchema=foo

除了您使用 Dropwizard 之外, Spring Boot Pre-Liquibase 模块可以满足您的要求。

Liquibase 存在先有鸡还是先有蛋的问题,因为它不能用于配置自己的先决条件,例如模式。 这是 Pre-Liquibase 解决的问题。 Pre-Liquibase 本身之前执行一些 SQL。

有时,您希望在同一数据库主机上托管应用程序的多个实例。 然后,您需要按模式将它们分开。 这只是 Pre-Liquibase 的一种可能用例。

Pre-Liquibase 是为 Spring 设计的,所以它不会在你的 Dropwizard 场景中开箱即用。 但是可以随意窃取想法。

(完全披露:我是 Pre-Libuibase 的作者)

Liquibase 没有CREATE SCHEMA ,您需要通过运行 SQL 查询来管理创建模式功能。

<changeSet author="liquibase_user" id="1">
    <sql>
        CREATE SCHEMA IF NOT EXISTS liquibase_demo;
    </sql>
</changeSet>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM