在我使用 liquibase 的所有模式中应用迁移
apply migration in all schema that i have using liquibase
我在这个应用程序中使用 spring 引导开发了一个网站 我正在使用架构多租户来管理我的数据库。我想使用 Liquibase 作为数据库迁移工具。问题是,当我进行迁移时,新的修改(修改意味着通过向不同的表添加新列并添加新表)仅适用于模式 public 而不适用于我想要的其他 sachems ,当我进行迁移时,我希望新修改适用于所有 sachems
ps : 我正在使用休眠创建新的 sachems
Liquibase 允许动态替换 更新日志文件中的属性。我们可以在一个文件中配置多个属性,然后在需要的地方使用它们。在您的情况下,我们可以为属性“schema1”、“schema2”配置一些值,然后使用 ${schema1} 或 ${schema2} 在更新日志文件中使用它 符合要求的语法。
在liquibase.properties文件中,我们将配置这些属性如下:
schema1=ABC
schema2=PQR
Liquibase 按以下顺序为配置的 属性 分配值或确定优先级:
- 作为传递给您的 liquibase 运行程序的属性。
- 作为 JVM 系统 属性
- 作为环境变量
- 作为 CLI 属性,如果你是 运行 liquibase 通过命令行
- 在liquibase.properties文件中
- 在参数块中(属性 DATABASECHANGELOG 的元素 table)
您可以按照下面的示例代码片段进行操作:
1.向架构 ABC:
中的某些 table 添加一列
<?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.8.xsd">
<changeSet author="authorName" id="some-unique-id" dbms="${dbType}" context="some-context">
<sql endDelimiter=";" splitStatements="true" stripComments="true">
**My SQL query/ transactional logic goes here**
ALTER TABLE "${schema1}"."TableName" ADD COLUMN COLUMNNAME DATATYPE;
</sql>
</changeSet>
</databaseChangeLog>
2。在 PQR 架构中创建 table:
<?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.8.xsd">
<changeSet author="authorName" id="some_unique_id" dbms="${dbType}" context="some_context">
<createTable tableName="TableName" schemaName="${schema2}">
<column name="id" type="VARCHAR(200)" />
<column name="name" type="VARCHAR(255)"/>
</createTable>
</changeSet>
</databaseChangeLog>
注意:以上示例使用了 2 个属性(schema1 和 schema2)。您只能使用更多。
如果您在创建“liquibase.properties”文件方面需要帮助,请访问此 link
干杯!
我在这个应用程序中使用 spring 引导开发了一个网站 我正在使用架构多租户来管理我的数据库。我想使用 Liquibase 作为数据库迁移工具。问题是,当我进行迁移时,新的修改(修改意味着通过向不同的表添加新列并添加新表)仅适用于模式 public 而不适用于我想要的其他 sachems ,当我进行迁移时,我希望新修改适用于所有 sachems ps : 我正在使用休眠创建新的 sachems
Liquibase 允许动态替换 更新日志文件中的属性。我们可以在一个文件中配置多个属性,然后在需要的地方使用它们。在您的情况下,我们可以为属性“schema1”、“schema2”配置一些值,然后使用 ${schema1} 或 ${schema2} 在更新日志文件中使用它 符合要求的语法。
在liquibase.properties文件中,我们将配置这些属性如下:
schema1=ABC
schema2=PQR
Liquibase 按以下顺序为配置的 属性 分配值或确定优先级:
- 作为传递给您的 liquibase 运行程序的属性。
- 作为 JVM 系统 属性
- 作为环境变量
- 作为 CLI 属性,如果你是 运行 liquibase 通过命令行
- 在liquibase.properties文件中
- 在参数块中(属性 DATABASECHANGELOG 的元素 table)
您可以按照下面的示例代码片段进行操作:
1.向架构 ABC:
中的某些 table 添加一列<?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.8.xsd">
<changeSet author="authorName" id="some-unique-id" dbms="${dbType}" context="some-context">
<sql endDelimiter=";" splitStatements="true" stripComments="true">
**My SQL query/ transactional logic goes here**
ALTER TABLE "${schema1}"."TableName" ADD COLUMN COLUMNNAME DATATYPE;
</sql>
</changeSet>
</databaseChangeLog>
2。在 PQR 架构中创建 table:
<?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.8.xsd">
<changeSet author="authorName" id="some_unique_id" dbms="${dbType}" context="some_context">
<createTable tableName="TableName" schemaName="${schema2}">
<column name="id" type="VARCHAR(200)" />
<column name="name" type="VARCHAR(255)"/>
</createTable>
</changeSet>
</databaseChangeLog>
注意:以上示例使用了 2 个属性(schema1 和 schema2)。您只能使用更多。
如果您在创建“liquibase.properties”文件方面需要帮助,请访问此 link
干杯!