问题描述
我可以使用下面的liquibase yaml创建分区。
有没有一种方法可以动态传递liquibase中的日期范围?在liquibase中,我们可以通过liquibase的属性标签传递当前时间戳,但是如何通过liquibase属性或changelog参数传递当月的第一日期和下个月的日期。
databaseChangeLog:
- property:
dbms: postgresql
name: Now
value: CURRENT_DATE
- changeSet:
id: 1
author: roran
changes:
- createTable:
tableName: account_balance
columns:
- column:
name: id
type: bigint
autoIncrement: true
constraints:
primaryKey: true
- column:
name: account_id
type: bigint
constraints:
nullable: false
- column:
name: balance_date
type: date
constraints:
primaryKey: true
- column:
name: create_date
type: timestamptz
- column:
name: created_by
type: varchar(100)
- column:
name: update_date
type: timestamptz
- column:
name: updated_by
type: varchar(100)
- modifysql:
applyToRollback: false
dbms: postgresql
append:
value: PARTITION BY RANGE (balance_date); CREATE TABLE public.account_balance_p0 PARTITION OF
account_balance FOR VALUES FROM ('2020-08-01 00:00:00') TO ('2020-10-01 00:00:00');
解决方法
如果您尝试将第一个和最后一个日期设为参数,则可以使用Liquibiase Changelog Substitution 然后对您的变更集进行以下更改:
- modifySql:
applyToRollback: false
dbms: postgresql
append:
value: PARTITION BY RANGE (balance_date); CREATE TABLE public.account_balance_p0 PARTITION OF
account_balance FOR VALUES FROM ('${start.date}') TO ('${end.date}');
您可以通过以下方式致电Liquibase以传递日期:
liquibase -Dstart.date=<property.value> -Dend.date=<property.value> update
HTH,
罗纳克