PostgreSQL14安装并初始配置外部连接指南。
环境信息:
Linux Centos7
可以使用以下命令查看当前系统的信息和版本:
hostnamectl,uname -a,cat /etc/issue,cat /proc/version,cat /etc/redhat-release或cat /etc/centos-release。
1. 二进制方式安装
本指南安装postgreSQL 14版本的server版本,可以到https://www.postgresql.org/download/网站上进行下载,

根据上边的步骤进行选择后,然后执行第四步显示的脚本内容。
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb这一步的命令是必须要执行的,不然postgresql-14服务通过systemctl enable --now postgresql-14.service会启动失败,报错信息是"postgresql Failed to start PostgreSQL 14 database server"。
systemctl enable --now <服务名称>:将指定服务设置为启用状态并立即运行。
也可以看看https://www.postgresql.org/docs/14/tutorial-install.html入门的教程,熟悉下入门所知道的资料。
如果你是安装完成,服务也启动完成,但是无法通过psql -U postgres登录终端,那是因为默认得配置仅是侦听这个postgres用户的。
你可以使用id postgres查看postgres**用户是否存在,如果存在,你有两种方式登录psql终端。
第一种就是sudo -u postgres -- psql。这种方法出现"could not change directory to "/root": Permission denied"错误的话,请先cd到公共目录的位置再执行这条命令(例如:cd /)。
第二种就是通过su - postgres切换到指定用户的bash终端,然后在终端处执行psql命令就登录到psql的终端里了。
第三种方式是通过执行下方命令。
sudo -i -u postgres
psql
在通过pg_hba.conf配置文件的认证方式为peer的时候,是不需要给出登录密码的,所以自然就能登录上去了。
2. 配置pg_hba.conf和postgresql.conf文件,以接受外部连接。
我通过yum安装的数据库,所以我的数据目录的位置在/var/lib/pgsql/14/data中。
- 配置pg_hba.conf文件,添加以下信息。
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 scram-sha-256

关于pg_hba.conf配置文件的说明,可点击此处访问官方文档。
认证方法peer: 对等身份验证方法的工作原理是从内核中获取客户端的操作系统用户名,并将其用作允许的数据库用户名(可选用户名映射)。
-
配置postgresql.conf文件
配置listen_addresses参数为"*",如下图。

配置好后,不要忘了重启postgreSQL服务。
使用命令systemctl restart postgresql-14.service进行重启服务。 -
第三步,在Shell终端上执行
netstat -anop | grep 5432命令,查看PostgreSQL的监听服务是否启动成功。

如果出现0.0.0.0就代表配置成功了。 -
到达这一步就说明你的PostgreSQL已经可以对外部提供连接服务了。
需要注意如果你是云服务器,就需要配置下安全组开发指定端口。
并且还需要防火墙开放指定端口(PostgreSQL默认端口是5432)。
开放Firewalld防火墙:
firewall-cmd --add-service=postgresql --permanent
sudo firewall-cmd --reload
可通过psql -h <IP地址> -p <端口> -U <存在的角色或用户> -d <数据库>命令进行测试。
-h: 可通过
ifconfig查看当前服务器的IP地址,或指定公网的IP地址,可测试整个链路是否打通。
-p: 端口,默认是5432
-U: 默认用户是postgres
-d: 默认会存在postgres数据库
psql -U postgres -x -c "ALTER USER new_user WITH PASSWORD 'your_secure_password';"
将上边得new_user和your_secure_password替换为你的角色名和密码,然后运行即可。
移除用户得密码自然就是执行ALTER USER some_user PASSWORD NULL;。
问题和疑问
1. 用户和角色的区别是什么?
通过psql登录终端后,执行\dg后会输出所有角色信息。
在PostgreSQL高版本中用户和角色的区别在于用户是可以通过命令行登录到数据库的,而角色是不能登录的。
角色可以包含其他角色,从而拥有其他角色权限信息。
大白话就是,用户是指拥有登录权限的角色,角色就是没有登录权限的角色。
2. 如何查看数据目录的位置?
登录psql终端,执行SHOW data_directory;命令,会输出数据目录的位置。
或者在psql终端执行SELECT setting FROM pg_settings WHERE name = 'data_directory';语句。

当前数据目录的配置位置也可以执行
cat /path/to/data_directory/postgresql.conf | grep data_directory查看。
前提是需要知道postgresql.conf文件的位置。
3. 如何查看当前登录psql的角色?
通过在psql终端中执行SELECT current_user;语句可显示当前登录的角色。
4. 如何创建角色
创建拥有登录权限的角色:
CREATE ROLE login_role WITH LOGIN PASSWORD 'your_secure_password';
- WITH LOGIN 表示该角色可以用于登录数据库。
- PASSWORD 'your_secure_password' 设置了角色的密码。
创建不拥有登录权限的角色:
CREATE ROLE nologin_role WITH NOLOGIN;
如果查看角色信息:
\du
\dg
上面两种方式都可以查看角色列表,作用是一样的。

浙公网安备 33010602011771号