从 Spring Boot 应用程序连接数据库时出现 org.postgresql.util.PSQLException

Posted

技术标签:

【中文标题】从 Spring Boot 应用程序连接数据库时出现 org.postgresql.util.PSQLException【英文标题】:org.postgresql.util.PSQLException while connecting database from spring boot application 【发布时间】:2019-08-28 15:39:56 【问题描述】:

我有 PostgreSQL 数据库表格,我已经创建了数据库和 用户使用以下命令。

create database webreporting;   
create user csr with password 'csrtest12!@';    
grant all on  database webreporting to csr;    
GRANT ALL PRIVILEGES ON ALL TABLES
    IN SCHEMA public to csr;    
GRANT ALL PRIVILEGES ON ALL TABLES IN
    SCHEMA public TO csr;    
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN
    SCHEMA public TO csr;    

我正在尝试从 springboot 应用程序连接这个数据库。 Spring Boot 应用程序已成功启动,但在从应用程序执行查询时抛出异常,如下所示

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;糟糕的 SQL 语法 [从事实中删除 customer_id=?];嵌套异常是 org.postgresql.util.PSQLException:错误:权限被拒绝 表事实。

Application.properties 文件是:

spring.datasource.driver-class-name=org.postgresql.Driver   
spring.datasource.url=jdbc:postgresql://localhost:5432/webreporting 
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect   
spring.datasource.username=csr   
spring.datasource.password=csrtest12!@

我不确定为什么会出现权限被拒绝异常。

【问题讨论】:

您的用户有登录权限吗?试试ALTER ROLE <username> WITH LOGIN; 【参考方案1】:

您可能缺少架构权限。 尝试运行以下命令:

GRANT USAGE ON SCHEMA public TO csr;

【讨论】:

该表是否已经创建或者您希望它在启动时创建? 它的启动之后我想创建表 如果您希望在启动时创建 JPA 实体,您需要在 Spring 配置中设置 ddl-auto 属性 - docs。另外,尝试将实体的架构设置为public

以上是关于从 Spring Boot 应用程序连接数据库时出现 org.postgresql.util.PSQLException的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Redis 使用 Redis 时出现连接被拒绝异常

在 docker-compose 中将 mongodb 与 spring-boot 应用程序连接时出现此错误

当我将 Spring Boot 应用程序部署到 AWS Elastic Beanstalk 并且无法从本地 Spring Boot 连接到 RDS 时出现 502 错误网关

将 Angular 与 JWT 的 Spring Boot 连接时出现 CORS 错误

当 Spring Boot 容器尝试连接 kafka 容器时出现“Broker 可能不可用”错误

从 Ajax 调用 Spring Boot Rest API 时出现 CORS 错误