org.postgresql.util.PSQLException: 致命错误:角色 "amigoscode" 不存在。

5

我是SpringBoot的新手。我正在尝试创建一个使用Docker运行的Spring Boot应用程序。当我运行此应用程序时,我遇到了以下错误:

org.postgresql.util.PSQLException: FATAL: role "amigoscode" does not exist

我没有任何提示,因为我无法追踪此错误。角色“amigoscode”已存在。 我在下面附上了application.yml和docker-compose.yml文件。

application.yml

server:
  port: 8080

spring:
  application:
    name: customer
  datasource:
    password: password
    url: jdbc:postgresql://localhost:5432/customer
    username: amigoscode
  jpa:
    hibernate:
      ddl-auto: create-drop
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect
        format_sql: 'true'
    show-sql: 'true'

docker-compose.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:

你能指导我吗?我在这里可能做错了什么?我已经查看了其他类似的问题,但是它们都没有解决我的问题。谢谢。


1
"角色“amigoscode”已存在"。不,它不存在。PostgreSQL不会说谎。如果您的持久卷已经有一个数据库,则会被重用,而不是重新创建。如果被重用,则POSTGRES_USER将被忽略。 - jjanes
@jjanes,你能告诉我,我在这里做错了什么吗?我无法理解这个。 - Ankit Ostwal
你解决了吗? - Hleb Shypula
@jjanes那又怎样?解决方案在哪里呢? - Hleb Shypula
@AnkitOstwal 1) 我在本地的Postgres上创建了一个真实的数据源,包括必要的数据库(而不是通过Docker),2) 删除了docker-compose.yml中的pgadmin(我在本地使用DataGrip)和postgres,3) 在application.yml中指定了连接属性。一切都正常工作。如果您有任何问题,请随时问我。 - Hleb Shypula
显示剩余3条评论
4个回答

4
除了上面的提示之外,确保本地机器上没有运行Postgres,因为它可能会与Docker中的Postgres实例发生冲突。

我在创建数据库时遇到了问题,但这有所帮助(因为我的本地服务正在运行)。 - UN..D

0

您的堆栈定义了变量POSTGRES_USERPOSTGRES_PASSWORD,并使用卷postgrespostgres容器将仅在第一次启动时创建这些用户,但如果此卷已经创建,则会重复使用现有数据

很可能您已经使用此卷运行了postgres容器,在这种情况下,您需要删除它,然后重新创建它,例如:

# WARNING: this will delete all containers and volumes
# including pg_data volume and pgadmin volume
# make sure to make a backup if needed
docker-compose down -v 

然后重新创建您的容器和卷(如果需要,还要创建其他组件):

docker-compose up -d

你的问题看起来非常类似于 https://dev59.com/lr7pa4cB1Zd3GeqP9PLN#65630223 - 我在那里找到了答案并在这里进行了适应 :) - Pierre B.
没有帮助我,还有其他的想法吗? - Hleb Shypula
@PierreB.,这也对我没有帮助。还有其他的建议吗? - Ankit Ostwal

0
当您运行Postgres容器并将POSTGRES_USER作为环境变量传递时,初始化脚本会运行以创建用户。但是,如果文件夹(postgres卷)已经包含来自旧运行的数据,则会跳过初始化并且不会创建用户。尝试使用新的卷并在启动postgres容器时检查日志。

-2
请打开pgAdmin,登录到postgreSQL并创建新的数据库。
正在创建新的数据库。

1

然后取名为"amigoscode",你就可以开始了。

"amigoscode"数据库

2

对我来说,它完全正常运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接