有没有办法将实际的数据库模式存储在更改日志附近?

Is there a way to store an actual database scheme close to chagelogs?

我已经为我的 Spring 引导应用程序配置了 liquibase 迁移。现在我有一个包含所有更改的 chagelog 文件夹,我想要一个包含当前数据库方案的文件,因为它很方便。 liquibase 是否有在 Spring 引导项目中存储实际数据库方案的最佳实践?

你的问题令人困惑。当你说 "a file with current database scheme" 时,你指的是包含数据的实际数据库(例如 SQLite 文件)还是创建数据库初始状态的脚本?

如果你想要的是实际的数据库,这不是 liquibase 的问题。您当然可以将数据库文件与脚本放在同一文件夹中,但这对我来说意义不大。 liquibase 脚本应该被视为源代码的一部分,数据库是特定于执行环境的,可能属于其他地方。

如果你想要初始状态的脚本,那绝对是你可以用 liquibase 做的事情。你想要的命令是generateChangeLog。这将分析您现有的数据库并生成更新日志以重新创建它。然后,您会将其称为在脚本中执行的第一个变更日志。

 java -jar liquibase.jar 
         --classpath=sqlitejdbc-v<version>.jar 
         --driver=org.sqlite.JDBC 
         --url="jdbc:sqlite:exampledb.sqlite" 
         --changeLogFile=db.changelog.initial-state.xml 
         generateChangeLog
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">

    <include file="db.changelog.initial-state.xml" />

    <changeSet author="captain" id="diff1">
        do some stuff
    </changeset>
    <changeSet author="captain" id="diff2">
        do some more stuff
    </changeset>
    ...