部署在Heroku的Django站点能否移除Postgres数据库插件?
问题
我用Django搭建了一个网站并部署在Heroku上,之前按照教程配置了Heroku Postgres数据库插件。但Heroku近期调整定价后,该插件从免费变为每月5美元。我的站点无需用户账户、不收集用户信息,仅Django admin的登录信息存储在该数据库中,我已导出.pgdmp文件但无法解析内容。以下是settings.py中的数据库配置代码:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } import dj_database_url db_from_env = dj_database_url.config(conn_max_age=500) DATABASES['default'].update(db_from_env)
想咨询三个问题:
- 能否在Heroku的CLI或控制面板中删除该插件而不破坏生产环境的站点?
- 是否需要先修改settings.py或其他Django代码?
- 本地开发服务器是否仍可访问Django admin?
回答
能否删除Heroku Postgres插件而不破坏站点?
可以删除,但要提前做好准备:- 你的站点仅用数据库存Django admin账号,删除插件后,生产环境会自动切换到settings.py里的SQLite配置——因为
dj_database_url.config()会因Postgres环境变量缺失返回空值,不会覆盖默认的SQLite设置。但要注意Heroku的文件系统是临时的:每次dyno重启(比如部署代码、Heroku自动维护),SQLite数据库文件会被重置,admin账号会丢失,需要重新创建。 - 删除操作:用Heroku CLI执行
heroku addons:destroy heroku-postgresql,或者在Heroku控制面板的「Add-ons」页面找到插件直接删除。操作前建议先通过heroku run python manage.py createsuperuser在Postgres里重新建一个admin账号,方便切换后使用(毕竟你解析不了pgdmp文件)。
- 你的站点仅用数据库存Django admin账号,删除插件后,生产环境会自动切换到settings.py里的SQLite配置——因为
是否需要修改settings.py或其他代码?
不需要强制修改,但可以按需调整:- 当前配置已经能在Postgres插件删除后自动切到SQLite,核心功能不受影响。
- 如果想彻底清理Postgres相关依赖,可以删掉
import dj_database_url及后续两行代码,直接保留SQLite的默认配置;同时把dj-database-url从requirements.txt里移除,减少不必要的依赖。
本地开发服务器是否仍可访问Django admin?
完全可以。本地开发默认用的就是settings.py里配置的SQLite数据库,只要本地db.sqlite3文件里有已创建的admin账号,就能正常登录。如果本地没有admin账号,运行python manage.py createsuperuser创建一个就行,和生产环境的数据库调整无关。
内容的提问来源于stack exchange,提问作者jbothner21
相关产品推荐
相关产品推荐

