postgresql18.1部署

目录

一、环境设置

二、安装

三、配置

四、启动

五、设置开机自启


一、环境设置

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
相关推荐
万邦科技Lafite1 小时前
京东商品详情 API 接口全面讲解
java·数据库·redis·api·电商开放平台
无风听海1 小时前
MongoDB GridFS 一些处理细节解析
数据库·mongodb
青云计划1 小时前
Mysql
数据库·mysql
SelectDB1 小时前
Agent 应用范式下,企业数据基础设施如何演进?
大数据·数据库·数据分析
杜子不疼.1 小时前
【C++ AI 大模型接入 SDK】 - 环境搭建
开发语言·数据库·c++
qq_283720051 小时前
Milvus 向量数据库全链路优化实战教程
数据库·milvus
m0_702036531 小时前
CSS如何兼容新旧方案结合响应式容器查询
jvm·数据库·python
ClouGence2 小时前
我们做了个疯狂的决定,把 CloudDM 全部开源了
数据库·后端·mysql
努力努力再努力wz2 小时前
【Qt入门系列】深入理解信号与槽:从事件响应到自定义信号机制
c语言·开发语言·数据结构·数据库·c++·qt·mysql