SpringBoot连接RedShift报错:relation 'information_schema.sequences'不存在
解决Spring Boot连接RedShift时的「relation information_schema.sequences does not exist」错误
咱们先拆解下问题根源:Redshift虽然基于PostgreSQL开发,但它移除了PostgreSQL的**序列(Sequence)**功能。而你当前配置的org.hibernate.dialect.PostgreSQL9Dialect会让Hibernate自动尝试访问information_schema.sequences表来处理主键生成逻辑,这张表在Redshift里是不存在的,所以触发了这个报错。另外你的主键生成策略也需要适配Redshift的特性。
下面是具体的解决步骤:
1. 替换为Redshift专用的Hibernate方言
把原来的PostgreSQL方言换成Redshift对应的方言,让Hibernate用Redshift兼容的逻辑处理数据库操作:
# 替换原有的PostgreSQL方言配置 spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.RedshiftDialect
如果你的Hibernate版本较低,没有内置RedshiftDialect,可以使用亚马逊官方提供的方言类com.amazon.redshift.hibernate.dialect.RedshiftDialect(需要确保依赖包含相关类,或者升级Hibernate版本)。
2. 调整主键生成策略适配Redshift
Redshift推荐使用IDENTITY自增列作为主键,所以修改你的POJO主键注解:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) // 替换原有的GenerationType.TABLE private long id;
同时要确保Redshift数据库中some_data_table的id列是定义为自增列的,比如:
CREATE TABLE some_data_table ( id BIGINT IDENTITY(1,1) PRIMARY KEY, -- 其他列定义... );
如果你的主键是业务生成的(比如UUID或自定义ID),也可以直接去掉@GeneratedValue,手动赋值主键。
3. 验证依赖与其他配置
- 你当前使用的Redshift JDBC驱动版本
1.2.10.1009是稳定版本,无需调整,但要确保和Hibernate版本兼容; - 现有的
validationQuery = SELECT 1、hibernate.jdbc.lob.non_contextual_creation = true等配置都是Redshift兼容的,可以保留。
完成以上调整后,重启Spring Boot应用,应该就能正常连接Redshift并通过Hibernate的DDL校验了。
内容的提问来源于stack exchange,提问作者GD_Java
相关产品推荐
相关产品推荐

