无法连接到端口5432上的Postgresql

87

我在运行Ubuntu Server 14.04的服务器上安装了PostgreSQL 9.3。

如果通过终端ssh到服务器,我可以用psql连接。但是当我尝试配置pgAdmin III进行远程连接时,我遇到了以下错误:

服务器未监听,不接受连接:连接库报告无法连接到服务器:"172.24.3.147"上的服务器在端口5432上接受TCP/IP连接吗?

当我在服务器上运行service postgresql status时,它会返回:

9.3/main (port 5432): online

所以,我肯定错过了一些重要的东西。

编辑

在服务器上运行netstat -na时,我得到以下相关部分:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN     
tcp        0      0 172.24.3.147:22         172.24.3.240:61950      ESTABLISHED
tcp        0      0 172.24.3.147:22         172.24.3.240:60214      ESTABLISHED

1
你没有绑定到那个IP地址。PostgreSQL正在监听其他地址,比如可能只是127.0.0.1:5432。 - Marc B
你所说的“bind”是什么意思?我正在使用服务器端口(在ssh中使用),当我尝试通过pgAdmin连接时。 - Rodrigo
你需要告诉pg监听哪个接口/IP来进行连接。如果它只绑定在127.0.0.1:5432上,那么对172.24.3.147:5432的任何尝试都将失败,因为没有在那个IP:端口组合上进行监听。 - Marc B
根据您的评论,应该在22端口上进行读取(为什么,默认值是5432?),对吗?(这就是上面“State=ESTABLISHED”行中的内容)。但是当我尝试连接到pgAdmin上的该端口时,我收到了不同的错误消息:“发生错误:14:57:13:错误:无法连接到服务器:SSL错误:未知协议,期望从服务器接收身份验证请求,但收到S”。 - Rodrigo
1
端口22是SSH,与Postgres没有任何关系。 - Marc B
请按照以下步骤操作:https://dev59.com/-lgQ5IYBdhLWcg3wazIi#74163070 - abdulalim
19个回答

2
我曾经遇到过同样的问题,我最初安装了版本10,因为这是Ubuntu 18.04的默认安装版本。后来我升级到13.2,因为我想要最新版本。我做了所有的配置修改,但仍然只能绑定到1207.0.0.1,然后我想——也许它正在查看版本10的配置文件。我修改了那些文件并重新启动了postgres服务。哎呀!它终于绑定到了0.0.0.0。
我需要完全删除10,并确保强制服务运行在13.2版本下,所以如果你从其他版本升级,请尝试更新那个旧目录中的其他配置文件。

我也遇到了同样的问题。我升级了我的PostgreSQL版本,结果发现编辑旧版本的配置文件是解决问题的方法。 - Steve S

2

如果您来自Docker和其他应用程序问题,例如Node.js或Django等方面,请注意:

我遇到了这个问题2天以上,看了很多视频教程,但似乎都不起作用。虽然我可能错过了一些东西,但是以下解决方案对我有效:

不要使用本地主机(localhost)来设置PGHOST,而必须指定服务名称,例如:

    image: postgres
    container_name: postgresdb
    restart: always
    env_file:
      - ./env/.env
    volumes:

如果您的主机是PGHOST:nodeapp-db,则需要进行以下操作:


1

只需输入一个sudo service postgresql start


1

打开Windows服务:按下WIN + R,输入services.msc并回车

找到postgres服务,双击打开属性窗口

点击启动按钮,享受使用吧!


目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

0
在我的情况下,服务器没有监听是因为它没有自动启动(PostgreSQL的Windows版本),因为安装程序没有创建用户并且没有初始化服务器。以下是帮助我解决问题的步骤:
在安装后,我必须在非管理员cmd.exe shell中运行以下命令:
set PGDATA=C:\Program Files\PostgreSQL\14\data
cd C:\Program Files\PostgreSQL\14\bin
createuser.exe -s postgres
pg_ctl init
pg_ctl start

接下来,我使用了pgAdmin工具,并在仪表板中选择了“添加新服务器”。在那里,我在“常规”选项卡中输入了所需的服务器名称,在“连接”选项卡中输入了127.0.0.1,因为我想在本地运行它。在使用保存确认后,它被成功创建。

似乎在Windows中,Postgres没有作为Windows服务运行,因此它不会自动启动,您必须手动运行它。但是,您可以创建一个StartPg.cmd文件,并放入命令C:\Program Files\PostgreSQL\14\bin\pg_ctl start,然后您可以通过Win+E打开Windows资源管理器,在其路径文本框中输入shell:Startup(然后按Enter),并将批处理文件(或其快捷方式)复制到其中。

然后它将自动启动。


0

我使用Homebrew启动我的服务器。

1)停止服务器(但它没有起作用。这是问题所在)

brew services stop postgresql

2)如果需要更新,请进行更新

brew postgresql-upgrade-database

3)下面的注释解决了我的问题,它启动了服务器。就这样

brew services start postgresql


0
如果您已经尝试按照上述建议编辑pg_hba.confpostgres.conf文件,但仍然未能解决问题,那么请看这里!

献给夜猫子的尝试:| LINUX用户

在尝试所有其他建议之后,都没有起作用。
所以我意识到这是由于启动时失败的PostgreSQL Cluster 14-main引起的。
我按照以下步骤操作:

应用的解决方案:

  1. sudo chmod 700 -R /var/lib/postgresql/14/main
  2. sudo -i -u postgres
  3. /usr/lib/postgresql/14/bin/pg_ctl restart -D /var/lib/postgresql/14/main

注意:您可以将14替换为您的postgresql版本号,您可以检查/usr/lib/postgresql/{在此处标记您看到的数字}

解决方案后的状态:

pg_ctl: PID文件“/var/lib/postgresql/14/main/postmaster.pid”不存在。服务器是否正在运行?尝试启动服务器,等待服务器启动....2022-11-17 13:06:36.614 CET [5542] LOG:开始在x86_64-pc-linux-gnu上启动PostgreSQL 14.5(Ubuntu 14.5-0ubuntu0.22.04.1),由gcc(Ubuntu 11.2.0-19ubuntu1)11.2.0编译,64位2022-11-17 13:06:36.614 CET [5542] LOG:监听IPv4地址“0.0.0.0”,端口5432 2022-11-17 13:06:36.614 CET [5542] LOG:监听IPv6地址“::”,端口5432 2022-11-17 13:06:36.616 CET [5542] LOG:监听Unix套接字“/var/run/postgresql/.s.PGSQL.5432”2022-11-17 13:06:36.623 CET [5543] LOG:数据库系统于2022-11-17 09:20:13 CET关闭2022-11-17 13:06:36.631 CET [5542] LOG:数据库系统已准备好接受连接,服务器已启动
  1. pg_lsclusters

版本 | 集群 | 端口 | 状态 | 所有者 | 数据目录 | 日志文件

10 main 5432 在线 postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log

最终,我能够轻松连接到端口=5432,一切都运行得非常完美。


0

对于Windows系统来说,只需要运行"psql -U postgres"命令就可以了。天哪,终于成功了。我在安装过程中设置的密码终于让我进去了。浪费了一个小时在这个愚蠢的问题上。 - Bob the Builder

0
我正在使用MacPorts,并且在使用苹果公司的 Migration Assistant迁移至新机器后,db服务器不可用:
psql: error: connection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused
    Is the server running on that host and accepting TCP/IP connections?
connection to server at "localhost" (::1), port 5432 failed: Connection refused
    Is the server running on that host and accepting TCP/IP connections?

我尝试过

sudo port load postgresql14-server

但是那并没有起作用。然而查看/Library/LaunchDaemons/org.macports.postgresql14-server.plist文件,发现了两件事:

<key>Disabled</key><true/>

以及实际的启动命令

<string>--start-cmd</string>
<string>/opt/local/etc/LaunchDaemons/org.macports.postgresql14-server/postgresql14-server.wrapper</string>

因此,手动运行启动命令最终显示了问题:

> sudo /opt/local/etc/LaunchDaemons/org.macports.postgresql14-server/postgresql14-server.wrapper start
pg_ctl: could not open PID file "/opt/local/var/db/postgresql14/defaultdb/postmaster.pid": Permission denied

而且:

> sudo ls -la /opt/local/var/db/postgresql14/defaultdb/
total 60
drwx------ 26 postgres postgres   832 Jan 31 05:13 .
drwxr-xr-x  4 postgres postgres   128 Feb  5 12:31 ..
-rw-------  1      500 postgres     3 Nov  7  2021 PG_VERSION
drwx------ 22      500 postgres   704 Feb  4 10:37 base
drwx------ 60      500 postgres  1920 Feb  4 10:37 global
drwx------  2      500 postgres    64 Nov  7  2021 pg_commit_ts
...
-rw-------  1      500 postgres   105 Jan 31 05:13 postmaster.pid

用户ID出了问题。修复方法:
sudo chown -hR postgres /opt/local/var/db/postgresql14/defaultdb/

将所有文件的所有者设置为postgres

有了这个更改,服务器可以工作:

> sudo /opt/local/etc/LaunchDaemons/org.macports.postgresql14-server/postgresql14-server.wrapper start
pg_ctl: another server might be running; trying to start server anyway
waiting for server to start.... done
server started
> psql -U postgres -W -p 5432 -h localhost
Password: 
psql (14.6)
Type "help" for help.

postgres=# 
\q

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