psql创建的PostgreSQL数据库未被PgAdmin4识别且Django连接失败求助
问题原因与解决方案
这问题我遇过不少,核心原因很明确——你系统里装了两个完全独立的PostgreSQL实例,一个是9.5.12版本,另一个是10.4版本,它们各自维护一套独立的数据库集群,数据完全不互通。
为什么会出现这种情况?
- 你用命令行的
psql工具时,它默认连接的是9.5.12版本的PostgreSQL实例,所以你创建的portfoliodb只存在于这个实例的数据库集群里。 - 而PgAdmin4默认配置连接的是10.4版本的实例,这个实例的集群里根本没有你用命令行创建的库,自然看不到;Django的配置指向的
localhost:5432如果是10.4实例的端口,那肯定会提示“数据库不存在”。 - 当你在PgAdmin4里创建同名库时,这个库是建在10.4实例的集群里,Django能连上就不奇怪了。
怎么验证这个猜想?
- 查看系统中的PostgreSQL服务:
- Windows用户:打开「服务」(可以通过Win+R输入
services.msc打开),找名字带PostgreSQL的服务,应该能看到两个分别标注版本号的服务,比如postgresql-x64-9.5和postgresql-x64-10。 - Linux/macOS用户:执行
systemctl list-units | grep postgresql(Linux)或者brew services list | grep postgresql(macOS用brew安装的情况),会看到两个不同版本的服务进程。
- Windows用户:打开「服务」(可以通过Win+R输入
- 查看实例的端口:
- 在命令行的
psql里执行SHOW port;,记下这个端口号;再去PgAdmin4里查看连接的端口(右键连接的Server -> Properties -> Connection),对比两个端口,大概率不一样。
- 在命令行的
解决办法
你可以根据自己的需求选下面的方案:
- 卸载其中一个实例,统一使用同一个版本:
如果不需要同时保留两个PostgreSQL版本,直接卸载掉不用的那个(比如9.5或者10.4),然后确保Django和PgAdmin4都连接到保留的实例即可。 - 让Django连接到9.5版本的实例:
如果你想保留用命令行创建的portfoliodb,找到9.5实例的端口(比如可能是5433),修改Django的数据库配置里的PORT字段为对应端口,保存后重新尝试连接和迁移。 - 在PgAdmin4里添加9.5实例的连接:
打开PgAdmin4,右键左侧的「Servers」→「Create」→「Server」,在弹出的窗口里:- 「General」标签随便填个名称(比如“PostgreSQL 9.5”);
- 「Connection」标签填入9.5实例的主机(一般是localhost)、刚才查到的端口、用户名
postgres,点击保存后就能看到你用命令行创建的portfoliodb了。
顺便提下你的配置小问题
你贴的DATABASES配置有语法错误,会导致Django无法正确解析配置:
ENGINE字段没写完,应该是'django.db.backends.postgresql';PASSWORD字段缺了冒号;- 还有多余的空格和换行问题。
修正后的正确配置应该是:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'portfoliodb', 'USER': 'postgres', 'PASSWORD': '', 'HOST': 'localhost', 'PORT': '5432', } }
内容的提问来源于stack exchange,提问作者Prathamesh Saraf
相关产品推荐
相关产品推荐

