## 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
## 关闭 selinux
cat /etc/selinux/config
SELINUX=disabled
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql15-server
/usr/pgsql-15/bin/postgresql-15-setup initdb
systemctl enable postgresql-15
systemctl start postgresql-15
## 检查 PostgreSQL 是否已安装
rpm -qa | grep postgres
## 查看 PostgreSQL 安装位置
rpm -qal | grep postgres
## 下载地址
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
/usr/pgsql-15/bin/postgresql-15-setup initdb
systemctl enable postgresql-15.service
systemctl start postgresql-15.service
systemctl status postgresql-15.service
## 默认情况下,数据目录位置:/var/lib/pgsql//data
## 默认创建 postgres 的 Linux 登录用户,用于连接数据库
[root@pg01 ~]# su - postgres
-bash-4.2$ psql
psql (15.4)
Type "help" for help.
postgres=# \q --退出
源码编译总体分为三个过程:配置(configure)、编译(make)、安装(make install)。
## 下载地址
https://www.postgresql.org/ftp/source/v15.4/
## 例如下载PostgreSQL 15.4
postgresql-15.4.tar.gz
## 解压源码包
tar -zxvf postgresql-15.4.tar.gz
## 先安装依赖包,在进行配置操作,不然后面检查会报错
yum install readline-devel zlib-devel -y
## 开始配置
cd /tmp/pg_soft/postgresql-15.4
./configure --prefix=/pgsql15.4
## 解释
--prefix:指定安装路径,将所有文件放置到该路径下
## make命令版本需要在gmake v3.8以上
make --version
## 开始编译
cd /tmp/pg_soft/postgresql-15.4
make
cd /tmp/pg_soft/postgresql-15.4
make install
## 用户
groupadd -g 1500 postgres
useradd -g 1500 -u 1501 postgres
## 数据目录
mkdir -p /pgsql15.4/data
chown postgres:postgres -R /pgsql15.4
vi /etc/profile
## 可执行文件位置
export PATH=/pgsql15.4/bin:$PATH
## 共享库位置
export LD_LIBRARY_PATH=/pgsql15.4/lib
## 数据目录
export PGDATA=/pgsql15.4/data
注:必须使用非特权用户进行初始化。
su - postgres
cd /pgsql15.4/bin
initdb
## 启动
pg_ctl -D /pgsql15.4/data start
## 关闭
pg_ctl -D /pgsql15.4/data stop -m fast
## 三种关闭模式
smart:等所有连接中止后,关闭数据库。如果客户端连接不终止,则无法关闭数据库。
fast:快速关闭数据库,断开客户端的连接,让已有的事务回滚,然后正常关闭数据库。相当于Oracle的imediate。
mmediate:立即关闭数据库,相当于数据库进程立即停止,直接退出,下次启动数据库需要进行恢复。相当于Oracle的abort。
## 以 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
默认创建的数据库无法接受远程连接,因为默认情况下,pg_hba.conf中没有相应的配置项。
cd /pgsql15.4/data
vi pg_hba.conf
# IPv4 local connections:
host all all 0/0 md5
pg_hba.conf文件是一个黑白名单的访问控制文件,可以控制允许哪些IP地址的机器访问数据库。
cd /pgsql15.4/data
vi postgresql.conf
#listen_addresses = 'localhost'
listen_addresses = '*'
#port = 5432
## 解释
listen_addresses = 'localhost' 为本地监听,也就是127.0.0.1,会造成远程主机无法登录数据库。
port = 5432 默认的数据库端口,如果一台机器安装了多个实例,就可以设置不同的端口。
以上两个参数,需要重启数据库才能生效
## 打开日志收集(默认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
PostgreSQL安装完成后,可以修改以下主要的内存参数:
shared_buffer:共享内存的大小,主要用于共享数据块。默认值为32M。如果有足够的内存,可以设置为物理内存大小的四分之一。
work_mem:单个SQL执行时,以及排序、Hash Join时使用的内存,SQL运行完后,该内存就会被释放,默认为4M,work_mem设置大一些,会使排序操作效率更高。
对于一个复杂查询,可能会并行运行好几个排序或哈希操作,每个操作都会被允许使用这个参数指定的内存量,然后才会开始写数据到临时文件。
## 服务的运行状态和启动路径
pg_ctl status
## 数据库运行状态
select state from pg_stat_activity where datname='postgres';
如果要使用较大的数据块来提高I/O性能,只能在源码编译安装时,执行./configure脚本指定数据块的大小。
## 如指定32KB的数据块、WAL日志、64MB WAL日志文件大小
./configure --with-blocksize=32 --with-wal-blocksize=32 --with-wal-segsize=64
注:对于此时编译出来的PostgreSQL程序创建的PostgreSQL数据库,不能使用其他块大小的PostgreSQL程序启动。
对于一些数据可靠性要求较高的场景,建议打开数据块的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