160

我已经在 OSX 上安装了 postgresql。当我运行 psql 时,我得到

$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5433"?

但是,从 /etc/services

postgresql      5432/udp    # PostgreSQL Database
postgresql      5432/tcp    # PostgreSQL Database
#                          Tom Lane <tgl@sss.pgh.pa.us>
pyrrho          5433/tcp    # Pyrrho DBMS
pyrrho          5433/udp    # Pyrrho DBMS

5433被pyrrho占用,5432被分配给pg。我可以连接

psql -p 5432

但是为什么 psql 认为它是 5433 以及如何让 psql 默认在正确的位置显示?

4

7 回答 7

217

/etc/services只是建议性的,它是知名端口的列表。这并不意味着该端口上实际上正在运行任何东西,或者命名服务将在该端口上运行。

在 PostgreSQL 的情况下,如果可用,通常使用端口 5432。如果不是,大多数安装程序会选择下一个空闲端口,通常是 5433。

您可以使用该工具查看实际运行的内容netstat(在 OS X、Windows 和 Linux 上可用,命令行语法在这三个工具中有所不同)。

这在 Mac OS X 系统上由于不同的 PostgreSQL 包的可怕混乱而变得更加复杂 - 苹果内置在操作系统中的古老版本的 PostgreSQL、Postgres.app、Homebrew、Macports、EnterpriseDB 安装程序等。

最终发生的是用户安装 Pg 并从一个包装启动服务器,但使用不同包装的客户端psqllibpq这通常发生在他们运行 Postgres.app 或 homebrew Pg 并与psql操作系统附带的连接时。不仅这些有时具有不同的默认端口,而且 Mac OS X 附带的 Pg 具有不同的默认 unix 套接字路径,因此即使服务器在同一端口上运行,它也不会侦听相同的 unix 套接字。

大多数 Mac 用户只需将 tcp/ip 与psql -h localhost. 如果需要,您还可以指定一个端口,例如psql -h localhost -p 5433. 您可能有多个 PostgreSQL 实例正在运行,因此请确保您使用select version()and连接到正确的实例SHOW data_directory;

你也可以指定一个unix socket目录;检查unix_socket_directories您希望连接的 PostgreSQL 实例的设置,并用 指定psql -h,例如psql -h /tmp

一个更干净的解决方案是更正您的系统PATH,以便与您实际运行的 PostgreSQL 相关联的psqllibpq是首先在PATH. 详细信息取决于您的 Mac OS X 版本以及您安装的 Pg 包。我不使用 Mac,如果不花费比目前可用的更多时间,我无法在这方面提供更多细节。

于 2013-02-27T00:16:49.537 回答
29

在 OSX 上快速回答,设置你的环境变量。

>export PGHOST=localhost

>export PGPORT=5432

或者你需要的任何东西。

于 2014-07-02T19:50:33.227 回答
22

Postgres的默认端口一般配置在:

sudo vi /<path to your installation>/data/postgresql.conf

在 Ubuntu 上,这可能是:

sudo vi /<path to your installation>/main/postgresql.conf

port在这个文件中搜索。

于 2014-03-12T12:22:03.027 回答
12

发生这种情况的最常见原因之一似乎是您安装了新版本的 PostgreSQL,而没有停止现有安装的服务。这也是我特别头疼的问题。在安装或升级之前,尤其是在 OS X 上并使用 Enterprise DB 中的一键安装程序之前,请确保在继续之前检查旧安装的状态。

于 2016-01-08T22:36:48.607 回答
8

感谢@a_horse_with_no_name评论,我在 pg_env.sh 中将我的 PGPORT 定义更改为 5432。这解决了我的问题。我不知道为什么 postgres 最初在 5432 托管服务时将其设置为 5433。

于 2013-03-01T17:34:25.170 回答
4

我也遇到了这个问题,最终我有两个 postgres 服务器同时运行。我卸载了其中一个并将端口更改回 5432 并且现在可以正常工作。

于 2014-04-07T14:36:11.227 回答
3

对于我在Mac OS High Sierra上的PgAdmin 4中,单击左列中Servers下的PostrgreSQL10数据库,然后单击Properties选项卡,将5433显示为Connection下的端口。(我不知道为什么,因为我在安装时选择了5432)。无论如何,我单击了Properties选项卡下的Edit图标,将其更改为5432,保存,这样就解决了问题。去搞清楚。

于 2017-11-20T19:37:14.283 回答