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

Django无法连接PostgreSQL数据库:提示postgres数据库不存在

Django连接Docker部署的PostgreSQL时提示"database 'postgres' does not exist"的解决方法

问题现象

已创建名为postgres的数据库,Django配置中指定连接该数据库时报错:port 5432 failed: FATAL: database "postgres" does not exist,但将数据库名称改为template1时可正常连接,希望使用postgres数据库。

现有配置

数据库列表

Name    |  Owner   | Encoding |   Collate   |    Ctype    | ICU Locale | Locale Provider |   Access privileges
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
postgres  | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 |            | libc            |
template0 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 |            | libc            | =c/postgres          +
          |          |          |             |             |            |                 | postgres=CTc/postgres
template1 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 |            | libc            | =c/postgres          +
          |          |          |             |             |            |                 | postgres=CTc/postgres

Django settings.py配置

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'postgres',
    'USER': 'postgres',
    'PASSWORD': 'postgres',
    'HOST': 'db',
    'PORT': 5432,

 }
}

docker-compose.yml配置

version: "3.9"

services:
db:
image: postgres
volumes:
  - ./data/db:/var/lib/postgresql/data
environment:
  - POSTGRES_DB=postgres
  - POSTGRES_USER=postgres
  - POSTGRES_PASSWORD=postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
  - .:/code
ports:
  - "8000:8000"
depends_on:
  - db
volumes:
postgres_data:

解决步骤

  1. 停止并移除当前容器
    执行命令:

    docker-compose down
    
  2. 删除本地持久化数据目录
    由于配置中使用./data/db作为PostgreSQL数据卷,直接删除该目录:

    rm -rf ./data/db
    
  3. 重新启动容器
    执行命令重新初始化数据库:

    docker-compose up -d
    
  4. 验证连接
    启动Django服务,检查是否能正常连接postgres数据库。

原因说明

PostgreSQL官方Docker镜像的初始化逻辑是:仅当数据卷为空时,才会根据POSTGRES_DB、POSTGRES_USER等环境变量创建对应的数据库和用户。如果之前启动容器时未正确设置环境变量,或数据卷已存在旧的数据库数据,后续启动容器时不会重新执行初始化操作,导致postgres数据库实际未被正确创建(或权限配置异常)。清理数据卷后重新启动,镜像会重新执行初始化,创建指定的postgres数据库并配置正确权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:10:31