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:
解决步骤
停止并移除当前容器
执行命令:docker-compose down删除本地持久化数据目录
由于配置中使用./data/db作为PostgreSQL数据卷,直接删除该目录:rm -rf ./data/db重新启动容器
执行命令重新初始化数据库:docker-compose up -d验证连接
启动Django服务,检查是否能正常连接postgres数据库。
原因说明
PostgreSQL官方Docker镜像的初始化逻辑是:仅当数据卷为空时,才会根据POSTGRES_DB、POSTGRES_USER等环境变量创建对应的数据库和用户。如果之前启动容器时未正确设置环境变量,或数据卷已存在旧的数据库数据,后续启动容器时不会重新执行初始化操作,导致postgres数据库实际未被正确创建(或权限配置异常)。清理数据卷后重新启动,镜像会重新执行初始化,创建指定的postgres数据库并配置正确权限。
内容的提问来源于stack exchange,提问作者eyedfox
相关产品推荐
相关产品推荐

