【问题标题】:Delete table in database using liquibase does not work使用 liquibase 删除数据库中的表不起作用
【发布时间】:2021-01-25 14:54:04
【问题描述】:

我正在开发一个 spring boot 应用程序,在 postgre db 上使用 hibernate 和 liquibase。当我启动 Spring Boot 应用程序时,数据库中的更改日志会更新,并且日志显示脚本运行成功,但表仍在架构中。

这是我的 db.changelog.xml:

<changeSet author="stimpson" id="deletetablehans">
    <sqlFile dbms="postgre" encoding="UTF-8" endDelimiter=";"
        path="sql/00003_deleteTableHans.sql" relativeToChangelogFile="true"
        splitStatements="true" stripComments="true" />
</changeSet>

这是我的脚本(sql文件夹中的deletetablehans.sql):

--liquibase formatted sql
--changeset stimpson:deleteTableHans
DROP TABLE HANS;
commit;
;

这是我的日志文件的一部分:

2021-01-25 15:43:50,438 INFO  liquibase.lockservice : Changelog-Protokoll erfolgreich gesperrt.
2021-01-25 15:43:50,686 INFO  liquibase.changelog : Reading from public.databasechangelog
2021-01-25 15:43:50,704 INFO  liquibase.changelog : ChangeSet db/dbchangelog.xml::deletetablehans::stimpson ran successfully in 0ms
2021-01-25 15:43:50,709 INFO  liquibase.lockservice : Successfully released change log lock

我不关心为什么语言会改变,但是当我查看数据库时,我发现名为 Hans 的表仍然存在。但为什么?我确实尝试在自己的行中使用显式提交和分隔符,但我不明白结果? 这是我的 liquibase.properties 文件:

changeLogFile=src/main/resources/db/dbchangelog.xml
url=jdbc:postgresql://localhost:5432/padsyhw3
username=dbuser
password=dbpass
driver=org.postgresql.Driver

这是 DB 中 databasechangelog 表中唯一的数据行:

 deletetablehans    stimpson    db/dbchangelog.xml  2021-01-25 15:49:05 1 EXECUTED  8:90e2fa99c6beeace580e429bd2bf9ae3  sqlFile         4.2.2

【问题讨论】:

  • 你能在db中检查你的database_change_log表来检查这个更改日志的状态
  • 我确实更新了问题,Avik
  • 您可以尝试从数据库更改日志表中删除此行,然后执行您的 liquibase 更改集
  • 如果变更集在database_change_log表中被标记为已执行,则不再执行。

标签: java spring-boot liquibase-hibernate


【解决方案1】:

我对您的问题有一个可行的解决方案

  1. 我想知道 deletetablehans 和 deleteTableHans 之间的大小写区别是否可以对变更集的执行产生影响

  2. 根据liquibase supported databases,在使用 dbms for postgre 时,您应该使用 postgresql 而使用 postgre

  3. 您是否有任何特定理由使用 SQL 文件中的变更集来执行删除操作?如果没有人可以为您提供有效的解决方案,我至少可以看到两种选择

备选方案 1:使用 sql 代替 sqlFile

<changeSet author="stimpson" id="deletetablehans">
    <sql dbms="postgresql">
        DROP TABLE HANS;
    </sql>
</changeSet>

备选方案 2:使用 liquibase dropTable

<changeSet author="stimpson" id="deletetablehans">
    <dropTable tableName="HANS" />
</changeSet>

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多