postgresql - 如何连接到 PostgreSQL?

标签 postgresql rust

我想用 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/

相关文章:

rust - 展开时无法移出共享引用后面的值

rust - 当多个日志记录目的地与 rust 跟踪库一起使用时,如何限制日志级别?

rust - 你如何在 Rust 中使用父模块导入?

rust - 如何在 Rust 中匹配具有私有(private)字段的结构?

rust - 尝试为结构设置带有生存期的返回值时,由于需求冲突,因此无法为autoref推断适当的生存期

sql - 这个case怎么单查询

mysql - 同时向数据库添加条目会引发时间戳唯一性问题

postgresql - 无法从 wsl 2 上运行的服务之一连接到 wsl 2 上的容器中运行的 postgres 数据库

node.js - 用于 PostgreSQL 连接 nodejs 的 SSL

postgresql - Hibernate 与分区表