使用 liquibase 删除数据库中的 table 不起作用
Delete table in database using liquibase does not work
我正在开发一个 spring 启动应用程序,在 postsgre 数据库上使用休眠和 liquibase。当我启动 spring 启动应用程序时,更改日志在数据库中更新并且日志显示脚本 运行 成功,但 table 仍在架构中。
这是我的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>
这是我的脚本(deletetablehans.sql 在 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 的 table 仍然存在。但为什么?我确实尝试在自己的行中使用显式提交和分隔符,但我不明白结果?
这是我的 liquibase.properties 文件:
changeLogFile=src/main/resources/db/dbchangelog.xml
url=jdbc:postgresql://localhost:5432/padsyhw3
username=dbuser
password=dbpass
driver=org.postgresql.Driver
这是数据库更改日志中唯一的数据行 table in DB:
deletetablehans stimpson db/dbchangelog.xml 2021-01-25 15:49:05 1 EXECUTED 8:90e2fa99c6beeace580e429bd2bf9ae3 sqlFile 4.2.2
我有一个解决你问题的有效方法
不知道deletetablehans和deleteT大小写有区别吗ableHans 可能会对变更集的执行产生影响
根据 liquibase supported databases,当为 postgre 使用 dbms 时,你应该使用值 postgresql 而你使用 postgre
您是否有任何特定理由在 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>
我正在开发一个 spring 启动应用程序,在 postsgre 数据库上使用休眠和 liquibase。当我启动 spring 启动应用程序时,更改日志在数据库中更新并且日志显示脚本 运行 成功,但 table 仍在架构中。
这是我的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>
这是我的脚本(deletetablehans.sql 在 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 的 table 仍然存在。但为什么?我确实尝试在自己的行中使用显式提交和分隔符,但我不明白结果? 这是我的 liquibase.properties 文件:
changeLogFile=src/main/resources/db/dbchangelog.xml
url=jdbc:postgresql://localhost:5432/padsyhw3
username=dbuser
password=dbpass
driver=org.postgresql.Driver
这是数据库更改日志中唯一的数据行 table in DB:
deletetablehans stimpson db/dbchangelog.xml 2021-01-25 15:49:05 1 EXECUTED 8:90e2fa99c6beeace580e429bd2bf9ae3 sqlFile 4.2.2
我有一个解决你问题的有效方法
不知道deletetablehans和deleteT大小写有区别吗ableHans 可能会对变更集的执行产生影响
根据 liquibase supported databases,当为 postgre 使用 dbms 时,你应该使用值 postgresql 而你使用 postgre
您是否有任何特定理由在 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>