我想用 rust-postgres
连接到 PostgreSQL 服务器:
let mut client = Client::connect("host=localhost user=postgres", NoTls)?;
完整的代码示例来自
Client
和 Config
.我不断收到错误
Error: Error { kind: Connect, cause: Some(Os { code: 111, kind: ConnectionRefused, message: "Connection refused" }) }
在终端中,我可以与 PostgreSQL 交互:
(base) wm@wm:~/Desktop/HP$ sudo -i -u postgres
postgres@wm:~$ psql
psql (10.10 (Ubuntu 10.10-0ubuntu0.18.04.1))
Type "help" for help.
postgres=#
与失败的连接相关的问题很少,所以我想一定有什么我错过了。
最佳答案
Postgresql 支持通过本地 Unix 套接字或 TCP/IP 连接的客户端连接。
但是,在默认配置中,它不会监听 TCP/IP 连接。它只会监听到本地 Unix 套接字的连接。这个套接字的位置由 postgresql 配置变量 unix_socket_directories
定义。 .
在您的测试中,您发现在运行 psql
没有参数的命令行工具,它设法连接到数据库。这是因为 psql
使用 postgresql 提供的客户端库 ( libpq
),如果没有提供主机名,则此客户端库具有连接到本地 Unix 套接字的默认行为。
但是,当使用 rust-postgres
,您正在提供一个包含文本“host=localhost
”的连接字符串。这是指示rust-postgres
连接到 IP 地址 localhost
.它失败是因为 postgresql 服务器未配置为监听任何 IP 接口(interface),而仅监听 Unix 套接字。
您可以更改连接字符串以指定要连接的 unix 套接字,例如:
host=/var/run/postgresql/.s.PGSQL.5432
上面的值反射(reflect)了套接字在我的机器上的位置,在你的机器上可能会有所不同。
libpq
图书馆允许您离开 host
完全参数out,它将自动连接到Unix套接字;不幸的是,它看起来不像 rust-postgres
虽然支持这一点。或者,您可以重新配置您的 postgresql 服务器,以便它监听环回 IP 适配器。这涉及设置
listen_addresses
postgresl 配置文件中的参数。见 this answer有关更多详细信息,包括您需要对 pg_hba.conf
中的身份验证进行的更改.
关于postgresql - 如何连接到 PostgreSQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59863774/