1 安装前准备工作

1.1 硬件要求

centos7.6及以上

内存1G以上

硬盘10G以上空闲空间

1.2 创建安装用户

在安装postgresql数据库管理系统时,安装用户对于安装路径需有读、写、执行的权限。

在linux系统中,需要以非root用户执行安装程序。

创建用户及用户组

#创建用户组(工作组)
groupadd postgres
#指定用户所属的群组 -g
useradd -g postgres postgres
#设置用户postgres的密码
passwd postgres
密码是:pgccc

1.3 创建安装目录并赋予目录权限

提前规划好数据库的安装目录、数据目录,并给目录赋予相应的权限

#创建安装目录 存放rpm包 源码包
mkdir -p /pgccc/app
#创建数据目录 初始化数据库备用
mkdir -p /pgccc/pgdata
#创建归档目录 备份目录
mkdir -p /pgccc/archive
mkdir -p /pgccc/backup
cd /
chown -R postgres:postgres pgccc
chmod -R 775 pgccc

1.4 linux系统优化配置

#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
#关闭selinux
#配置selinux 方法1 重启生效
vi /etc/selinux/config
把SELINUX=enforcing修改为SELINUX=disabled
#配置selinux 方法2 临时生效
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
getenforce

2 源码安装 postgresql

2.1 安装依赖

#安装依赖 设置yum下载(连网,下载,安装,保留安装包)
vim /etc/yum.conf
#默认保存路径
cachedir=/var/cache/yum/$basearch/$releasever
#参数 0 不保存
keepcache=1
#安装依赖
mkdir -p /home/rpm
yum -y install make gcc gcc-c++ gzip bzip2 tar readline readline-devel zlib zlib-devel openssl openssl-devel lz4 flex bison perl --downloaddir=/home/rpm

#如果上述安装依赖不能满足,则可选择性安装下列依赖(一般上述依赖即可,无需下列依赖)。

yum -y install gcc gcc-c++ epel-release llvm5.0 llvm5.0-devel clang libicu-devel
perl-ExtUtils-Embed zlib-devel openssl openssl-devel pam-devel libxml2-devel libxslt-devel
openldap-devel systemd-devel tcl-devel python-devel
yum install -y llvm5.0 llvm5.0-devel

2.2 源码安装包获取

#生产内网环境,需要先行下载源码包,上传到linux

#互联网环境(测试环境等),可通过wget方式获取源码包(其他版本的源码包也可从此路径获取)
wget https://ftp.postgresql.org/pub/source/v14.7/postgresql-15.2.tar.gz
#其他版本的源码包也可从此路径获取 14.7
wget https://ftp.postgresql.org/pub/source/v14.7/postgresql-14.7.tar.gz
#其他版本的源码包也可从此路径获取 13.3
wget https://ftp.postgresql.org/pub/source/v13.3/postgresql-13.3.tar.gz

2.3 以root用户执行以下步骤获取、解压、配置(这里安装14.7)

#指定文件存放目录下载 或 cd /pgccc/app [url]
#源码安装包链接  https://www.postgresql.org/ftp/source/v15.2/
wget -P /pgccc/app https://ftp.postgresql.org/pub/source/v14.7/postgresql-14.7.tar.gz
#解压源码包
tar -zxvf postgresql-14.7.tar.gz
#cd到解压目录
cd postgresql-14.7
#赋予执行权限
chmod +x configure
#查看帮助选项
./configure --help
#不推荐在生产环境中使用 --enable-cassert
#安装
./configure --prefix=/pgccc/app/14.7 
#参数说明:
# --prefix 设置数据库的安装路径 默认[/usr/local/pgsql]
# --with-pgport 设置默认的端口号 这里默认5432,不做其他设置
# 其他有需要设置的参数,可通过 ./configure --help 获取帮助

2.4 编译安装 root下执行

make
make install

# 在安装目录 /pgccc/app/14.7 查看是否有下例4个文件,判断是否成功。

[root@pgccc ~]# cd /pgccc/app/14.7/
[root@pgccc 14.7]# ll
total 12
drwxr-xr-x 2 root root 4096 Mar 31 17:27 bin
drwxr-xr-x 4 root root 4096 Mar 31 17:27 include
drwxr-xr-x 4 root root 4096 Mar 31 17:27 lib
drwxr-xr-x 3 root root   24 Mar 31 17:27 share
[root@pgccc 14.7]#

2.5 配置环境变量

#postgresql的环境变量涉及数据库初始化,务必配置正确。

su - postgres
vim ~/.bash_profile
#pg14 config
#指向端口
export PGPORT=1521
#指向PG可执行程序的路径(安装路径)
export PGHOME=/pgccc/app/14.7
#指向数据库目录
export PGDATA=/pgccc/pgdata
export PG_DATA=$PGDATA
export PATH=$PGHOME/bin:$PATH
export MANPATH=$PGHOME/share/man:$MANPATH
export LANG=en_US.UTF-8
export DATE='date +"%Y%m%d%H%M"'
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PGUSER=postgres
export PGDATABASE=postgres

##别名
alias pg_start='pg_ctl start -D $PGDATA'
alias pg_stop='pg_ctl stop -D $PGDATA'
#环境变量生效
source /.bash_profile

2.6 启动配置(可选配置)

# 使用 system 进行管理:
vim /usr/lib/systemd/system/postgresql-14.service
添加内容:
[Unit]
Description=PostgreSQL 14 database server
Documentation=https://www.postgresql.org/docs/14/static/
After=syslog.target
After=network.target

[Service]
Type=simple

User=postgres
Group=postgres

Environment=PGDATA=/pgccc/pgdata/

OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0

ExecStart=/pgccc/app/14.7/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT

TimeoutSec=0
TimeoutStartSec=0
TimeoutStopSec=1h

[Install]
WantedBy=multi-user.target
# 加载 system 配置:
systemctl daemon-reload
# 使用 systemctl 启动:
#启动
systemctl start postgresql-14.service
#关闭
systemctl stop postgresql-14.service
#开机启动
systemctl enable postgresql-14.service

2.7 初始化数据库 initdb

su - postgres
initdb -D $PGDATA -U postgres
#如果环境变量中,已经设置PGDATA, -D 选项,非必选项
initdb $PGDATA
#WAL 段尺寸按 16MB 划分(--with-wal-segsize,单位为 M,默认为 16MB),可以设置为最大 1G

2.8 配置数据库参数

#初始化数据库完成后 /pgccc/pgdata 才有相关参数设置项
#修改监听 端口号
#监听所有用户,默认监听本地localhost
#数据库默认端口号 5432
vim /pgccc/pgdata/postgresql.conf
# - Connection Settings -

listen_addresses = '*'                  # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)

2.9 pg_ctl 手动启动数据库

#切换到 postgresql 用户
su - postgresql
#启动数据库
pg_ctl -D $PGDATA -U postgres -l logfile start
#登录数据库控制台
psql
#查看连接
\conninfo
You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "1521".
#退出数据库控制台
\q

安装完成。

2.10 查看数据库版本

[postgres@pgccc pgdata]$ psql -version
psql (14.7)
Type "help" for help.

postgres=# select version();
                                                 version                                                 
---------------------------------------------------------------------------------------------------------
 PostgreSQL 14.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)

postgres=#

2.12 查看正在运行的postgresql

ps -axjf | grep postgresql

[postgres@pgccc01 ~]$ ps -axjf | grep postgres
  1797   1847   1847   1797 pts/0      1900 S        0   0:00  |       \_ su - postgres
  1848   1901   1900   1797 pts/0      1900 S+    1001   0:00  |               \_ grep --color=auto postgres
     1   1889   1889   1889 ?            -1 Ss    1001   0:00 /pgccc/app/14.7/bin/postgres -D /pgccc/pgdata
  1889   1891   1891   1891 ?            -1 Ss    1001   0:00  \_ postgres: checkpointer
  1889   1892   1892   1892 ?            -1 Ss    1001   0:00  \_ postgres: background writer
  1889   1893   1893   1893 ?            -1 Ss    1001   0:00  \_ postgres: walwriter
  1889   1894   1894   1894 ?            -1 Ss    1001   0:00  \_ postgres: autovacuum launcher
  1889   1895   1895   1895 ?            -1 Ss    1001   0:00  \_ postgres: stats collector
  1889   1896   1896   1896 ?            -1 Ss    1001   0:00  \_ postgres: logical replication launcher
[postgres@pgccc01 ~]$
netstat -nutlp | grep 1521
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:1521            0.0.0.0:*               LISTEN      7774/postgres       
tcp6       0      0 :::1521                 :::*                    LISTEN      7774/postgres

3.卸载 postgresql

#卸载 PostgreSQL
netstat -nlt
pkill postgres
pkill postmaster
#删除自启动相关
systemctl stop postgresql-14.service
rm -rf /etc/systemd/system/postgresql*
rm -rf /usr/lib/systemd/system/postgresql*
#删除监听相关(如果存在)
rm -rf /tmp/.s.PGSQL.1521.lock
#删除 data archive baupups app目录
cd /
rm -rf pgccc/*
#删除环境变量中的相关参数配置
vim ~/.bash_profile
source ~/.bash_profile
#删除用户组
groupdel postgres
userdel postgres
#删除家目录下的用户目录 postgres
rm -rf /home/*
find / -name post*