Postgresql liquibase无法在分区表上创建索引和唯一约束

Postgresql liquibase无法在分区表上创建索引和唯一约束,postgresql,docker,liquibase,Postgresql,Docker,Liquibase,Liquibase文件如下所示: 数据库更改日志: - changeSet: id: 1 author: roran changes: - createTable: tableName: account_balance columns: - column: name: id type: bigi

Liquibase文件如下所示:

数据库更改日志:

  - 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);
        - addUniqueConstraint:
            columnNames:  balance_date, account_id
            tableName:  account_balance
        - createIndex:
            columns:
              - column:
                  name:  account_id
            indexName:  account_id_idx
            tableName:  account_balance
在启动spring启动应用程序时添加唯一约束的错误如下

更改集/db/changelog/changes/1的迁移失败。创建帐户余额表。yml::1::roran:原因:liquibase.exception.DatabaseException:错误:分区位置或附近的语法错误:93[失败的SQL:(0)ALTER table public.account_balance添加唯一的(余额日期,帐户id)分区范围(余额日期);]\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1794)\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)\

类似地,我在启动spring启动应用程序时添加索引时出错

liquibase.exception.MigrationFailedException:更改集db/changelog/changes/1的迁移失败。创建帐户余额表。yml::1::roran:原因:liquibase.exception.DatabaseException:错误:分区位置处或附近的语法错误:[失败的SQL:(0)在public.account\u balance\u p0(account\u id)上创建索引帐户\u id\u idx按范围分区(余额日期);创建表public.account\u balance\u p0 account\u balance的分区(从('2020-10-01 00:00:00')到('2020-11-01 00:00:00');]\tat liquibase.changelog.ChangeSet.execute(ChangeSet.java:646)\tat liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:53)\tat liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:83)\tat liquibase.liquibase.update(liquibase.java:202)\tat

若我通过liquibase创建表,然后通过编程创建索引或添加约束(如下所示),同样可以正常工作

CREATE INDEX account_id_idx ON public.account_balance(account_id);
对于分区表,我在liquibase中使用yaml的方式是否有任何错误


我使用的是postgresql 11版本和liquibase with spring boot 2.3.3。发布
ChangeSet
modifySql
类型也应用于
addUniqueConstraint
createIndex
类型。由于在
索引
UniqueConstraint
创建中添加了
按范围划分
,生成的sql出现异常

只需将其分为两部分-一个变更集用于创建表,另一个变更集用于创建
Index
UniqueConstraint

  - changeSet:
      id: 1
      author: roran
      changes:
        - createTable:
            tableName: account_balance
            columns:
              ...
        - modifySql:
            applyToRollback: false
            dbms: postgresql
            append:
              value: PARTITION BY RANGE (balance_date);

  - changeSet:
      id: 2
      author: roran
      changes:
        - addUniqueConstraint:
            columnNames:  balance_date, account_id
            tableName:  account_balance
        - createIndex:
            columns:
              column:
                name:  account_id
            indexName:  account_id_idx
            tableName:  account_balance