在我的 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}');
您观察到的行为实际上与文档同步:
sql 和 sqlFile
您可以使用 sql 和 sqlFile 更改类型的属性替换。请注意,Liquibase 在替换您指定的任何属性后会获取 sql 变更集的校验和。但是,它会在替换外部 SQL 文件中的属性之前获取 sqlFile 变更集的校验和。
因此,基本上,为了获得所需的行为,您需要将 sql 内联到变更集中并使用
<sql>
更改而不是 sqlFile
更改。