Django、PostgreSQL与pgAdmin端口冲突及数据库迁移异常求助
PostgreSQL、pgAdmin与Django问题排查方案
一、查看所有已连接的数据库及进程
- 登录PostgreSQL命令行:
sudo -u postgres psql - 列出所有数据库:
\l - 查看当前活跃连接详情:
SELECT pid, datname, usename, client_addr FROM pg_stat_activity; - 退出命令行:
\q
二、清理占用默认端口(5432)的进程及冗余数据库
1. 定位并终止端口占用进程
- 执行命令找出占用5432端口的进程:
sudo lsof -i :5432或sudo netstat -tulpn | grep 5432 - 获取输出中的进程PID,执行强制终止:
sudo kill -9 <PID>(将< PID >替换为实际进程号)
2. 删除冗余数据库
- 重新登录PostgreSQL命令行:
sudo -u postgres psql - 删除指定冗余数据库:
DROP DATABASE IF EXISTS <数据库名>;(替换为目标库名) - 验证删除结果:
\l确认目标数据库已移除
三、让PostgreSQL服务器在pgAdmin中正常显示
1. 确认PostgreSQL服务状态
- 查看服务运行状态:
sudo systemctl status postgresql - 若服务未启动,执行启动命令:
sudo systemctl start postgresql
2. 在pgAdmin中重新注册服务器
- 打开pgAdmin,右键点击「Servers」选择「Register」->「Server」
- 「General」标签页:填写自定义服务器名称
- 「Connection」标签页:
- Host name/address:填
localhost或127.0.0.1 - Port:填清理后的默认端口5432,或你修改后的端口
- Maintenance database:填
postgres - Username:填
postgres - Password:输入PostgreSQL的postgres用户密码,勾选「Save password」
- Host name/address:填
- 点击「Save」,配置正确即可看到服务器及下属数据库
四、修复Django迁移的「表已存在/不存在」错误
1. 校验DATABASES配置
- 打开Django项目的
settings.py,确保DATABASES配置与PostgreSQL实际参数一致:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '<你的项目数据库名>', 'USER': 'postgres', 'PASSWORD': '<你的数据库密码>', 'HOST': 'localhost', 'PORT': '5432', # 必须和PostgreSQL使用的端口匹配 } }
2. 重置迁移状态
- 可选:备份当前数据库以防数据丢失:
pg_dump -U postgres <数据库名> > backup.sql - 登录PostgreSQL命令行,删除Django迁移记录表:
DROP TABLE IF EXISTS django_migrations; - 进入Django项目,删除所有
migrations目录下的__pycache__文件夹,以及除__init__.py外的所有迁移文件 - 重新生成初始迁移文件:
python manage.py makemigrations - 执行迁移并忽略已存在的表:
python manage.py migrate --fake-initial
3. 验证迁移结果
- 登录PostgreSQL命令行,切换到项目数据库:
\c <你的数据库名>,然后执行\dt查看所有表,确认结构正确 - 启动Django服务:
python manage.py runserver,检查项目是否正常运行
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

