- 下载pg16的rpm包(我这里用的是centos8系统),需要下载下面依赖包,下载后传到Linux环境
postgresql16-16.1-2PGDG.rhel8.x86_64.rpm
postgresql16-libs-16.1-2PGDG.rhel8.x86_64.rpm
postgresql16-server-16.1-2PGDG.rhel8.x86_64.rpm
- 手动安装
postgresql16-libs-16.1-2PGDG.rhel8.x86_64.rpm
postgresql16-16.1-2PGDG.rhel8.x86_64.rpm
postgresql16-server-16.1-2PGDG.rhel8.x86_64.rp
- 安装之后就可以使用systemctl来初始化数据库了,官方的步骤是
/usr/pgsql-16/bin/postgresql-16-setup initdb
systemctl enable postgresql-16
systemctl start postgresql-16
这样数据库就装上了,默认用户是postgres,默认数据目录是/var/lib/pgsql/data
但是如果不想使用默认的数据目录和用户,可以自定义初始化并安装,我的实现是这样的
1. 创建数据目录
mkdir /usr/local/pgdata
2. 创建管理员用户pgadmin
useradd pgadmin
3. 修改目录权限
chown pgadmin:pgadmin /usr/local/pgdata -R
chown pgadmin:pgadmin /usr/pgsql16 -R
4. 切换到pgadmin用户
su - pgadmin
5. 配置环境变量并写入.bashrc中
export PATH=/usr/pgsql-16/bin:$PATH
export PGDATA=/usr/pgdata/
export PGPORT=5432
export PGDATABASE=postgres
export PGUSER=pgadmin
6. 初始化数据库
initdb
7. 启动数据库
pg_ctl start -D $PGDATA
- 创建个人数据库和用户
create database testdb;
create role myuser with login password 'passwd';
alter database testdb owner to myuser;
- 配置访问权限,实现其他主机远程访问
1. 修改监听地址,修改postgresql.conf文件的listen_address配置
vim $PGDATA/postgresql.conf
listen_address='*'
2. 修改pg_hba.conf文件,增加下列两行
host all all 0.0.0.0/0 md5
host all all ::1/128 md5
3. 使配置生效
pg_ctl reload
pg_hba.conf文件中的匹配原则是从文件头开始匹配,匹配到第一条符合要求的规则后就不会再继续匹配。
- 配置完成之后就可以通过客户端工具连接了
接下来就可以创建表,开启愉快的数据库之旅了
常见问题
- 安装完之后,pg_hba.conf也配置完之后,psql -h远程还是连接不上,报错
[pgadmin@localhost pgdata]$ psql -h 192.168.134.128
psql: error: connection to server at "192.168.134.128", port 5432 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections
查看监听的端口:
netstat -tlunp|grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 151329/postgres
说明监听的是本地端口,不是主机IP地址
解决: 修改postgresql.conf文件
将listen_address='**'
- 手动部署完之后启动失败,报错
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that sock
1. 确认目录是否存在,不存在的话就创建
2. 确认当前的数据库用户是否有访问/var/run/postgresql的权限,没有就赋权
mkdir -p /var/run/postgresql
chown pgadmin:pgadmin /var/run/postgresql -R
注意: /var/run下的目录或文件,每次系统重启后会清空的,所以系统重启后,启动数据库之前,要先确认该目录是否存在。