- 安装路径:
/usr/local/postgres16 - 数据存放目录:
/data/postgres16/data - 日志目录:
/data/postgres16/log - 配套:源码编译 pgvector 向量插件,适配 SpringAI 向量库
一、安装编译依赖环境
# 安装开发工具组 + PG编译所需全部依赖sudo dnf groupinstall -y ”Development Tools”sudo dnf install -y readline-devel zlib-devel openssl-devel libxml2-devel libxslt-devel bzip2-devel libicu-devel
二、创建系统运行用户 & 目录结构
# 创建专用运行用户,禁止root运行数据库sudo useradd -m postgres# 设置postgres用户的密码sudo passwd postgres# 程序目录、数据目录、日志目录sudo mkdir -p /usr/local/postgres16sudo mkdir -p /data/postgres16/data /data/postgres16/log# 赋予postgres用户全部权限sudo chown -R postgres:postgres /usr/local/postgres16sudo chown -R postgres:postgres /data/postgres16
三、下载 PostgreSQL16 源码、编译安装
# 进入工作目录cd /opt# 下载PG16.4源码包sudo wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gzsudo tar -zxvf postgresql-16.4.tar.gzcd postgresql-16.4# 配置编译参数sudo ./configure \--prefix=/usr/local/postgres16 \--with-openssl \--with-libxml \--with-zlib \--with-icu# 多核编译加速sudo make -j$(nproc)# 安装至指定目录sudo make install# 安装系统uuid依赖库(扩展需要)sudo dnf install e2fsprogs-devel libuuid-devel -ymake clean./configure --prefix=/usr/local/postgres16 --with-uuid=e2fs --with-openssl --with-zlib --with-readline# 确认编译扩展所需依赖齐全sudo dnf install e2fsprogs-devel libuuid-devel openssl-devel readline-devel zlib-devel gcc gcc-c++ make -y# 进入contrib包cd /opt/software/postgresql-16.4/contrib# 编译安装所有扩展make -j$(nproc)make install# 检验文件是否生成成功,可以正常看到文件,说明部署完成ls /usr/local/postgres16/share/extension/uuid-ossp.controlls /usr/local/postgres16/share/extension/hstore.control
四、配置系统全局环境变量(任意位置执行 psql/pg_ctl)
sudo tee -a /etc/profile <<'EOF'# Postgres16 Envexport PGHOME=/usr/local/postgres16export PATH=$PATH:$PGHOME/binexport PGDATA=/data/postgres16/dataEOF# 全局生效source /etc/profile# 验证版本psql --version
五、初始化数据库实例(仅首次执行一次)
# 初始化数据库使用绝对路径sudo -u postgres /usr/local/postgres16/bin/initdb -D /data/postgres16/data -E UTF8 --locale=en_US.UTF-8
参数说明:
-E UTF8--locale=en_US.UTF-8
六、修改 PostgreSQL 核心配置(远程访问、日志、性能)
6.1 修改 postgresql.conf
sudo -u postgres vim /data/postgres16/data/postgresql.conf
修改以下配置项:
# 监听所有网卡,允许局域网/公网访问listen_addresses = '*'# 日志存放路径log_directory = '/data/postgres16/log'log_filename = 'postgresql-%Y-%m-%d.log'logging_collector = on
6.2 修改访问权限 pg_hba.conf
sudo vim /data/postgres16/data/pg_hba.conf
文件最底部添加全网段密码访问规则
# 本地访问host all all 127.0.0.1/32 trusthost all all ::1/128 trust# 所有IP远程连接host all all 0.0.0.0/0 trust
七、编写 systemd 系统服务(systemctl 统一管理启停)
sudo vim /etc/systemd/system/postgres16.service
粘贴如下内容:
[Unit]Description=PostgreSQL 16 Database ServerAfter=network.target[Service]Type=forkingUser=postgresGroup=postgres# 启动命令ExecStart=/usr/local/postgres16/bin/pg_ctl start -D /data/postgres16/data -l /data/postgres16/log/startup.log# 停止命令ExecStop=/usr/local/postgres16/bin/pg_ctl stop -D /data/postgres16/data -m fast# 重载配置ExecReload=/usr/local/postgres16/bin/pg_ctl reload -D /data/postgres16/dataRestart=on-failureRestartSec=3[Install]WantedBy=multi-user.target
八、加载服务、开机自启、启动 PG
sudo systemctl daemon-reload# 设置开机自启sudo systemctl enable postgres16# 启动数据库sudo systemctl start postgres16# 查看运行状态sudo systemctl status postgres16
九、设置超级用户 postgres 密码
# 登录数据库sudo -u postgres psql# 免密进入数据库sudo -u postgres /usr/local/postgres16/bin/psql# 设置密码(自行修改密码)ALTER USER postgres WITH PASSWORD 'Aa#123456';# 退出\q
十、把本地认证改回安全的scram-sha-256
再次编辑 pg_hba.conf
sudo vim /data/postgres16/data/pg_hba.conf# 把所有的trust改为scram-sha-256host all all 127.0.0.1/32 scram-sha-256host all all ::1/128 scram-sha-256host all all 0.0.0.0/0 scram-sha-256
重载配置
systemctl reload postgres16
此时再次登录数据库,就需要输入密码了。
十一、源码编译安装 pgvector(向量插件,SpringAI 必装)
cd /opt# 下载pgvector源码sudo wget https://github.com/pgvector/pgvector/archive/refs/tags/v0.8.0.tar.gz -O pgvector-0.8.0.tar.gzsudo tar -zxvf pgvector-0.8.0.tar.gzcd pgvector-0.8.0# 指定PG的bin目录编译sudo make PG_CONFIG=/usr/local/postgres16/bin/pg_configsudo make PG_CONFIG=/usr/local/postgres16/bin/pg_config install
在数据库启用 vector 插件
sudo -u postgres psqlCREATE EXTENSION IF NOT EXISTS vector;# 查看pgvector版本SELECT extversion FROM pg_extension WHERE extname='vector';\q
登录数据库创建所需扩展
su - postgres# 切换到业务数据库psql -d 数据库名称CREATE EXTENSION IF NOT EXISTS hstore;CREATE EXTENSION IF NOT EXISTS ”uuid-ossp”;CREATE EXTENSION IF NOT EXISTS vector;# 无报错就是成功\q
十二、防火墙放行 5432 端口
sudo firewall-cmd --add-port=5432/tcp --permanentsudo firewall-cmd --reload
常用运维命令汇总
# 启停服务systemctl start postgres16systemctl stop postgres16systemctl restart postgres16# 实时日志查看tail -f /data/postgres16/log/postgresql-$(date +%Y-%m-%d).log# 客户端连接psql -h 127.0.0.1 -U postgres -W
一键卸载(需要重装时执行)
systemctl stop postgres16systemctl disable postgres16rm -rf /etc/systemd/system/postgres16.servicesystemctl daemon-reloadrm -rf /usr/local/postgres16 /data/postgres16 /opt/postgresql-16.4 /opt/pgvector-0.8.0userdel -r postgres