PSQLException:在此 ResultSet 中找不到列名 start_value

Posted

技术标签:

【中文标题】PSQLException:在此 ResultSet 中找不到列名 start_value【英文标题】:PSQLException: The column name start_value was not found in this ResultSet 【发布时间】:2021-01-18 16:49:34 【问题描述】:

当 spring-boot maven 应用程序启动时,我收到 Postgresql 异常。

Maven 依赖

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>
    

属性文件

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.show-sql=true
spring.datasource.url=jdbc:postgresql://localhost:5432/db
spring.datasource.username=postgres
spring.datasource.password=postgres

例外

org.postgresql.util.PSQLException: The column name start_value was not found in this ResultSet.
    at org.postgresql.jdbc.PgResultSet.findColumn(PgResultSet.java:2748) ~[postgresql-42.2.16.jar:42.2.16]
    at org.postgresql.jdbc.PgResultSet.getLong(PgResultSet.java:2631) ~[postgresql-42.2.16.jar:42.2.16]
    at com.zaxxer.hikari.pool.HikariProxyResultSet.getLong(HikariProxyResultSet.java) ~[HikariCP-3.4.5.jar:na]
    at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.resultSetStartValueSize(SequenceInformationExtractorLegacyImpl.java:129) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:59) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl.sequenceInformationList(JdbcEnvironmentImpl.java:403) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl.<init>(JdbcEnvironmentImpl.java:268) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at 

【问题讨论】:

您使用的是哪个版本的 PostgreSQL? @a_horse_with_no_name 在堆栈跟踪中:42.2.16 Postgreql 版本 - 9.0 您是否尝试过使用org.hibernate.dialect.PostgreSQL9Dialect 是同样的错误,org.hibernate.dialect.PostgreSQL9Dialect 【参考方案1】:

使用下面的自定义类并将其传递到属性中。

package com.abc.def;

import org.hibernate.dialect.PostgreSQL95Dialect;
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorNoOpImpl;
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;

public class PostgresqlCustomDialect extends PostgreSQL95Dialect 

    public String getQuerySequencesString() 
        return "select * from all_sequences";
    

    public SequenceInformationExtractor getSequenceInformationExtractor() 
        return SequenceInformationExtractorNoOpImpl.INSTANCE;
    

将完全限定的类名放在下面的属性中:

p.put("hibernate.dialect","com.abc.def.PostgresqlCustomDialect");

【讨论】:

以上是关于PSQLException:在此 ResultSet 中找不到列名 start_value的主要内容,如果未能解决你的问题,请参考以下文章

PSQLException:错误:tsquery 中的语法错误

Heroku 上的 PSQLException

org.postgresql.util.PSQLException:连接尝试失败

PSQLException:错误:在或附近出现语法错误

PSQLException:此 ResultSet 已关闭

PSQLException:错误:关系“表”不存在