postgresql端口混淆5433还是5432?

hig*_*dth 112 postgresql port psql

我在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"?
Run Code Online (Sandbox Code Playgroud)

但是,来自/ 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
Run Code Online (Sandbox Code Playgroud)

5433被pyrrho占据,5432被分配给pg.我可以联系

psql -p 5432
Run Code Online (Sandbox Code Playgroud)

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

Cra*_*ger 161

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

大多数Mac用户通过使用tcp/ip来解决这个问题psql -h localhost.您也可以根据需要指定端口,例如psql -h localhost -p 5433.您可能有多个PostgreSQL实例正在运行,因此请确保使用select version()和连接到正确的实例SHOW data_directory;.

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

一个清洁的解决方案是校正系统PATH,以便psqllibpq相关的与PostgreSQL的你实际上是在运行是什么先上找到PATH.具体细节取决于您的Mac OS X版本以及您安装的Pg软件包.我不使用Mac,如果不花费比现有的更多时间,就不能提供更多的细节.


小智 20

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

export PGHOST = localhost

export PGPORT = 5432

或者无论你需要什么.


Ris*_*nha 13

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

sudo vi /<path to your installation>/data/postgresql.conf
Run Code Online (Sandbox Code Playgroud)

在Ubuntu上,这可能是:

sudo vi /<path to your installation>/main/postgresql.conf
Run Code Online (Sandbox Code Playgroud)

port在此文件中搜索.


Ero*_*oyd 7

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

  • 是的,我们在已经安装了 9.4 的时候安装了 postgresql-9.5,所以 9.5 选择了 5433 作为默认端口 (2认同)

hig*_*dth 6

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