PostgreSQL端口混淆 5433还是5432?

177
我已在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默认查找正确的位置?

5
请检查环境变量 PGPORT 是否已定义:http://www.postgresql.org/docs/current/static/libpq-envars.html - user330315
7个回答

231

/etc/services仅供参考,它是一个知名端口列表。这并不意味着任何东西实际上在该端口上运行,或者命名的服务将在该端口上运行。

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

您可以使用netstat工具查看实际运行情况(在OS X、Windows和Linux上都可用,其命令行语法在三个系统中各不相同)。

在Mac OS X系统上,由于不同的PostgreSQL软件包混乱不堪 - Apple内置的古老版本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()SHOW data_directory;连接到正确的实例。

您还可以指定一个unix套接字目录;检查要连接的PostgreSQL实例的unix_socket_directories设置,并使用psql -h指定该设置,例如psql -h /tmp

更清晰的解决方案是纠正你的系统PATH,以便首先在PATH中找到与实际运行的PostgreSQL相关联的psqllibpq。具体细节取决于你的Mac OS X版本和安装的Pg软件包。我不使用Mac,在没有足够时间的情况下无法提供更多详细信息。

30

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

>export PGHOST=localhost

>export PGPORT=5432

或者你需要的任何内容。


24

Postgres的默认端口通常配置在:

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

在Ubuntu上可能是这样的:

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

在这个文件中搜索端口


在Mac OSX上,使用BigSQL发行版,它在这里:~/PostgreSQL/data/pg96 - Shanerk

12

看起来最常见的原因之一是在没有停止现有安装的服务的情况下安装了新版本的PostgreSQL。这也是我遇到的一个特别头疼的问题。在安装或升级之前,特别是在使用Enterprise DB的一键安装程序和OS X上,请确保在继续之前检查旧安装的状态。


3
好的,我们安装了 PostgreSQL-9.5,而此时已经安装了 9.4 版本。因此,9.5 版本选择了 5433 作为默认端口。 - vikingsteve
我长期使用5432和5433,我见过5436,但不知道那是别人的创意还是不同操作系统上的默认设置。 - Deil

8

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


4

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


4

在我使用的 Mac OS High Sierra 上的 PgAdmin 4 中,左侧栏中的 Servers 下单击 PostrgreSQL10 数据库,然后单击 Properties 选项卡,在 Connection 下显示端口号为5433。(我不知道为什么,因为我在安装时选择的是 5432)。无论如何,我单击了 Properties 选项卡下的 Edit 图标,将其更改为5432,保存后问题解决了。去理解吧。


所有这样做的只是让您连接到已在5432上运行的服务器,这就是为什么您在执行此操作后可以连接的原因。正如您正确说明的那样,服务器正在根据您的安装在5432上运行。 - Shanerk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接