我正在尝试使用以下命令连接到安装在远程服务器中的 Postgres 数据库:
psql -h host_ip
-U db_username
-d db_name
这是发生的错误:
psql:无法连接到服务器:连接被拒绝 服务器是否在主机“
Postgres 安装的版本是 9.4。主机操作系统:Ubuntu 15.04 客户端操作系统:Centos 7
我已经尝试了以下方法,但问题仍未解决:
编辑 pg_hba.conf 文件以包含
托管所有所有 0.0.0.0/0 md5
编辑'postgresql.conf'并将listen参数更改为
听地址='*'
重新启动 Postgres 服务。在主机和客户端上禁用防火墙和 iptables。我通过在本地运行 psql 命令进行了检查,它工作正常。我尝试了这个问题中给出的第二个解决方案。运行 nmap 给了我以下输出:
Starting Nmap 6.47 ( http://nmap.org ) at 2015-09-07 18:08 IST Nmap scan report for 10.17.250.250 Host is up (0.0000040s latency). Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http
我错过了什么吗?希望有人可以提供帮助。
sudo ufw disable
禁用了 iptables,但我仍然遇到同样的错误。
cd /etc/postgresql/9.x/main/
打开名为 postgresql.conf
的文件
sudo vi postgresql.conf
将此行添加到该文件
listen_addresses = '*'
然后打开名为 pg_hba.conf
的文件
sudo vi pg_hba.conf
并将这一行添加到该文件
host all all 0.0.0.0/0 md5
它允许使用加密密码的所有用户访问所有数据库
重启你的服务器
sudo /etc/init.d/postgresql restart
检查 postgresql.conf
中定义的端口。我安装的 postgres 9.4 使用端口 5433
而不是 5432
postgresql.conf
上...从不介意检查 postgresql.conf
,但只需将其修复为 5432。
尝试远程连接到我的 Raspberry Pi 上的新 PostgreSQL 安装时,我一直在努力解决这个问题。以下是我为解决此问题所做的全部细分:
首先,打开 PostgreSQL 配置文件并确保该服务将在 localhost 之外进行侦听。
sudo [editor] /etc/postgresql/[version]/main/postgresql.conf
我使用了 nano
,但您可以使用您选择的编辑器,并且虽然我安装了版本 9.1
,但该目录将适用于您安装的任何版本。
向下搜索标题为“连接和身份验证”的部分。第一个设置应该是 'listen_addresses'
,可能如下所示:
#listen_addresses = 'localhost' # what IP address(es) to listen on;
右侧的注释对如何更改此字段提供了很好的说明,并且对所有人使用建议的 '*'
效果会很好。
请注意,此字段用# 注释掉。根据评论,它将默认为“localhost”,因此仅将值更改为 '*'
是不够的,您还需要通过删除前导 #
来取消注释设置。
它现在应该是这样的:
listen_addresses = '*' # what IP address(es) to listen on;
您还可以检查下一个设置“端口”,以确保连接正确。 5432 是默认值,如果您不指定,psql 将尝试连接的端口。
保存并关闭文件,然后打开位于同一目录中的客户端身份验证配置文件:
sudo [editor] /etc/postgresql/[version]/main/pg_hba.conf
如果您想限制访问,我建议您阅读该文件,但对于基本的打开连接,您将跳转到文件底部并添加如下一行:
host all all all md5
如果愿意,您可以按制表符而不是空格来将字段与现有列对齐。
就个人而言,我改为添加了如下所示的一行:
host [database_name] pi 192.168.1.0/24 md5
这将连接限制在局域网子网上的一个用户和一个数据库。
保存对文件的更改后,您需要重新启动服务以实施更改。
sudo service postgresql restart
现在,您可以使用以下命令检查以确保服务正在公开侦听正确的端口:
sudo netstat -ltpn
如果您不以提升的方式运行它(使用 sudo
),它不会告诉您侦听这些端口的进程的名称。
其中一个进程应该是 Postgres,并且本地地址应该是开放的 (0.0.0.0) 并且不仅限于本地流量 (127.0.0.1)。如果它没有打开,那么你需要仔细检查你的配置文件并重新启动服务。您可以再次确认服务正在侦听正确的端口(默认为 5432
,但您的配置可能不同)。
最后,您将能够使用以下命令从远程计算机成功连接:
psql -h [server ip address] -p [port number, optional if 5432] -U [postgres user name] [database name]
确保在配置文件中正确应用设置。
vim /etc/postgresql/x.x/main/postgresql.conf
尝试以下操作以查看日志并找到您的问题。
tail /var/log/postgresql/postgresql-x.x-main.log
"/var/lib/postgresql/9.5/main" has group or world access 2019-05-20 19:53:45.406 IST [4843] DETAIL: Permissions should be u=rwx (0700).
以下配置,您需要设置:
要打开端口 5432,请编辑您的 /etc/postgresql/9.1/main/postgresql.conf
并更改
# Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
在 /etc/postgresql/10/main/pg_hba.conf
# IPv4 local connections:
host all all 0.0.0.0/0 md5
现在重新启动您的 DBMS
sudo service postgresql restart
现在您可以连接
psql -h hostname(IP) -p port -U username -d database
如果您在 Mac 上尝试,我的方法非常简单:
brew install postgres
这将告诉您是否已经安装它以及什么版本或为您安装最新版本,如果没有然后运行
brew upgrade postgresql
这将确保您最终安装了最新版本
brew services start postgresql
这将再次启动服务。我希望这可以帮助别人。
第 1 步:编辑文件potgresql.conf
文件位置应该是:etc/postgresql/10/main/
查找:#Connection Settings - #listen_addresses = '' # 要监听的 IP 地址;
删除监听地址前的#
添加'*':listen_addresses = '*'
第 2 步:编辑文件pg_hba.conf
文件位置应该是:etc/postgresql/10/main/
在最终主机的给定行下方添加所有 0.0.0.0/0 md5
第三步:重启postgres服务器
sudo /etc/init.d/postgresql restart
第 4 步:检查 postgres 服务器状态
sudo netstat -plunt |grep postgres
确保您使用相同的端口来访问数据库
我认为您使用的是机器名称而不是主机的 ip。
当我尝试使用机器名称时,我得到了同样的错误。因为,只有当客户端和主机都在同一网络下并且安装了相同的操作系统时才允许。
以下对我在 macos Mojave 上的帮助:
$sudo mv /usr/local/var/postgres /usr/local/var/postgres.save
$brew uninstall postgres
$brew install postgres
查看端口并在 postgresql.conf 中进行端口更改。我安装的 postgres 9.4 使用端口 5431 或 5434 而不是 5432。如果它说端口正在使用中,请更改端口。并检查您是否在 psql 安装中提供密码,以便在文件中提供密码并保存。
就我而言,我删除了一个语言环境并生成了另一个语言环境。由于 postgresql.conf 文件中的“lc_messages”、“lc_monetary”、“lc_numberic”和“lc_time”上的致命错误,数据库无法打开。
恢复语言环境为我解决了问题。
另一种情况,postgresql.conf
并且pg_hba.conf
文件不在 /etc/postgresql/9.1/main/
。因为 postgres 可以从您设置的任何位置开始。
例如,当您使用命令 pg_ctl -D /tmp/pgsql/ start
时,postgresql.conf
和 pg_hba.conf
将位于 /tmp/pgsql/
。
就我而言,我没有更改管理门户中的 Azure 默认安全策略。原来是允许端口22,其余的都被拒绝。只要我加上5432端口,一切都变好了。
我有完全相同的问题,我的配置文件正确。就我而言,问题来自我使用的 Eduroam wifi:当我通过另一个 wifi 连接时,一切正常。至少在我的大学里,Eduroam 似乎阻塞了 5432 端口。
尝试迁移您的数据库。例如,如果您使用 Heroku 来托管您的项目并使用 Django,请尝试 heroku run python manage.py migrate
命令;错误应该消失。
我遇到了这样的问题,我必须 ssh 进入服务器,然后在 psql 控制台中运行查询,所以查询在脚本中,但每次我收到此错误 psql not found 所以我所做的只是添加了 psql 完整路径我们从 cat .bash_profile 得到的 bin 并完成了
PATH=$PATH:/usr/local/pgsql/bin:/usr/local/mysql/bin
所以我添加了整个 /usr/local/mysql/bin/psql 而不是 psql 用于远程执行。
还有一个在这里:
主机和远程都在真实服务器上
你需要'*'
。'localhost , xxx.xxx.xxx.xxx'
不起作用。所有这些答案(我见过两个)都应该被抹去。
你不需要的东西:host all all 0.0.0.0/0 md5
和这些东西
对我来说,我刚刚删除了位于服务器下 pgAdmin4 GUI 界面左侧的现有 PostgreSQL 14 服务器,然后我从 pgAdmin4 的快速链接中的选项手动添加了新服务器。
我遵循了 bitnami.com 的文档
pg_hba.conf
和postgresql.conf
脚本适应这个环境和权限吗?我需要使用PGPASSWORD=postgres psql -U postgres
。