具有多个模式的Liquibase

nas*_*ova 5 liquibase

我有一个使用多个模式的软件.我创建了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>
Run Code Online (Sandbox Code Playgroud)

这里的问题是,我想制作一个可以更新所有模式的更改日志但是我没有找到在更改日志中硬编码schemaname的方法.是否可以通过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>
Run Code Online (Sandbox Code Playgroud)

因为现在只能在从命令行运行liquibase时更改update子句中的模式.当我将客户数据库发送到他们的服务器时,这也很方便.我可以创建customer_master.xml并在其中硬编码其schemanames,然后从头开始运行它们到他们的服务器.到目前为止,我发现插入模式名称的位置是在进行命令行调用时.这意味着我必须以不同方式更新每个模式,或者制作一些PowerShell脚本来为我做这些...

Nat*_*and 5

大多数更改标签都有一个“schemaName”属性,您可以使用它来指定架构。例如,<createTable tableName="person" schemaName="customer">

如果您的模式总是命名相同,您可以将它们直接硬编码到更改标签中。如果它们从 deploy 更改为 deply,您可能希望使用 changelog 参数,以便您可以<createTable tableName="person" schemaName="${primarySchema}">在运行时使用并指定 primarySchema 等于什么。

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

  • @NathanVoxland但是您还需要在 liquibase.properties 文件中定义 schemaName 。有没有办法只在一个地方定义它?作为编译/运行参数,还是作为属性? (2认同)