有没有办法在 Liquibase 数据库版本控制中包含整个文件夹和变更日志?

Is there a way to include whole folder with changelogs in Liquibase db versioning?

我对 Liquibase 数据库版本控制有疑问,因为我想将所有更新日志文件包含在文件夹中,而不指定其名称并使用它们进行更新。那可能吗?我的结构:

db--

|

--release-v1

     |

     --fistchangelog.sql

     --secondchangelog.sql

|

--release-v2

     |

     --newchangelog.sql

...

并且对于每个版本,我都想使用其文件夹中的所有 *.sql 文件。我不想硬编码 sql 文件的名称。我在 Azure 中仅对 CI/CD 使用 liquibase 命令行。

我找到了类似 (liquibase.org/get-started/best-practices) 的东西,但它只适用于 xml 个文件,我使用 sql 扩展名。

我有一个想法,但它对我来说似乎很糟糕,我会把它作为最后的手段。只是为文件夹中的每个文件制作一个循环,在 cmd 中...

有人知道有没有更简单更好的方法?

你可以这样做: 有一个父更改日志文件:

databaseChangeLog = {
include file: "releases/ref1.groovy", relativeToChangelogFile: true
include file: "releases/release1.groovy", relativeToChangelogFile: true
include file: "releases/release2.groovy", relativeToChangelogFile: true
include file: "releases/release3.groovy", relativeToChangelogFile: true
}

在 releases 文件夹中 ref1 文件可以有:

databaseChangeLog = {
include file: "../tables/changelog.groovy", relativeToChangelogFile: true    
}

所以在同一个版本文件夹中,您可以有表文件夹,然后创建、删除更新文件夹。所以你可以在表中有另一个文件,比如在创建文件夹中,你有在不同版本中添加的所有必要文件:

databaseChangeLog = {
include file: "create/changelog.groovy", relativeToChangelogFile: true
include file: "update/changelog.groovy", relativeToChangelogFile: true
include file: "data/changelog.groovy", relativeToChangelogFile: true

}

最后,在发布主文件夹中,您可以添加一个文件,例如 release1.groovy:

databaseChangeLog = {
    include file: "../tables/create/your_structured_sql_file.groovy", 
     relativeToChangelogFile: true
}

这些在 groovy 中,但结构相同。

我认为您应该只使用“includeAll”标签。然后 liquibase 将执行文件夹内的所有 .sql 文件。但请记住,如果您不指定每个文件,Liquibase 将按字母顺序执行这些文件。 诸如此类:

<includeAll path="com/example/changelogs/"/>

阅读此处 -> https://docs.liquibase.com/concepts/changelogs/attributes/includeall.html