具有多个模式的Liquibase

时间:2014-06-25 11:07:25

标签: 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>

这里的问题是,我想制作一个可以更新所有模式的更改日志,但是我没有找到在更改日志中硬编码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>

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

1 个答案:

答案 0 :(得分:4)

大多数更改标记都有&#34; schemaName&#34;可用于指定架构的属性。例如,<createTable tableName="person" schemaName="customer">

如果您的模式的名称始终相同,则可以将它们直接硬编码到更改标记中。如果他们从deploy更改为deply,您可能希望使用changelog参数,以便可以使用<createTable tableName="person" schemaName="${primarySchema}">,然后在运行时指定primarySchema等于的内容。

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