postgresql postgres数据库UTF-8编码问题

z3yyvxxp  于 2022-12-26  发布在  PostgreSQL
关注(0)|答案(2)|浏览(410)

我已经使用此命令docker composite up-d创建了一个docker映像,其中我能够在http://localhost:5050/browser/中加载pgAdmin示例,并在同一个文件中创建数据库和表,凭据工作正常。
然而,当我开始运行我的主Spring引导应用程序CustomerApplication时,它失败,并显示以下错误〉

    • 组织. postgresql.实用程序. FATAL:用户密码验证失败(pgjdbc:自动检测到服务器编码为ISO-8859 - 1,如果消息不可读,请检查数据库日志和/或主机、端口、dbname、用户、密码、pg_hba. conf)**

我不知道出了什么问题,我的证件是正确的。看起来有什么问题?
下面是应用程序. yml停靠-组合. yml

    • 停靠-编写. yml**
services:
  postgres:
    container_name: postgres
    image: postgres
    environment:
      POSTGRES_USER: amigoscode
      POSTGRES_PASSWORD: password
      PGDATA: /data/postgres
    volumes:
      - postgres:/data/postgres
    ports:
      - "5432:5432"
    networks:
      - postgres
    restart: unless-stopped

  pgadmin:
    container_name: pgadmin
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-pgadmin4@pgadmin.org}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
      PGADMIN_CONFIG_SERVER_MODE: 'False'
    volumes:
      - pgadmin:/var/lib/pgadmin
    ports:
      - "5050:80"
    networks:
      - postgres
    restart: unless-stopped

networks:
  postgres:
    driver: bridge

volumes:
  postgres:
  pgadmin:
    • 应用程序. yml**
server:
  port: 8080
spring:
  application:
    name: customer
  datasource:
    username: amigoscode
    url: jdbc:postgresql://localhost:5432/customer
    password: password
  jpa:
    hibernate:
      ddl-auto: create-drop
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect
        format_sql: true
    show-sql: true
    • 客户表脚本**
CREATE DATABASE customer
    WITH
    OWNER = amigoscode
    ENCODING = 'UTF8'
    LC_COLLATE = 'en_US.utf8'
    LC_CTYPE = 'en_US.utf8'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1;
c9qzyr3d

c9qzyr3d1#

由于我在本地安装并运行了一个postgres示例(端口 * 5432 *),微服务客户试图连接到该示例,而不是使用相同端口的docker示例。
解决方案是将URL端口从application.ymlurl:jdbc:数据库服务器数据库://本地主机:5433/客户
以及docker-compose.yml中的postgres端口

    • 来自**

端口:-"* 5432 *:5432"

    • 至**

端口:-"5433:5432"
因此microservice连接到Docker映像中的postGres示例,而不是本地示例
然后重新运行docker命令docker composite up-d运行CustomerApplication(* SprinbgootApplication *),这一次应用程序通过创建customer表顺利启动。

mcdcgff0

mcdcgff02#

在创建角色amigoscode时,您实际上为它设置了密码吗?

CREATE ROLE amigoscode WITH LOGIN PASSWORD 'password';

您可能以postgres超级用户身份登录pgadmin,创建了角色amigoscode,但从未设置密码。编码问题看起来与指定的here类似,当提供的密码不正确时会出现该问题。看起来pgjdbc错误已于2014年修复,但是在〉= 42.2.x的更现代版本中可能已经退化,因为当前存在similar unresolved issue
其他可能的替代方案:

  • SPRING_DATASOURCE_PASSWORD环境变量设置为其他值。
  • 您还有一个application.properties文件,该文件的密码与application.yml中的密码不同,并且优先级高于application.properties中的密码。
  • 在application.yml之前进行Spring检查的任何属性源中指定了不同的密码(优先级讨论here

相关问题