当前位置: 首页 > 知识库问答 >
问题:

未在Postgres环境中为Liquibase创建数据库更改日志表

唐晗昱
2023-03-14

Maven依赖关系;
Spring Boot版本:2.2.3.发布
LiquiBase核心版本:3.8.5
PostgreSQL版本:42.2.9

我有一个针对PostgreSQL 11数据库运行的Spring Boot应用程序,它出现了一个以前没有注意到的新行为。当我运行update命令时,databaseChangelog表不会在活动模式中创建,即使正在创建databaseChangeloglock表。这当然会导致运行失败,因为关系不存在。然而;我不控制这个表的创建,也从未控制过它。该表过去像锁表一样自动创建,但现在不是了。

private void setDatabase() {
    if (hasConn) {
        try {
            database = (Database) Class.forName("liquibase.database.core.PostgresDatabase").newInstance();
            database.setConnection(new JdbcConnection(getConnection()));
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            log.error("Could not return Liquibase Database Object");
            log.error(e.getMessage());
        }
    } else {
        log.warn("Connection Object not yet set!");
    }
}
private void melt() {
        this.liquibase = new Liquibase(getDatabaseChangeLog(), new ClassLoaderResourceAccessor(), getDatabase());
}
private void drinkUpdate() throws LiquibaseException {
        this.liquibase.update((String) null);
}

我的问题是,是否有人以前见过这种行为,是否与处理时使用的JAR版本有关?为什么更新运行时会生成DatabaseChangeloglock表,而不是DatabaseChangelog表?还有;在我的公共模式中生成的DatabaseChangelog表似乎对我生成的每个数据库都很好...只是不在我的自定义模式对象中,它保存了我的大部分数据库对象。

我查看了调试输出,发现我的liquiBase.liquiBase对象和相应的liquiBase.database.database.database对象是完整和准确的,并且指定了适当命名的databaseChangelogdatabaseChangellog表,将当前模式设置为我的值,但是更改日志表拒绝在锁表生成的同时生成。不幸的是,当我手动创建databaseChangelog表时,数据库更改日志中指定的其余对象将按预期创建。

共有1个答案

唐炳
2023-03-14

我相信您没有使用SpringBoot和Liquibase的集成方式。您应该不需要直接调用liquibase。事实上,那可能是不创建databasechangelog表的原因。如果将应用程序配置为:

  • 确保使用JDBC url和指向changelog的指针填写application.properties
  • 调用Springboot:run时,进程将自动看到您有一个db和changelog,并在启动之前运行迁移。
  • 如果您不希望DB迁移在启动时运行,而是手动运行,那么我将在CICD管道中使用Liquibase CLI(例如jenkins groovy管道脚本)

下面是关于用LiquiBase设置Springboot的良好入门:https://docs.liquiBase.com/tools-integrations/Springboot/using-springboot-with-maven.html

希望能有所帮助。

 类似资料:
  • 谁知道如何从头开始迁移? 我像往常一样使用命令运行迁移 但不是运行迁移-我收到 谁知道会有什么问题?我需要手动添加数据交换日志和数据交换日志吗?这对我来说很奇怪,因为当我与其他框架分开使用liquibase时,它会为我生成这个表。

  • 我决定在 Postgresql 的 Java 项目中使用 liquibase,所以我使用 maven goal 创建了初始变更集。现在它正在毫无问题地工作。 我正在寻找的是,在我对数据库进行了更改(比如从RDBMS客户端)之后,是否有任何命令可以分析更改日志和数据库状态,以根据我的更改生成更改集并将其附加到更改集xml文件中?

  • 在生产中,数据库用液基changelog.yaml更新,数据库更新成功。 我们对数据库模式进行了一些更改(作为几个增强功能的一部分),例如创建新表、更改表列和创建约束等。 有没有办法使用最新的数据库架构更改自动更新 changelog.yaml?(需要附加到现有的 YAML 文件中,而不是从 SCRACH 重新创建。 因此对生产过渡数据的影响很小)

  • 所以我的问题是--我如何重构文件结构,而不破坏我的liquibase设置和清空我的数据库?

  • 在我们的项目中使用gradle-liquibase插件,解决了所有的依赖关系。 我有以下由Gradle liquibase插件建议的liquibase任务: 有关如何解决与类路径相关的问题的帮助吗?

  • 我正在迁移一个由liquibase管理的现有数据库。 我已经有了更新日志。该应用程序是一个Spring启动应用程序,我用更新了pom,并设置了Spring液化基属性。 我对一个空数据库进行了测试,运行正常,liquibase在应用程序启动时执行changelog并维护< code>DATABASECHANGELOG表。 现在我面临的问题是数据库已经存在于所有其他环境中,我只想在完成 liquiba