Liquibase 使用一个变量来设置变更集作者

Liquibase use a variable to set changeset author

是否可以使用某种变量或 属性 在 liquibase 格式的 sql 文件中设置变更集作者。

我尝试在 chnagelog.xml 中设置 属性 并使用作者的 属性 如下所示。

changelog.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.8.xsd">

    <property name="author" value="my-author"/>

    <include file="sql/test_schema.sql"/>
</databaseChangeLog>

和test_schemal.sql

--liquibase formatted sql

--changeset ${author}:1
CREATE SCHEMA IF NOT EXISTS test_schema;
--rollback DROP SCHEMA IF EXISTS test_schema;

但是作者没有设置为作者属性, "my-author".

我认为这也可以通过 terraform 模板来完成,但是有没有办法只使用 liquibase 功能来做到这一点?

在更新日志中使用 属性 替换

Liquibase 允许您使用不同的方式来设置 属性 值。 Liquibase 按照以下指定的顺序分配这些值:

作为传递给您的 Liquibase 跑步者的属性。

  1. 作为 JVM 系统属性。
  2. 作为环境变量。
  3. 如果从命令行执行,则作为 CLI 属性
  4. 如果从命令行执行,则作为 CLI 属性
  5. command_line参数如果从命令行执行
  6. 在 DATABASECHANGELOG 文件本身的参数块(属性 元素)中

勾选这个liquibase doc

Liquibase 允许 动态替换变更日志文件中的属性。我们可以在一个文件中配置多个属性,然后在需要的地方使用它们。在你的情况下,我们可以只配置 属性 "authorName" 一些值,然后使用 ${authorName} 语法在更新日志文件中使用它。

豪尔赫在他的回答中提到的一切都是正确的。 Liquibase 按以下顺序为配置的 属性 分配值或确定优先级:

  1. 作为传递给您的 liquibase 运行程序的属性。
  2. 作为 JVM 系统 属性
  3. 作为环境变量
  4. 作为 CLI 属性,如果你是 运行 liquibase 通过命令行
  5. 在liquibase.properties文件中
  6. 在参数块中(DATABASECHANGELOG 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">
        **My SQL query/ transactional logic goes here**
    </changeSet>
    
</databaseChangeLog>

在liquibase.properties文件中,我将配置这些属性如下:

authorName=Rakhi
dbType=PostgreSQL

注意:以上示例使用了 2 个属性(authorName 和 dbType)。您可以只使用 authorName 或更多。

如果您在创建“liquibase.properties”文件方面需要帮助,请访问this link

干杯!