postgresql端口混淆5433还是5432?

postgresql port confusion 5433 or 5432?

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

1
2
3
4
$ 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

1
2
3
4
5
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。 我可以联系

1
psql -p 5432

但为什么psql认为它是5433,我如何让psql默认在正确的位置?


/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或自制程序Pg并与操作系统附带的psql连接时,就会发生这种情况。这些不仅有时会有不同的默认端口,但Mac OS X附带的Pg具有不同的默认unix套接字路径,因此即使服务器在同一端口上运行,它也不会监听相同的unix套接字。

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

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

更清晰的解决方案是更正您的系统PATH,以便与您实际运行的PostgreSQL关联的psqllibpqPATH上首先找到的内容。具体细节取决于您的Mac OS X版本以及您安装的Pg软件包。我不使用Mac,如果不花费比现有的更多时间,就不能提供更多的细节。


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

export PGHOST=localhost

export PGPORT=5432

或者无论你需要什么。


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

1
sudo vi /<path TO your installation>/DATA/postgresql.conf

在Ubuntu上,这可能是:

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

在此文件中搜索port


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


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


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


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