gpt4 book ai didi

具有多个模式的 Liquibase

转载 作者:行者123 更新时间:2023-12-03 14:30:38 27 4
gpt4 key购买 nike

我有一个使用多种模式的软件。我将 db.changelog-master.xml 用于维护不同的版本,并将 db.changelog-S16.xml 用于当前 sprint(当前 sprint 16 正在进行)。 db.changelog-S16.xml 看起来像这样:

<?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.1.xsd">

<include file="my_schema_1.xml" relativeToChangelogFile="true" />
</databaseChangeLog>

这里的问题是,我想制作一个可以更新所有模式的变更日志,但我未能找到一种方法来在变更日志中对模式名称进行硬编码。是否可以通过 generateChangelog 以某种方式将其获取到更改日志(因此模式名称将在 my_schema_1.xml 中),或者我可以将其输入到更改日志中吗?我正在寻找的是这样的:
 <?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.1.xsd">

<TAG WHERE I COULD INSERT SCHEMANAME>
<include file="my_schema_1.xml" relativeToChangelogFile="true" />
<TAG WHERE I COULD INSERT SCHEMANAME>
<include file="my_schema_2.xml" relativeToChangelogFile="true" />
etc...
</databaseChangeLog>

因为现在只有在从命令行运行 liquibase 时才可能更改更新子句中的架构。当我将客户数据库制作到他们的服务器时,这也很方便。我可以只制作 customer_master.xml 并在其中硬编码他们的模式名,然后从头开始将它运行到他们的服务器上。到目前为止,我发现插入模式名称的唯一地方是在您进行命令行调用时。这意味着我必须以不同的方式更新每个模式或制作一些 powershell 脚本来为我完成它们......

最佳答案

大多数更改标签都有一个“schemaName”属性,您可以使用它来指定架构。例如,<createTable tableName="person" schemaName="customer">
如果您的模式总是命名相同,您可以将它们直接硬编码到更改标签中。如果它们从部署更改为部署,您可能希望使用更改日志参数,以便您可以使用 <createTable tableName="person" schemaName="${primarySchema}">然后在运行时指定 primarySchema 等于什么。

您需要在每个 changeSet 上指定 schemaName,否则它将使用默认的 schemaName,该名称无法通过脚本部分更改。

关于具有多个模式的 Liquibase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24406996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com