Liquibase:diff 总是生成索引

     2023-02-26     89

关键词:

【中文标题】Liquibase:diff 总是生成索引【英文标题】:Liquibase: diff always generates indexes 【发布时间】:2018-02-11 15:19:03 【问题描述】:

我使用 spring-boot 和 liquibase-maven-plugin 来根据我的类生成数据库更改,但是“mvn compile liquibase: diff”命令总是生成索引和外键的删除和包含,即使数据库已更新并且类没有变化(因此数据库中应该没有变化)。

有人知道这是否正确或如何避免吗?我只希望在项目的更改集中生成对数据库的新更改。

【问题讨论】:

我们在之前的工作中遇到过同样的问题,不是 liquibase,而是 spring-boot hibernate 默认配置 'ddl-auto'。这是产生这种不良行为的配置:docs.spring.io/spring-boot/docs/current/reference/html/… 请添加您的 pom.xml 请添加您正在使用的控制台日志和 pom.xml。 【参考方案1】:

首先,我认为您缺少liquibase-hibernate4 maven 插件。

来自项目Readme.md

此扩展允许您将 Hibernate 配置用作 Liquibase 中 diff、diffChangeLog 和 generateChangeLog 的比较数据库。

这实际上意味着您可以使用它来将真实数据库与您的 java 实体进行比较,以生成新的变更日志。

正如项目 wiki 建议的那样,重要的是要记住,如果出现问题,您需要查看新的变更日志并手动修改它。

我还建议您阅读此article from Baeldung 解释:

您的pom.xml 应如下所示:

...
<dependencies>
  ...
  <dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <version>3.4.1</version>
  </dependency>
  <dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.4.1</version>
  </dependency> 
  ...
</dependencies>
...
<plugins>
    ...
    <plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.4.1</version>
    <configuration>                  
        <propertyFile>src/main/resources/liquibase.properties</propertyFile>
    </configuration> 
    <dependencies>
        <dependency>
            <groupId>org.liquibase.ext</groupId>
            <artifactId>liquibase-hibernate4</artifactId>
            <version>3.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.7.3.RELEASE</version>
        </dependency>
    </dependencies>               
</plugin>  
    ...
</plugins>
...

还有你的src/main/resources/liquibase.properties

url=jdbc:mysql://localhost:3306/your_db
username=your_user
password=your_pw
driver=com.mysql.jdbc.Driver #orYourDriver
outputChangeLogFile=src/main/resources/liquibase-outputChangeLog.xml
hibernate:spring:your.model.package?dialect=org.hibernate.dialect.MySQLDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy

我不确定您使用的是哪种持久性存储,但请确保使用正确的驱动程序和数据源 URL。

配置完成后,你应该可以运行mvn liquibase:diffChangeLog来生成新的更新日志了。

【讨论】:

总是运行带有 failOnError="false" 的 Liquibase changeSet?

】总是运行带有failOnError="false"的LiquibasechangeSet?【英文标题】:LiquibasechangeSetwithfailOnError="false"arealwaysran?【发布时间】:2012-06-1009:43:06【问题描述】:我正在尝试在liquibase中执行以下changeSet,它应该会创建一个索... 查看详情

为啥 liquibase 总是使用自己的序列?

】为啥liquibase总是使用自己的序列?【英文标题】:Whyliquibasedoesalwaysuseitsownsequence?为什么liquibase总是使用自己的序列?【发布时间】:2017-10-0223:06:45【问题描述】:我正在使用liquibase作为我当前项目的迁移工具。问题是我正在... 查看详情

使用 mvn liquibase:diff 时如何禁用删除表和列?

】使用mvnliquibase:diff时如何禁用删除表和列?【英文标题】:Howtodisabledroptableandcolumnwhenusingmvnliquibase:diff?【发布时间】:2020-02-2518:33:56【问题描述】:我正在设置发布流程,以尽可能轻松地升级我们的生产环境。为了实现与数据... 查看详情

我不明白 liquibase diff 试图通过这些选择来确定啥?

】我不明白liquibasediff试图通过这些选择来确定啥?【英文标题】:Idontunderstandwhatliquibasediffistryingtodeterminewiththeseselects?我不明白liquibasediff试图通过这些选择来确定什么?【发布时间】:2015-01-2312:21:06【问题描述】:我不明白为... 查看详情

liquibase-数据库版本管理使用(代码片段)

 Liquibase-数据库版本管理一、数据库版本管理说明1、liquibase介绍1.1、changelog文件格式2、flyway介绍3、liquibase与flyway比较二、springboot+liquibase1、gradle配置引入liquibase包:2、修改application.yml或加LiquibaseConfig.java2.1、application.yml2.2... 查看详情

如何忽略 Liquibase diff 中的大小写和数字类型?

】如何忽略Liquibasediff中的大小写和数字类型?【英文标题】:HowtoignorecaseandnumbertypesinLiquibasediff?【发布时间】:2014-10-2313:18:38【问题描述】:我正在开展一个项目,让公司中的每个人都开始使用Liquibase来管理我们的数据库,这... 查看详情

使用 liquibase 在 postgres 中删除索引的问题

】使用liquibase在postgres中删除索引的问题【英文标题】:Problemsdroppinganindexinpostgresusingliquibase【发布时间】:2016-02-2413:09:46【问题描述】:我在liquibase中遇到了一个问题,我无法在我的postgres数据库中删除索引。liquibase报的错误是... 查看详情

创建索引时的 Liquibase 缓慢

】创建索引时的Liquibase缓慢【英文标题】:LiquibaseSlownessWhenCreatingIndexes【发布时间】:2020-12-1711:43:52【问题描述】:我最近将我的JavaLiquibase版本从3.5.3升级到了3.6.3我有一个非常繁重的环境,其中有很多数据库和表(我使用的是O... 查看详情

liquibase 不生成表 DATABASECHANGELOG

】liquibase不生成表DATABASECHANGELOG【英文标题】:liquibasedoesnotgeneratetableDATABASECHANGELOG【发布时间】:2017-06-0115:35:17【问题描述】:我是liquibase的新手,我想在生产中的数据库上使用它。这是一个小型应用程序,但我不想手动创建架... 查看详情

为啥我的输入被插入到两个具有相同索引的 diff 数组中? (js)

...本,因为现在我必须手动添加船的数量,即使位置是随机生成的。此刻,我必须以这 查看详情

Liquibase 生成更改日志引发 SQL 语法异常

】Liquibase生成更改日志引发SQL语法异常【英文标题】:LiquibasegeneratedchangelogthrowsSQLSyntaxException【发布时间】:2020-08-1411:13:55【问题描述】:我使用Liquibase的generateChangeLog命令为现有数据库生成了更改日志。但是,当我尝试运行它... 查看详情

无法与 liquibase gradle 插件生成差异

】无法与liquibasegradle插件生成差异【英文标题】:Unabletogeneratedifferencefromliquibasegradleplugin【发布时间】:2016-06-1311:38:56【问题描述】:我正在尝试使用MYSQL数据库在现有SpringBoot项目中实现liquibase。我希望能够生成更改集,指定实... 查看详情

liquibase diffChangeLog 不生成雪花视图

】liquibasediffChangeLog不生成雪花视图【英文标题】:liquibasediffChangeLognotgeneratingsnowflakeViews【发布时间】:2021-07-2715:55:57【问题描述】:将Liquibase社区版用于我们的雪花实例。运行diffChangeLog命令会生成一个仅列出表的脚本。存储过... 查看详情

生成 forIndexName 的 Liquibase 差异在 h2 上不起作用

】生成forIndexName的Liquibase差异在h2上不起作用【英文标题】:LiquibasediffgeneratingforIndexNamedoesn\'tworkonh2【发布时间】:2017-08-1810:21:19【问题描述】:我正在运行Liquibase3.5.3并使用Liquibase来处理数据库中的更改。添加主键时,是否有... 查看详情

如何在 Liquibase 中定义一组默认列 def. PK,定义。索引,定义。表创建的值?

】如何在Liquibase中定义一组默认列def.PK,定义。索引,定义。表创建的值?【英文标题】:HowtodefineinLiquibaseasetofdefaultcolumns,def.PKs,def.indexes,def.valuesfortablecreation?【发布时间】:2014-08-1011:21:18【问题描述】:我只是环顾四周,以减... 查看详情

仅使用 databasechangelog 表生成 liquibase sql 文件

】仅使用databasechangelog表生成liquibasesql文件【英文标题】:Generateliquibasesqlfilewithonlydatabasechangelogtable【发布时间】:2018-09-2110:49:42【问题描述】:我想从我的changelog文件中生成一个SQL文件,该文件仅包含databasechangelog表,并在其... 查看详情

Liquibase generateChangeLog 命令生成无变更集

】LiquibasegenerateChangeLog命令生成无变更集【英文标题】:LiquibasegenerateChangeLogcommandgeneratesNoChangeSets【发布时间】:2018-12-2803:20:46【问题描述】:按照these指令,在我现有的PostgreSQL数据库上执行generateChangeLog命令,生成的文件不包... 查看详情

Grails 中的 Liquibase:“空结果集,预期为一行”

】Grails中的Liquibase:“空结果集,预期为一行”【英文标题】:LiquibaseinGrails:“Emptyresultset,expectedonerow”【发布时间】:2012-11-0904:12:43【问题描述】:我对Grails域类进行了更改并运行grailsdb-gorm-diff2012-11-20-domain-class-change.groovy--add... 查看详情