postgresql端口混淆5433或5432?

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

/etc/services只是顾问,它是一个知名端口的列表。 这并不意味着该端口上实际正在运行的任何内容,或者指定的服务将在该端口上运行。

在PostgreSQL的情况下,如果可用的话,通常使用端口5432。 如果不是这样,大多数安装者会select下一个空闲端口,通常是5433。

你可以看到使用netstat工具实际运行的是什么(在OS X,Windows和Linux上可用,命令行语法在所有这三种语言中都不相同)。

在Mac OS X系统中,由于各种PostgreSQL软件包的混乱 – 苹果公司内置于OS,Postgres.app,Homebrew,Macports,EnterpriseDB安装程序等等的古老版本PostgreSQL,

发生什么事是用户安装Pg并从一个包装启动一个服务器,但使用不同包装中的psqllibpq客户机。 通常在运行Postgres.app或homebrew Pg并连接OS附带的psql时会发生这种情况。 这些端口不仅有时会有不同的默认端口,而且Mac OS X附带的Pg具有不同的默认unix套接字path ,所以即使服务器运行在同一个端口上,它也不会监听到相同的unix套接字。

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

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

一个更清洁的解决scheme是纠正你的系统PATH以便与你实际运行的PostgreSQL相关联的psqllibpqPATH上的第一个。 这些细节取决于您的Mac OS X版本以及您已安装的Pg软件包。 我不使用Mac,也不能在这方面提供更多的细节,而不会花费更多的时间。

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

导出PGHOST = localhost

导出PGPORT = 5432

或者任何你需要的。

Postgres的默认端口通常configuration在:

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

在Ubuntu上这可能是:

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

在这个文件中searchport

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

看起来这是最常见的原因之一,如果你安装一个新版本的PostgreSQL而不停止现有安装的服务。 这也是我的特别头痛。 在安装或升级之前,特别是在OS X上,使用Enterprise DB中的一键安装程序之前,请确保在继续之前检查旧安装的状态。

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