[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]
4条答案
按热度按时间s1ag04yj1#
即使Liquibase在其捆绑的变更/重构中没有
CREATE SCHEMA
(因此在dropwizarddb dump
期间不会生成CREATE SCHEMA
),您仍然可以使用sql
tag将其作为变更集包含在您的迁移变更日志中,如下所示:PUBLIC
* 模式中创建其 * 自己的 * 表,无论如何-在应用任何变更集之前:*如果在dropwizard中运行
db migrate --dry-run
,您将看到Liquibase将首先执行运行前
46scxncf2#
不是直接回答这个问题,而是为遇到我在多个模式中创建表时遇到的错误的任何人发布。我在使用
defaultSchemaName
配置从maven执行此操作时遇到错误。我试图通过在pom.xml中添加以下配置来修复它,但这只是部分解决方案:
最后,我通过在连接字符串的末尾添加foo来修复这个问题,就像
jdbc:postgresql://localhost:5432/postgres?currentSchema=foo
z2acfund3#
Liquibase没有
CREATE SCHEMA
,您需要通过运行SQL查询来管理创建模式功能。dddzy1tm4#
除了您正在使用Dropwizard这一事实之外,Spring Boot Pre-Liquibase module还能满足您的要求。
Liquibase有一个先有鸡还是先有蛋的问题,即它不能用来配置自己的先决条件,例如模式。这是Pre-Liquibase解决的问题。它在Liquibase本身之前执行一些SQL。
有时候,你会想在同一个数据库主机上托管一个应用程序的多个示例,然后你会想用模式来分隔它们,这只是Pre-Liquibase的一个可能的用例。
Pre-Liquibase是为Spring设计的,因此它不能直接用于您的Dropwizard场景。
(full披露:我是Pre-Libuibase的作者)