You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中Postgres默认超级用户不存在问题排查请求

问题原因及解决办法

核心原因

你在docker-compose.yml的db服务中通过POSTGRES_USER环境变量指定了自定义超级用户dei_acolhimento_root。Postgres官方镜像的初始化逻辑是:如果显式设置了POSTGRES_USER,则只会创建这个指定的用户作为超级管理员,默认的postgres角色不会自动生成。

之前能正常使用psql -U postgres,大概率是因为当时的pgdata数据卷里保留了旧的数据库初始化数据(比如之前未设置POSTGRES_USER时创建的postgres角色),后来数据卷被意外清理、重置,或者容器重新初始化时加载了新配置,导致默认角色消失。

解决办法

方法1:使用正确的用户登录

直接用你配置的自定义用户连接数据库:

psql -U dei_acolhimento_root -d dei_acolhimento_v1

如果已在容器shell内,且容器环境变量已设置PGPASSWORD,可以省略密码输入直接登录。

方法2:创建postgres角色(需重置数据)

如果必须使用postgres角色,需要在初始化脚本中添加角色创建逻辑,然后重置数据卷(注意:此操作会清空现有数据库数据,务必提前备份):

  1. 编辑init-database.sh,添加以下内容:
#!/bin/bash
set -e

# 创建postgres超级角色
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
    CREATE ROLE postgres WITH SUPERUSER LOGIN PASSWORD '你的自定义密码';
EOSQL
  1. 停止并清理容器及数据卷:
docker-compose down -v
  1. 重新启动容器:
docker-compose up -d

容器启动时会执行初始化脚本创建postgres角色,之后即可用psql -U postgres登录。

内容的提问来源于stack exchange,提问作者Gi Tobias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:22:33