如何修改PostgreSQL默认用户以适配Django项目部署?
问题
尝试将Django项目部署到DigitalOcean的Ubuntu实例,已在PostgreSQL中创建new_user(带密码new_psw)和new_db,并为new_user授予new_db的全部权限,但项目始终连接默认的postgres数据库、用户和密码。
已执行的PostgreSQL操作:
sudo -u postgres psqlCREATE DATABASE new_db;CREATE USER new_user WITH PASSWORD 'new_psw';- 配置
new_user的编码、事务隔离和时区:ALTER ROLE new_user SET client_encoding TO 'utf8'; ALTER ROLE new_user SET default_transaction_isolation TO 'read committed'; ALTER ROLE new_user SET timezone TO 'UTC'; GRANT ALL PRIVILEGES ON DATABASE new_db TO new_user;
查看项目数据库配置仍为默认值:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'PASSWORD': 'postgres', 'HOST': 'localhost', 'PORT': 5432, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'CONN_HEALTH_CHECKS': False, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': { 'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None } } }
额外尝试过的操作:
- 将
new_user设为new_db所有者,通过\l确认生效,但项目仍连接默认配置 - 修改
postgres用户角色禁止登录,未解决问题
解决步骤
你的PostgreSQL操作完全正确,问题核心是未更新Django项目的数据库配置文件,项目仍读取默认配置。按以下步骤修改:
- 定位Django项目的
settings.py文件,通常路径为项目根目录/项目同名文件夹/settings.py(比如myblog/myblog/settings.py) - 找到
DATABASES配置块,替换为新的数据库信息:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'new_db', # 你的新数据库名 'USER': 'new_user', # 你的新用户名 'PASSWORD': 'new_psw', # 你的新密码 'HOST': 'localhost', 'PORT': 5432, } } - 保存文件后,在项目根目录(包含
manage.py的目录)执行数据库迁移:python manage.py makemigrations python manage.py migrate - 验证连接(可选):进入Django Shell测试是否能正常连接新数据库
在Shell中执行:python manage.py shellfrom django.db import connection cursor = connection.cursor() # 无报错则连接成功
补充说明
你之前修改postgres用户权限、切换数据库的操作都是不必要的,因为项目的数据库连接完全由Django的settings.py配置决定,和PostgreSQL当前的连接状态无关。只要配置文件正确,项目就会使用新的用户和数据库。
内容的提问来源于stack exchange,提问作者donbonbon
相关产品推荐
相关产品推荐

