环境
- centos 7.2
- postgresql 9.6
过程
在服务器上安装了postgresql后,确认5432端口成功被监听,却无论如何都连不上数据库,在这里浪费了超过2小时的时间,最后才解决了问题,正确的过程整理如下:
1.在centos终端中输入以下代码,以postgres
用户登陆终端
root:# su - postgres
(因为postgres的管理器会以当前用户名为user名称进行登陆,由于默认postgres没有root名称的user,所以会报错)
2.创建名称为dbuser
的新用户
-bash-4.2$ createuser -s dbuser
-s
的意思是以superuser
的身份创建用户dbuser
3.使用刚才新建的用户来创建数据库mydb
$ createdb -O dbuser mydb
4.对 dbuser
用户加上密码
以 dbuser
的身份登录 postgresql
psql -U dbuser -d mydb
其中 -U
的意思是以用户某某来登录, -d
的意思是链接 mydb
这个数据库
登录成功后,终端符号会变成 mydb=#
,我们输入
mydb=# \password
连续输入两次密码即可
网上的大多数文章只能帮你到这了,但是你会发现,根本连不上postgres,不管是本机,还是网络中的其他机器,在花费了不少时间后,我发现了第5步
5.修改postgres的配置文件
默认安全策略下postgres是禁止机器访问的,需要修改
# vim /var/lib/pgsql/9.6/data/pg_hba.conf
在这个文件的末尾处,修改如下
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
修改了配置后,需要重启 postgresql
服务,然后就可以很顺畅地链接了
6.通过远程地址访问postgresql
如果你想要通过非本机来访问pg,那么还需要修改postgresql.conf
,我的路径为
# vim /var/lib/pgsql/9.6/data/postgresql.conf
将`listen addresses = ‘localhost’ 这一行(原文被注释了)修改为
# etc...
listen addresses = '*'
# etc...
这样的话,数据库变为监听任何发往本机指定端口的信息了
小贴士
全局搜索
如果你没有 pg_hba.conf
这个目录,可以通过
find / -name "pg_hba.conf"
来搜索这个文件
重启 postgresql 服务的方法
- 通过命令来重启
systemctl reload postgresql-9.6.service
- 通过 postgresql 命令重启
/usr/pgsql-9.6/bin/pg_ctl reload
关闭iptables
如果你的服务器在更高层面上有安全组之类的设置,那么基本上就可以关掉iptables了
1.关闭iptables
systemctl stop firewalld.service
2.禁止开机启动
systemctl disable firewalld.service
感谢以下文章给予的帮助
PostgreSQL新手入门(阮一峰)
Getting authentication failed error with postgresql from command line