我在Windows计算机上运行Postgres 11服务。 如何从wsl连接到此数据库?
已尝试: su-postgres
postgres@LAPTOP-NQ52TKOG:~$ psql
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"
尝试连接WSL Postgres,我不想使用以下命令运行Ubuntu Postgres:
sudo /etc/init.d/postgresql start
答案 0 :(得分:3)
在WSL2中,您需要使用主机IP进行连接
获取主机IP
cat /etc/hosts | grep 172.; test $? -eq 0 && $1 || echo -e "$(grep nameserver /etc/resolv.conf | awk '{print $2, " host"}')\n$(cat /etc/hosts)" | sudo tee /etc/hosts
然后,您需要在“具有高级安全性的Windows Defender防火墙”中允许TCP 5432入站规则
我做了我自己的PS。您仍然需要在防火墙中允许TCP 5432
将此内容放入〜/ .bashrc
psql -h host -p 5432 -U postgres
将主机IP附加到/ etc / hosts(如果以前不存在)(通常在重新启动wsl或计算机时发生)
然后
{{1}}
答案 1 :(得分:2)
WSL2 动态分配 IP 地址,甚至无需重新启动 Windows 即可更改 IP 地址。因此,为了可靠地连接,我们需要:
psql
连接时,从 WSL2 确定 Windows/Postgresql 主机的 IP 地址(动态)。我们将通过 .bashrc
和 alias
为您提供便利。不幸的是,我找不到 WSL2 IP 地址范围的确切规范。从几次测试/重启来看,WSL2 似乎正在分配 172.*.*.*
范围内的 IP 地址,因此我们将在配置防火墙和 Postgres 时使用它。
为 WSL2 IP 地址添加 Windows 防火墙入站端口规则:
Windows Defender Firewall with Advanced Security
New Rule...
Port
TCP
并为 Specific local ports
输入 5432
Allow the connection
。从 WSL2 连接不安全,所以不要选择安全选项Public
。也可以选择 Domain
和 Private
。我只能在选择 Public
时连接Postgres - connect from WSL2
并创建它Properties
,然后单击 Scope
标签Remote IP address
下,选择 These IP addresses
,然后单击 Add...
并输入范围 172.0.0.1
到 172.254.254.254
并应用更改配置 Postgres 以接受来自 WSL2 IP 地址的连接
假设 Postgresql for Windows 的默认安装/设置以下文件位于 C:\Program Files\PostgresSQL\$VERSION\data
验证 postgresql.conf
是否具有以下集合:
listen_addresses = '*'
这应该已经设置为 '*'
所以这里什么都不做。
更新 pg_hba.conf
以允许来自 WSL2 范围的连接,例如:
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 172.0.0.0/8 md5
重新启动 Postgres 以使更改生效。这可以通过 Windows Services
应用程序或具有管理员权限的 cmd
完成,例如对于 PostgreSQL 12:
net stop postgresql-x64-12
net start postgresql-x64-12
WSL Shell 便利
在 WSL 中,将以下内容添加到您的 ~/.bashrc
或类似内容中:
# Add DNS entry for Windows host
if ! $(cat /etc/hosts | grep -q 'winhost'); then
echo 'Adding DNS entry for Windows host in /etc/hosts'
echo '\n# Windows host - added via ~/.bashhrc' | sudo tee -a /etc/hosts
echo -e "$(grep nameserver /etc/resolv.conf | awk '{print $2, " winhost"}')" | sudo tee -a /etc/hosts
fi
然后重新加载您的 .bashrc
更改:source ~/.bashrc
使用
psql -h winhost -p 5432 -U postgres
答案 2 :(得分:1)
明确指定主机,端口和用户名 例如:
psql -h 127.0.0.1 -p 5432 -U postgres
答案 3 :(得分:0)
您需要先确保运行
sudo service postgresql start
由于postgres服务器将运行,因此您将能够连接。
答案 4 :(得分:0)
对我来说,遵循以下步骤是可行的:
host all all 0.0.0.0/0 trust
/etc/hosts
中指向我主机IP的主机名之一。我的主机名是:host.docker.internal