2025-12-18 05:44PM
我使用的是windows+wsl系统,我的pgAdmin已经启动了,在wsl里面启动项目,就提示说:sql: database is closed
解决方法如下:
1. 在 windows powershell 里面执行
services.msc
确认是否存在 postgresql-x64-xx
![]()
可以发现是存在的
2. 在 wsl 里面运行下面这个命令
$ cat /etc/resolv.conf | grep nameserver
来获取 windows 在 wsl 中的访问 IP
$ cat /etc/resolv.conf | grep nameserver
nameserver 172.29.112.1
3. 修改项目里面的数据库链接配置
host=172.29.112.1
port=5432
user=你的用户名
password=你的密码
dbname=你的数据库名
sslmode=disable #非常关键,本地开发几乎必加
4. 重启 postgresql-x64-16
4.1 点击 win + r
4.2 输入 services.msc
4.3 找到 PostgreSQL Server 16
右键点击 "重新启动"

5. 重启之后回到 wsl,测试是否可以链接数据库
$ psql -h 172.29.112.1 -U postgres -d your_db
发现报错了,是因为我在wsl中还没有postgres,所以需要先安装
$ sudo apt update
$ sudo apt install postgresql-client -y
确认是否安装成功
$ psql --version
6. 设置 windows postgresql 允许 wsl 访问
6.1 打开文件夹,找到 postgres 的配置目录
$ C:\Program Files\PostgreSQL\16\data\
6.2 修改 postgres.conf
使用管理员打开该文件,找到下面这一行代码
listen_addresses = '*'
如果前面有#,需要把#删掉
6.3 修改 pg_hba.conf
在文件末尾加一行
host all all 172.16.0.0/12 md5
6.4 再次重启 postgresql-x64-16 ,过程参考第4步
7. 在 wsl 中再次链接 postgres 发现还是报错了
$ psql --version
psql (PostgreSQL) 16.11 (Ubuntu 16.11-0ubuntu0.24.04.1)
$ psql -h 172.29.112.1 -U postgres -d dongtaipaifang
psql: error: connection to server at "172.29.112.1", port 5432 failed: Connection timed out
Is the server running on that host and accepting TCP/IP connections?
主要是因为是 Windows PostgreSQL 没有监听 WSL 网段,或 Windows 防火墙阻断了 5432
解决方法:
7.1 点击 win + R
7.2 输入 wf.msc
7.3 点击"入站规则" -> "新建规则"
7.4 类型: 端口
7.5 TCP -> 5432 -> 下一步
7.6 允许链接 -> 下一步
7.7 勾选: 域/专用/公用 -> 下一步
7.8 名称
PostgreSQL 5432 for WSL
7.9 再次重启 postgresql-x64-16 ,过程参考第4步
8. 再次回到 wsl 测试是否可以链接
$ psql -h 172.29.112.1 -U postgres -d dongtaipaifang
Password for user postgres:
psql (16.11 (Ubuntu 16.11-0ubuntu0.24.04.1))
Type "help" for help.
dongtaipaifang=#
就发现已经可以了.
登录
请登录后再发表评论。
评论列表:
目前还没有人发表评论