如何在liquibase中设置当月第一个日期和下个月的默认值?
Posted
技术标签:
【中文标题】如何在liquibase中设置当月第一个日期和下个月的默认值?【英文标题】:how to set default value of first date of current month and next month in liquibase? 【发布时间】:2021-01-26 16:04:49 【问题描述】:我可以使用下面的 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');
【问题讨论】:
【参考方案1】:如果您尝试将第一个和最后一个日期参数化,正如您提到的,您可以使用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,
罗纳克
【讨论】:
我正在寻找一种不需要通过代码或属性文件传递值但 liquibase 应该动态计算的方法。我想这是不可能的。我想如果 now() 可以获得当前时间戳,那么 DATE_TRUNC('MONTH',NOW() + INTERVAL '1 MONTH') 应该让我获得下个月的时间戳。像这样的东西我想要通过 liquibase 这是一个很酷的想法 user2800089。 Liquibase 目前不这样做,但我们是社区驱动的,所以如果你愿意进行黑客攻击:Liquibase 正在进行黑客马拉松并接受以下回购的想法(通过 github 问题)或实际修改(通过 github PRs):github.com/liquibase/liquibase以上是关于如何在liquibase中设置当月第一个日期和下个月的默认值?的主要内容,如果未能解决你的问题,请参考以下文章