1. 联网rpm安装
1.1.关闭服务
## 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
## 关闭 selinux
cat /etc/selinux/config
SELINUX=disabled
1.2.安装yum源
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
1.3.安装PostgreSQL
yum install -y postgresql15-server
1.4.初始化数据库
/usr/pgsql-15/bin/postgresql-15-setup initdb
1.5.启动数据库
systemctl enable postgresql-15
systemctl start postgresql-15
1.6.查看PostgreSQL是否安装
## 检查 PostgreSQL 是否已安装
rpm -qa | grep postgres## 查看 PostgreSQL 安装位置
rpm -qal | grep postgres
2. 离线rpm安装
2.1.下载rpm安装包
## 下载地址
https://yum.postgresql.org/15/redhat/rhel-7-x86_64/repoview/## 例如下载postgreSQL 15.4
libzstd-1.5.5-1.el7.x86_64.rpm
postgresql15-libs-15.4-1PGDG.rhel7.x86_64.rpm
postgresql15-15.4-1PGDG.rhel7.x86_64.rpm
postgresql15-server-15.4-1PGDG.rhel7.x86_64.rpm
2.2.初始化数据库
/usr/pgsql-15/bin/postgresql-15-setup initdb
2.3.启动数据库
systemctl enable postgresql-15.service
systemctl start postgresql-15.service
systemctl status postgresql-15.service
2.4.rpm安装注意事项
## 默认情况下,数据目录位置:/var/lib/pgsql/<version>/data## 默认创建 postgres 的 Linux 登录用户,用于连接数据库
[root@pg01 ~]# su - postgres
-bash-4.2$ psql
psql (15.4)
Type "help" for help.postgres=# \q --退出
3. 源码编译安装
源码编译总体分为三个过程:配置(configure)、编译(make)、安装(make install)。
3.1.下载源码包
## 下载地址
https://www.postgresql.org/ftp/source/v15.4/## 例如下载PostgreSQL 15.4
postgresql-15.4.tar.gz## 解压源码包
tar -zxvf postgresql-15.4.tar.gz
3.2.配置(configure)
## 先安装依赖包,在进行配置操作,不然后面检查会报错
yum install readline-devel zlib-devel -y## 开始配置
cd /tmp/pg_soft/postgresql-15.4
./configure --prefix=/pgsql15.4## 解释
--prefix:指定安装路径,将所有文件放置到该路径下
3.3.编译(make)
## make命令版本需要在gmake v3.8以上
make --version## 开始编译
cd /tmp/pg_soft/postgresql-15.4
make
3.4.安装(make install)
cd /tmp/pg_soft/postgresql-15.4
make install
3.5.创建数据目录和用户
## 用户
groupadd -g 1500 postgres
useradd -g 1500 -u 1501 postgres## 数据目录
mkdir -p /pgsql15.4/data
chown postgres:postgres -R /pgsql15.4
3.6.配置环境变量
vi /etc/profile
## 可执行文件位置
export PATH=/pgsql15.4/bin:$PATH
## 共享库位置
export LD_LIBRARY_PATH=/pgsql15.4/lib
## 数据目录
export PGDATA=/pgsql15.4/data
3.7.初始化数据库
注:必须使用非特权用户进行初始化。
su - postgres
cd /pgsql15.4/bin
initdb
3.8.启动/停止数据库
## 启动
pg_ctl -D /pgsql15.4/data start## 关闭
pg_ctl -D /pgsql15.4/data stop -m fast## 三种关闭模式
smart:等所有连接中止后,关闭数据库。如果客户端连接不终止,则无法关闭数据库。
fast:快速关闭数据库,断开客户端的连接,让已有的事务回滚,然后正常关闭数据库。相当于Oracle的imediate。
mmediate:立即关闭数据库,相当于数据库进程立即停止,直接退出,下次启动数据库需要进行恢复。相当于Oracle的abort。
3.9.安装contrib目录下的工具
## 以 basic_archive 归档模块为例
[root@postgresql postgresql-15.4]# ./configure
[root@postgresql postgresql-15.4]# cd contrib/basic_archive/
[root@postgresql basic_archive]# make
[root@postgresql basic_archive]# make install## 或手动将生成的.so文件复制到lib目录下
[root@postgresql basic_archive]# ll
total 48
-rw-r--r-- 1 1107 1107 10145 Aug 8 04:08 basic_archive.c
-rw-r--r-- 1 1107 1107 110 Aug 8 04:08 basic_archive.conf
-rw-r--r-- 1 root root 10528 Sep 26 13:32 basic_archive.o
-rwxr-xr-x 1 root root 14328 Sep 26 13:32 basic_archive.so
drwxrwxrwx 2 1107 1107 31 Aug 8 04:23 expected
-rw-r--r-- 1 1107 1107 639 Aug 8 04:08 Makefile
drwxrwxrwx 2 1107 1107 31 Aug 8 04:23 sql
[root@postgresql basic_archive]# cp basic_archive.so /pgsql15.4/lib/
[root@postgresql lib]# chown postgres:postgres basic_archive.so
4.安装后的配置
4.1.pg_hba.conf的配置
默认创建的数据库无法接受远程连接,因为默认情况下,pg_hba.conf中没有相应的配置项。
cd /pgsql15.4/data
vi pg_hba.conf
# IPv4 local connections:
host all all 0/0 md5pg_hba.conf文件是一个黑白名单的访问控制文件,可以控制允许哪些IP地址的机器访问数据库。
4.2.修改监听的IP和端口
cd /pgsql15.4/data
vi postgresql.conf
#listen_addresses = 'localhost'
listen_addresses = '*'
#port = 5432## 解释
listen_addresses = 'localhost' 为本地监听,也就是127.0.0.1,会造成远程主机无法登录数据库。
port = 5432 默认的数据库端口,如果一台机器安装了多个实例,就可以设置不同的端口。以上两个参数,需要重启数据库才能生效
4.3.数据库日志相关参数
## 打开日志收集(默认off)
logging_collector = on
## 日志目录
log_directory = 'log'
## 参数修改方式(alter system set或postgresql.conf)
alter system set logging_collector = on;
alter system set log_truncate_on_rotation = on;vi postgresql.conf
logging_collector = on
log_directory = 'log'## 日志切换和是否覆盖的三种方案
(1)每天生成一个新的日志文件
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = off
log_rotation_age = 1d
log_rotation_size = 0(2)每当日志写满一定的大小(如10M),则切换一个日志
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = off
log_rotation_age = 0
log_rotation_size = 10M(3)只保留最近7天的日志,进行循环覆盖
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
4.4. 内存参数
PostgreSQL安装完成后,可以修改以下主要的内存参数:
shared_buffer:共享内存的大小,主要用于共享数据块。默认值为32M。如果有足够的内存,可以设置为物理内存大小的四分之一。
work_mem:单个SQL执行时,以及排序、Hash Join时使用的内存,SQL运行完后,该内存就会被释放,默认为4M,work_mem设置大一些,会使排序操作效率更高。
对于一个复杂查询,可能会并行运行好几个排序或哈希操作,每个操作都会被允许使用这个参数指定的内存量,然后才会开始写数据到临时文件。
4.5.数据库状态查询
## 服务的运行状态和启动路径
pg_ctl status## 数据库运行状态
select state from pg_stat_activity where datname='postgres';
5.其他功能配置
5.1.如何使用较大的数据块(可选,一般默认即可)
如果要使用较大的数据块来提高I/O性能,只能在源码编译安装时,执行./configure脚本指定数据块的大小。
## 如指定32KB的数据块、WAL日志、64MB WAL日志文件大小
./configure --with-blocksize=32 --with-wal-blocksize=32 --with-wal-segsize=64
注:对于此时编译出来的PostgreSQL程序创建的PostgreSQL数据库,不能使用其他块大小的PostgreSQL程序启动。
5.2.Checksum功能(可选)
对于一些数据可靠性要求较高的场景,建议打开数据块的checksum校验功能。
通常用于校验数据在传输或存取过程中是否发生错误,以发现数据因磁盘、I/O损坏等原因造成的数据库异常。
开启checksum可能会对系统性能造成一定的影响。将为数据库中的所有对象计算校验和。
所有校验和失败都将在pg_stat_database视图中报告。
如果数据库较大,转换成checksum功能的数据库就需要比较长的一段时间,需要安排合理的停机时间。
## 检查是否打开checksum功能
此命令需要数据库处于关闭状态:
pg_checksums -c此命令在数据库开启状态可执行,0关闭,1打开:
pg_controldata -D /pgsql15.4/data |grep checksum## 打开checksum功能
初始化时:
initdb -k创建数据库后,先关闭数据库,然后打开该功能:
pg_checksums -e -P## 禁用checksum功能
pg_checksums -d