本文尝试在ubuntu 18.04的环境中安装最新版本(14.)的PostgreSQL,并且配置远程访问。
在一般情况下,ubuntu 18.04默认的存储库中PostgreSQL的版本是10.0的,因此在安装之前需要配置安装源,添加PostgreSQL官方存储库,以便获取到最新版本的PostgreSQL。
1、开始之前,可以通过以下指令检查检查一下ubuntu存储库中可⽤的PostgreSQL 版本:
sudo apt update
sudo apt -y upgrade
apt show postgresql
结果大概是这样的:
Package: postgresql
Version: 10+190
Priority: optional
Section: database
Source: postgresql-common
2、如果发现ubuntu存储库中的PostgreSQL不是最新的,或是我们需要的,那么就需要通过以下指令来添加PostgreSQL官方存储库:
#创建文件存储库配置
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
#导入存储库签名密钥
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
#更新包列表
sudo apt update
#安装最新版本的PostgreSQL。
#如果需要特定版本,请使用“postgresql-14”或类似版本,而不是“postgresql”:
sudo apt -y install postgresql-14
## 等待安装过程....
3、安装完毕后,切换到PostgreSQL创建的linux账户下,查看安装结果:
# su postgres
$ psql --version
出现类似结果时,表明PostgreSQL已经安装成功。
psql (PostgreSQL) 14.3 (Ubuntu 14.3-1.pgdg18.04+1)
二、配置PostgreSQL远程访问
接下来要开放远程访问PostgreSQL需要修改权限配置文件pg_hba.conf、配置PostgreSQL参数postgresql.conf,重启PostgreSQL服务,同时不要忘了打开防火墙或在云服务器控制台在打开5432端口。
1、使用postgres账户修改pg_hba.conf
$ vi /etc/postgresql/14/main/pg_hba.conf
打开文件后找到以下配置内容:
# Database administrative login by Unix domain socket
local all postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 0.0.0.0/0 md5
修改 local及host最后的部分,其值可以是 peer(为等同使用当前postgres linux账户)、trust(为无密码)、md5(为使用md5加密密码)、scram-sha-256(为使用sha-256加密密码),一般情况下,local一行可以保持peer(当应用程序希望通过localhost使用密码访问PostgreSQL服务时,可以考虑设置为md5或sha-256),而host一行可以设置为md5或sha-256。
2、使用postgres账户修改postgresql.conf
$ vi /etc/postgresql/14/main/postgresql.conf
打开文件后找到以下配置内容:
data_directory = '/var/lib/postgresql/14/main'
hba_file = '/etc/postgresql/14/main/pg_hba.conf'
listen_addresses = '*' # localhost
port = 5432
修改listen_addresses为‘*’,使得外网可以可以访问PostgreSQL服务,当然也可以根据自己的实际需要修改port参数。
3、重启PostgreSQL服务
完成以上配置后,需要重启PostgreSQL服务才能使其生效。这时需要使用exit指令,退出postgres账户,回到linux管理员账户下,使用以下指令重启服务:
systemctl restart postgresql
如果服务列表中找不到postgresql时,可以使用:
/etc/init.d/postgresql restart
4、打开防火墙或配置云服务器访问策略
sudo apt install iptables
iptables -I INPUT -p tcp --dport 5432 -j ACCEPT
iptables-save
5、检查结果
一切ok,这时你可以通过以下指令来访问PostgreSQL数据库:
psql -U postgres -h8.8.8.8 -p5432 -d postgres
-U:用来设置连接PostgreSQL的用户名
-h:用来设置PostgreSQL数据库服务器监听的IP地址
-p:用来设置监听端口信息
-d:用来设置PostgreSQL远程连接的database
另外PostgreSQL还支持pgsql+URL的方式进行连接:
psql postgresql://$username:$password@$hostip:$port/$dbname
三、修改PostgreSQL用户密码
在PostgreSQL默认的安装过程中,postgres用户的默认密码为空,这时就需要在PostgreSQL安装完成后,重新设置其密码。这时可以通过以下两种方式修改postgres的密码:
1、使用postgres登录PostgreSQL数据库,使用SQL指令来修改密码。
ALTER USER postgres WITH PASSWORD 'your pwd';
2、通过linux指令来修改postgres账户密码
$ sudo passwd -d postgres
$ sudo -u postgres passwd
New password:
Retype new password:
passwd: all authentication tokens updated successfully
四、卸载老版本的PostgreSQL
如果你的ubuntu服务器可能已经存在老版本的PostgreSQL,你可以通过以下指令来查看其版本:
# postgres方式
$ postgres --version
# pg_config方式
$ pg_config|grep VERSION
# pg_controldata方式
pg_controldata --version
如果你要在安装新版本前卸载原来的PostgreSQL,请首先做好数据备份,然后通过下列指令来卸载老版本的PostgreSQL:
# 删除相关安装
$ sudo apt-get --purge remove postgresql\*
# 删除配置及相关文件
$ sudo rm -r /etc/postgresql/
$ sudo rm -r /etc/postgresql-common/
$ sudo rm -r /var/lib/postgresql/
# 删除用户和所有组
$ sudo userdel -r postgres
$ sudo groupdel postgres