Postgres 术语:客户端与连接

Posted

技术标签:

【中文标题】Postgres 术语:客户端与连接【英文标题】:Postgres terminology: client vs connection 【发布时间】:2017-01-06 17:14:06 【问题描述】:

在 Postgres 中,客户端和连接之间是否存在一对一的关系?换句话说,一个客户端总是一个连接,没有一个客户端可以打开多个连接?

例如,当 Postgres 说:

org.postgresql.util.PSQLException: FATAL: 抱歉,客户端已经太多了。

这是否相当于“已经有太多的连接”?

此外,据我了解,Postgres 为每个客户端使用一个进程。那么这是否意味着每个进程只用于一个连接?

【问题讨论】:

【参考方案1】:

参考 - https://www.postgresql.org/docs/9.6/static/connect-estab.html

PostgreSQL 是使用简单的“每个用户进程”实现的 客户端/服务器模型。在这个模型中,有一个客户端进程 只连接到一个服务器进程。因为我们事先不知道 time 将建立多少个连接,我们必须使用 master 每次连接时产生一个新的服务器进程的进程 请求。

是的,一个服务器进程服务一个连接。

【讨论】:

我了解一个服务器进程为一个客户端服务。我想知道的是一个客户端是否可以有多个连接都连接到同一个服务器进程。【参考方案2】:

您可以从单个客户端(机器、应用程序)获得服务器可以管理的尽可能多的连接。服务器可以支持给定数量的连接,无论这些连接是否来自不同的客户端(机器、应用程序)与服务器无关。

连接到postmaster 进程,该进程正在侦听 PG 配置为侦听的端口(默认为 5432)。建立连接时(在身份验证之后),服务器会生成一个由单个客户端独占使用的进程。该客户端可以与同一个服务器建立多个连接,例如连接到不同的数据库,或者使用不同的凭据连接到同一个数据库等。

【讨论】:

以上是关于Postgres 术语:客户端与连接的主要内容,如果未能解决你的问题,请参考以下文章

在主机上的客户端 docker 和 postgres 服务器之间连接 [重复]

Postgres 时间戳

连接需要具有 ssl 模式的 laravel google cloud postgres 中的有效客户端证书

Heroku/Postgres:引起:java.net.ConnectException:连接被拒绝(连接被拒绝)

具有多个模式和用户的连接池 Postgres

postgres jdbc 客户端证书用户与数据库用户