强制 liquibase 通过给定参数值计算校验和

问题描述 投票:0回答:1

在我的 yaml 中,我有一个像这样的参数结构:

spring:
  liquibase:
    parameters:
      tables:
        table1: table1

以及一个基于数据库对象在 PostgreSQL 中创建虚拟表的脚本。

CREATE FOREIGN TABLE my_table1 (
 ...
)
SERVER server_object
OPTIONS (schema_name 'common', table_name '${tables.table1}');

据我所知,校验和计算是基于给定的文本而不是替换值。

我的问题是获取最近提到的那个的可能性是什么,这样当我从 table1 更改为 table2 并运行程序时,Liquibase 将因参数值更改而抛出错误。

我听说过先决条件,但我认为这不是我正在寻找的东西,或者 validCheckSum 这可能是一个更遥远的想法。

更新

<changeSet author="user1" id="create_virtual_tables" dbms="postgresql">
    <sqlFile path="liquibase/sql/ddl/virtual_tables.sql"/>
</changeSet>
CREATE FOREIGN TABLE public.games (
    id SERIAL PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    genre VARCHAR(100),
    release_date DATE,
    developer VARCHAR(255)
)
SERVER remote_server
OPTIONS (schema_name '${remote.schema.name}', table_name '${remote.table.games_table}');
spring postgresql spring-boot liquibase checksum
1个回答
0
投票

您观察到的行为实际上与文档同步:

sql 和 sqlFile

您可以使用 sql 和 sqlFile 更改类型的属性替换。请注意,Liquibase 在替换您指定的任何属性后会获取 sql 变更集的校验和。但是,它会在替换外部 SQL 文件中的属性之前获取 sqlFile 变更集的校验和

因此,基本上,为了获得所需的行为,您需要将 sql 内联到变更集中并使用

<sql>
更改而不是
sqlFile
更改。

© www.soinside.com 2019 - 2024. All rights reserved.