Ubuntu终端与Sql Shell、pgAdmin中PostgreSQL数据库不一致问题求助
解决WSL与Windows PostgreSQL实例不同步问题
方案一:让pgAdmin连接WSL中的PostgreSQL实例
这是最直接的方式,无需迁移数据,就能在pgAdmin中管理WSL里的数据库:
修改WSL PostgreSQL的连接配置
- 找到Homebrew安装的PostgreSQL配置目录,路径为
/home/linuxbrew/.linuxbrew/var/postgresql@15/ - 编辑
pg_hba.conf文件,添加一行规则允许Windows主机连接:
(172.17.0.1是WSL默认的Windows网关IP,限制这个段更安全;如果需要允许所有IP,可改为host all all 172.17.0.1/16 scram-sha-2560.0.0.0/0) - 编辑
postgresql.conf文件,修改监听地址:listen_addresses = '*' - 重启WSL的PostgreSQL服务:
brew services restart postgresql@15
- 找到Homebrew安装的PostgreSQL配置目录,路径为
获取WSL的IP地址
在WSL终端执行:hostname -I记下输出的IP(通常是172.17.x.x格式)
在pgAdmin中添加WSL服务器
- 打开pgAdmin,右键「服务器组」→「创建」→「服务器」
- 「常规」选项卡:输入名称(比如「WSL PostgreSQL 15」)
- 「连接」选项卡:
- 主机名/地址:填入刚才获取的WSL IP
- 端口:默认5432
- 用户名:WSL PostgreSQL的超级用户(通常是你的Linux用户名,或
postgres) - 密码:对应用户的密码
- 点击「保存」,即可看到WSL中的所有数据库
方案二:合并两个实例的数据库(迁移Windows数据到WSL)
如果想统一使用WSL的PostgreSQL实例,可将Windows中的数据库迁移过去:
导出Windows中的数据库
- 打开Windows的Sql Shell,登录目标数据库后执行导出命令:
或者在pgAdmin中右键目标数据库→「备份」,选择SQL格式保存到Windows路径下pg_dump -U 用户名 -d 数据库名 > C:\temp\backup.sql
- 打开Windows的Sql Shell,登录目标数据库后执行导出命令:
将备份文件复制到WSL
在WSL终端执行(假设备份文件在C:\temp):cp /mnt/c/temp/backup.sql ~/在WSL中创建目标数据库并导入数据
- 创建空数据库:
createdb -U 用户名 目标数据库名 - 导入备份数据:
psql -U 用户名 -d 目标数据库名 < ~/backup.sql
- 创建空数据库:
后续配置调整
- 你的Spring Boot项目在WSL中运行,只需将
application.properties或application.yml中的数据库连接配置改为WSL实例的信息:spring.datasource.url=jdbc:postgresql://localhost:5432/你的数据库名 spring.datasource.username=WSL PostgreSQL用户名 spring.datasource.password=对应密码 - 之后可停止Windows中的PostgreSQL服务,避免混淆
内容的提问来源于stack exchange,提问作者James Sode
相关产品推荐
相关产品推荐

