【问题标题】:Liquibase with multiple schemas具有多个模式的 Liquibase
【发布时间】:2014-08-15 22:01:27
【问题描述】:

我有一个使用多种模式的软件。我制作了 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 脚本来为我完成它们......

【问题讨论】:

    标签: liquibase


    【解决方案1】:

    大多数更改标记都有一个“schemaName”属性,您可以使用它来指定架构。比如&lt;createTable tableName="person" schemaName="customer"&gt;

    如果您的模式始终命名相同,您可以将它们直接硬编码到更改标签中。如果它们从部署更改为部署,您可能希望使用更改日志参数,以便可以使用 &lt;createTable tableName="person" schemaName="${primarySchema}"&gt;,然后指定运行时的 primarySchema 等于什么。

    您需要在每个 changeSet 上指定 schemaName,否则它将使用无法在脚本中更改的默认 schemaName。

    【讨论】:

    • @NathanVoxland 但是您还需要在 liquibase.properties 文件中定义 schemaName。有没有办法只在一个地方定义它?作为编译/运行参数,还是作为属性?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 2015-11-21
    • 1970-01-01
    • 2022-11-23
    • 2010-11-25
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多