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并从一个包装启动一个服务器,但使用不同包装中的psql
和libpq
客户机。 通常在运行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相关联的psql
和libpq
是PATH
上的第一个。 这些细节取决于您的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,现在工作正常。