如何在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中设置当月第一个日期和下个月的默认值?的主要内容,如果未能解决你的问题,请参考以下文章

java如何获取当天的上一个月

在 Gradle Spring Boot Hibernate 项目中设置 LiquiBase

python中计算上个月和下个月的第一天的方法

如何在 Woocommerce 订阅中设置下一个付款日期?

如何在 PayPal 订阅按钮上设置开始日期

如何获取当月第一周的日期