Flyway在PostgreSQL 11创建分区表报错的正确实现方式问询
Flyway对PostgreSQL分区表的支持说明
Flyway完全支持管理PostgreSQL 11及以上版本的分区表,你遇到的语法报错不是Flyway本身不支持该特性,大概率是配置遗漏导致的,按照以下步骤排查修正即可:
修正Flyway的PostgreSQL方言版本配置
Flyway默认会根据JDBC连接自动识别数据库版本,如果识别失败会使用兼容低版本的语法校验规则,而PostgreSQL分区表是11版本才推出的特性,低版本语法规则会将PARTITION相关关键字判定为非法。
你可以在配置中显式指定PostgreSQL版本,避免自动识别误差,Spring Boot项目配置示例如下:spring.flyway.postgresql.version=11非Spring Boot项目可直接在Flyway初始化参数中添加
postgresql.version配置项,值设置为11或你实际使用的PG版本即可。检查PostgreSQL JDBC驱动版本
低于42.2.5版本的PostgreSQL JDBC驱动不兼容PG11的新语法,会导致SQL执行报错,将驱动版本升级到42.2.5及以上即可解决:<!-- Maven依赖示例 --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.6.0</version> </dependency>完整的分区表创建示例
配置修正后,你可以正常在Flyway迁移SQL中编写分区表创建逻辑,示例如下:-- 创建 LIST 分区主表 CREATE TABLE blabla (id varchar(100) NOT NULL, name varchar(100) NULL) PARTITION BY LIST(name); -- 创建业务分区 CREATE TABLE blabla_name_group1 PARTITION OF blabla FOR VALUES IN ('group1', 'group1_test'); CREATE TABLE blabla_name_group2 PARTITION OF blabla FOR VALUES IN ('group2', 'group2_test'); -- 可选:创建默认分区存储未匹配到规则的数据 CREATE TABLE blabla_name_default PARTITION OF blabla DEFAULT;后续分区的增删改操作也可以直接写在Flyway迁移SQL中,和平常执行PGSQL没有差异。
内容的提问来源于stack exchange,提问作者jman
相关产品推荐
相关产品推荐

