目录
一、环境设置
bash
# 永久关闭防火墙
systemctl disable firewalld
# 永久关闭Selinux
vi /etc/sysconfig/selinux
设置 SELINUX=disabled
# yum安装检查相关的依赖
yum install gcc make bison flex gcc-c++ readline readline-devel zlib zlib-devel perl perl-devel python python-devel openssl openssl-devel
二、安装
bash
# 安装脚本赋权
chmod 777 postgresql-18.1.sh
# 确保安装脚本正常执行,安装过程中会提示修改超级管理员密码
./postgresql-18.1.sh
postgresql-18.1.sh安装脚本如下:
#!/bin/sh
#安装操作系统时要注意的
#该脚本都是以root登陆后直接把 pg 安装文件和安装脚本传输到root的默认路径下去执行的。
#执行脚本 : 1) 要把执行该脚本的权限放开 (chmod 777 installpostgresql.sh )
# 2) 执行脚本语句: ./installpostgresql.sh
#
#下面是几个要设置的参数一定要仔细设置好了!!!!
#----------------参考命令--------------------------
# 启动数据库 /opt/pg18.1/bin/pg_ctl -D /data/pg181/data -l /data/pg181/data/logfile start
# 关闭数据库 /opt/pg18.1/bin/pg_ctl -D /opt/pg18.1/data stop -m fast
#------------------------------------------
################################设置变量#############################################
#解压之后的文件夹,在加压之前需把以前的删除!!(需要注意)
rmdir=postgresql-18.1;
#需要解压文件:(需要注意)
unrar=postgresql-18.1.tar.gz;
#设置pg 的安装路径(需要注意)
pginstadir=/opt/pg18.1;
#设置操作系统PG用户组和用户信息,这里用户组和用户都用一个变量的。图省事@@呵呵(需要注意)
grur=pguser;
#数据库超级用户名,超级用用户名不和操作系统名一样的。
pgdbauser='pgdba';
#数据库集群名字(需要注意)
dbcus=data;
###############################设置变量结束##########################################
###############################系统设置以及pg安装####################################
#判断一下 在安装pg数据库之前,已经有安装文件夹了。那么要退出!!!
if [ -d $pginstadir ];
then
printf "err-001 你要创建的文件夹:$pginstadir 已经存在,请仔细检查 程序将自动退出";
exit;
fi
#临时变量当前路径
mypath=$PWD;
#在加压之前需要删除同名的文件夹!!
rm -rf ./$rmdir;
#需要解压文件:postgresql-9.1.3.tar.gz
tar -zxvf ./$unrar;
#创建安装文件夹
mkdir -p $pginstadir;
#添加用户组与用户名设置这个地方需要人为的设置 密码和普通的修改密码一样
groupadd $grur;
useradd $grur -g $grur;
#设置组默认路径
chown -R $grur:$grur $pginstadir;
#进入安装文件夹
cd $mypath"/"$rmdir;
#配置参数
#--with-segsize=10 设置表文件最大10GB,超过10GB就自动分文件,默认1GB
#--with-wal-segsize=64 WAL日志文件大小,默认16MB
./configure --prefix=$pginstadir --with-segsize=10 --with-wal-segsize=64
#编译
make ;
#安装
make install;
###############################系统设置以及pg安装结束##############################
###############################数据库设置##########################################
#切换到数据库用户,初始化群数据库 dbcus 设置 超级用户名 和超级用户密码
inidb="$pginstadir/bin/initdb "-E" "UTF8" "-D" "$pginstadir"/"$dbcus" "-U" "$pgdbauser" "-W;
printf "$inidb \n";
su - $grur -c "$inidb";
# 删除解压目录
cd $mypath
rm -rf ./$rmdir
echo ">>> 源码编译目录已自动清理完成"
##启动数据库
#stardb="$pginstadir/bin/postgres "-D" "$pginstadir"/"$dbcus;
#su - $grur -c "$stardb" & > /dev/null;
#
#sleep 5000;
#while true
#do
# if [ -f $pginstadir"/"$dbcus"/"postmaster.pid ];
# then
# #在 数据库群 dbcus 下初始化一个数据库dbnam
# credb="$pginstadir/bin/createdb $dbnam -p 5432";
# su - $grur -c "$credb" & > /dev/null;
# break;
# else
# printf " warr-001 没有发现postmaster.pid 进程,稍等5秒钟再去尝试创建数据库!!!";
# sleep 5000;
# fi
#done
#
#sleep 10000;
##关闭数据库数据库
#stopdb="$pginstadir/bin/pg_ctl "stop -m f -D" "$pginstadir"/"$dbcus;
#su - $grur -c "$stopdb" & > /dev/null;
################################数据库设置结束######################################
#
printf "#####数据库安装结束 下面是基本信息###### \n";
printf "postgresql 安装路径: $pginstadir \n";
printf "postgresql 用户组和用户信息: $grur \n";
printf "postgresql 数据库超级用户名: $pgdbauser \n";
printf "postgresql 数据库集群名: $dbcus \n";
printf "数据库状态: stop";
printf "数据库安装结束!!!";
#---------------------------------------------------------------------------------
三、配置
bash
# 修改配置文件
vi /opt/pg18.1/data/postgresql.conf
# 开启远程访问
listen_addresses = '*'
# 端口
port = 5432
# 最大连接数
max_connections = 300
# 数据库全局共享缓冲区(内存 25% ~ 50%)
# 服务器 64G 内存 → shared_buffers = 16000MB
# 服务器 128G 内存 → shared_buffers = 32000MB
# 服务器 256G 内存 → shared_buffers = 64000MB
shared_buffers = 128MB
# 临时表、临时查询缓冲区,每个连接独立占用
temp_buffers = 64MB
# 单个SQL排序、分组、哈希JOIN内存,单次排序独享
work_mem = 64MB
# VACUUM、建索引、清理碎片专用大内存
maintenance_work_mem = 1024MB
# 不限制数据库临时文件大小
temp_file_limit = -1
# 启用日志
logging_collector = on
# 日志目录(不配置默认数据目录下log文件夹)
#log_directory = '/opt/pg18.1/data/log'
# 记录超过3秒的慢SQL
log_min_duration_statement = 3000
# 日志前缀格式:应用名-用户名-客户端IP-毫秒时间-进程PID
log_line_prefix = '%a-%u-%h-%m-%p '
# 只记录建表、改表、删表、加索引等结构变更语句,不记录普通增删改查
log_statement = 'ddl'
# 记录使用临时文件大于3MB的SQL
log_temp_files = 3000
# 配置访问白名单
vi /opt/pg18.1/data/pg_hba.conf
# scram-sha-256 = 必须输正确密码才能登录(新一代加密算法,PostgreSQL 11 ~ 18 推荐使用)
# md5 = 必须输正确密码才能登录(老一代加密算法,不安全、已经被淘汰)
# trust = 无密码直接登录
# 添加单个IP放行
host all all 192.168.1.104/32 scram-sha-256
# 放行所有IP地址,密码验证登录
host all all 0.0.0.0/0 scram-sha-256
# 配置白名单后需要重载生效,不用重启数据库(pguser用户执行)
su - pguser
/opt/pg18.1/bin/pg_ctl -D /opt/pg18.1/data reload
四、启动
bash
# 切换到 pguser 用户
su - pguser
# 启动数据库(pguser用户启动)
/opt/pg18.1/bin/pg_ctl -D /opt/pg18.1/data -l /opt/pg18.1/data/logfile start
# 查看状态
/opt/pg18.1/bin/pg_ctl -D /opt/pg18.1/data status
# 连接测试
# 使用local访问,不需要输入密码
/opt/pg18.1/bin/psql -U pgdba -d postgres
# 使用本机IP访问,需要输入密码
/opt/pg18.1/bin/psql -h 192.168.1.120 -p 5432 -U pgdba -d postgres
# 重启(pguser用户启动)
/opt/pg18.1/bin/pg_ctl -D /opt/pg18.1/data restart
# 停止数据库(pguser用户启动)
/opt/pg18.1/bin/pg_ctl -D /opt/pg18.1/data stop -m fast
# 常用命令
\password:修改密码
\l:列出所有数据库
\c:切换数据库
\d:列出当前库中所有表、视图、序列
\dn:列出所有schema
\du:列出所有用户
\i:执行sql脚本
\q:退出psql命令行
五、设置开机自启
bash
# 添加pg服务
vi /etc/systemd/system/postgresql-18.1.service
[Unit]
Description=PostgreSQL 18.1 database server
After=network.target
[Service]
Type=forking
User=pguser
Group=pguser
Environment=PGDATA=/opt/pg18.1/data
ExecStart=/opt/pg18.1/bin/pg_ctl start -D ${PGDATA} -l ${PGDATA}/logfile
ExecStop=/opt/pg18.1/bin/pg_ctl stop -D ${PGDATA} -m fast
ExecReload=/opt/pg18.1/bin/pg_ctl reload -D ${PGDATA}
TimeoutSec=300
Restart=no
[Install]
WantedBy=multi-user.target
# 设置开机自启
systemctl daemon-reload
systemctl enable postgresql-18.1
systemctl start postgresql-18.1
systemctl status postgresql-18.1