Rocky Linux 8.10 编译安装 PostgreSQL 17.11

Rocky Linux 8.10 编译安装 PostgreSQL 17.11

一、下载源码包

bash 复制代码
https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.gz

1.1系统初始化和优化配置

bash 复制代码
#关闭防火墙和SELinux等

#内核参数优化
# vim /etc/sysctl.conf
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 50100 64128000 50100 1280
fs.file-max = 7672460
net.ipv4.ip_local_port_range = 9000 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

# sysctl -p

# vim /etc/security/limits.conf
* - nofi1e 100000
* - nproc 100000
* - mem1ock 60000

二、安装依赖包

bash 复制代码
#通过 devtoolset 安装 GCC 12
# 1. 启用 CRB 仓库
dnf config-manager --set-enabled powertools

# 2. 安装 SCL
dnf install -y scl-utils

# 3. 安装 gcc-toolset-12 主包(包含 gcc 和 g++)
dnf install -y gcc-toolset-12

# 4. 临时启用
[root@rocky8 ~]#scl enable gcc-toolset-12 bash

# 5. 验证
[root@rocky8 ~]#scl enable gcc-toolset-12 "gcc --version"
gcc (GCC) 12.2.1 20221121 (Red Hat 12.2.1-7)

#永久启用(写入 ~/.bashrc)
echo "source scl_source enable gcc-toolset-12" >> ~/.bashrc
source ~/.bashrc

#后续所有编译操作前必须激活高版本 GCC:
[root@rocky8 ~]#scl enable gcc-toolset-12 bash

三、安装编译依赖

bash 复制代码
# 以 root 用户执行(激活高版本 GCC 后)
scl enable gcc-toolset-12 bash

# 基础编译工具
[root@rocky8 ~]#dnf install -y gcc gcc-c++ make readline-devel zlib-devel flex bison libxml2-devel libxslt-devel openssl-devel perl perl-devel perl-ExtUtils-Embed python3-devel tcl-devel tcl openldap-devel pam-devel systemd-devel uuid-devel libicu-devel numactl-devel cracklib-devel cracklib-dicts gettext libzstd-devel lz4-devel libcurl-devel libuuid-devel
    
# 验证关键依赖
[root@rocky8 ~]#rpm -q readline-devel zlib-devel flex bison libxml2-devel libxslt-devel openssl-devel perl-devel perl-ExtUtils-Embed python3-devel tcl-devel openldap-devel pam-devel systemd-devel uuid-devel libicu-devel libzstd-devel libuuid-devel

四、下载 PostgreSQL 17.11 源码

bash 复制代码
[root@rocky8 ~]#cd /usr/local/src
[root@rocky8 src]#dnf -y install aria2
[root@rocky8 src]#aria2c -x 16 -s 16 -c -k 1M --max-download-limit=0 https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.gz
[root@rocky8 src]#ll
total 27732
-rw-r--r-- 1 root root 28397423 Aug 18 12:46 postgresql-17.11.tar.gz
[root@rocky8 src]#tar xf postgresql-17.11.tar.gz
[root@rocky8 src]#cd postgresql-17.11/

五、configure 配置

bash 复制代码
#激活高版本 GCC
[root@rocky8 postgresql-17.11]#scl enable gcc-toolset-12 bash

[root@rocky8 postgresql-17.11]#gcc --version
gcc (GCC) 12.2.1 20221121 (Red Hat 12.2.1-7)

5.1执行 configure

bash 复制代码
[root@rocky8 postgresql-17.11]#./configure \
    --prefix=/apps/pgsql \
    --with-pgport=5432 \
    --with-openssl \
    --with-perl \
    --with-python \
    --with-tcl \
    --with-libxml \
    --with-libxslt \
    --with-ldap \
    --with-pam \
    --with-systemd \
    --with-uuid=e2fs \
    --enable-nls \
    --with-icu \
    --with-zstd \
    --with-lz4 \
    --with-blocksize=32 \
    CC=gcc \
    CXX=g++

六、编译与安装

bash 复制代码
[root@rocky8 postgresql-17.11]#make -j 2 world
[root@rocky8 postgresql-17.11]#make install-world

# 安装 contrib 扩展
[root@rocky8 postgresql-17.11]#cd contrib
[root@rocky8 contrib]#make -j 2
[root@rocky8 contrib]#make install
[root@rocky8 contrib]#cd ..
[root@rocky8 postgresql-17.11]#

# 验证安装路径
[root@rocky8 postgresql-17.11]#ls /apps/pgsql/
bin  include  lib  share

# 验证版本
[root@rocky8 postgresql-17.11]#/apps/pgsql/bin/psql --version
psql (PostgreSQL) 17.11
[root@rocky8 postgresql-17.11]#/apps/pgsql/bin/postgres --version
postgres (PostgreSQL) 17.11

七、创建用户、目录、初始化

7.1创建 postgres 用户

bash 复制代码
#PostgreSQL默认不支持以root身份启动服务,虽然也可修改源码实现root启动,但基于安全考虑不建议,因此必须创建一个用于启动PostgrepSQL的普通用户
[root@rocky8 postgresql-17.11]#groupadd -g 2000 postgres
[root@rocky8 postgresql-17.11]#useradd -u 2000 -g postgres -s /bin/bash -d /home/postgres -m postgres
[root@rocky8 postgresql-17.11]#id postgres
uid=2000(postgres) gid=2000(postgres) groups=2000(postgres)

# 设置密码
[root@rocky8 postgresql-17.11]#echo "PostgreSQL@2026." | passwd --stdin postgres

7.2创建数据/日志/归档目录并授权

bash 复制代码
[root@rocky8 postgresql-17.11]#mkdir -p /apps/pgsql/{data,log,archive,backup}
[root@rocky8 postgresql-17.11]#mkdir -p /apps/pgsql/data/pg_wal
[root@rocky8 postgresql-17.11]#chown -R postgres:postgres /apps/pgsql
[root@rocky8 postgresql-17.11]#chown -R postgres:postgres /apps/pgsql/data
[root@rocky8 postgresql-17.11]#chmod 700 /apps/pgsql/data
[root@rocky8 postgresql-17.11]#chmod 700 /apps/pgsql/log
[root@rocky8 postgresql-17.11]#chmod 700 /apps/pgsql/archive
[root@rocky8 postgresql-17.11]#chmod 700 /apps/pgsql/backup

7.3设置环境变量

bash 复制代码
[root@rocky8 postgresql-17.11]#vim /etc/profile.d/pgsql.sh
# PostgreSQL 17.11
export PGHOME=/apps/pgsql
export PGDATA=/apps/pgsql/data
export PATH=$PGHOME/bin/:$PATH
export PGUSER=postgres
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export MANPATH=/apps/pgsql/share/man:$MANPATH
export PGSYSLOGDIR=/apps/pgsql/log

[root@rocky8 postgresql-17.11]# . /etc/profile.d/pgsql.sh

[root@rocky8 postgresql-17.11]#su - postgres
[postgres@rocky8 ~]$psql --version
psql (PostgreSQL) 17.11

八、初始化数据库

bash 复制代码
# PG17 默认数据校验和需显式开启
[postgres@rocky8 ~]$initdb -D $PGDATA -E UTF8 -U postgres --locale=C --data-checksums --auth-local=scram-sha-256 --auth-host=scram-sha-256  -W

九、配置文件与 systemd 服务

9.1编辑 postgresql.conf

bash 复制代码
[root@rocky8 ~]#vim /apps/pgsql/data/postgresql.conf
listen_addresses = '127.0.0.1'
port = 5432
max_connections = 200

shared_buffers = 256MB
work_mem = 64MB
maintenance_work_mem = 127.0.0.1
effective_cache_size = 2GB
huge_pages = try

wal_level = replica
max_wal_size = 2GB
min_wal_size = 1GB
checkpoint_completion_target = 0.9
wal_compression = zstd
archive_mode = on
archive_command = 'cp %p /apps/pgsql/archive/%f'

max_parallel_workers = 8
max_parallel_workers_per_gather = 4
max_parallel_maintenance_workers = 4
parallel_leader_participation = on

jit = on
jit_above_cost = 100000
jit_inline_above_cost = 50000
jit_optimize_above_cost = 500000

logging_collector = on
log_directory = '/apps/pgsql/log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_statement = 'ddl'
log_min_duration_statement = 1000

shared_preload_libraries = 'pg_stat_statements'

9.2编辑 pg_hba.conf

bash 复制代码
[root@rocky8 ~]#vim /apps/pgsql/data/pg_hba.conf
local   all             all                                     scram-sha-256
host    all             all             127.0.0.1/32            scram-sha-256   
host    all             all             ::1/128                 scram-sha-256

local   replication     all                                     scram-sha-256
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256

9.3创建 systemd 服务

bash 复制代码
[root@rocky8 ~]#vim /etc/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL 17.11 Database Server
Documentation=man:postgres(1)
After=network.target

[Service]
Type=notify
User=postgres
Group=postgres
ExecStart=/apps/pgsql/bin/postgres -D /apps/pgsql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0
Environment=PGDATA=/apps/pgsql/data
Environment=PGSYSLOGDIR=/apps/pgsql/log
LimitNOFILE=65536
LimitNPROC=infinity

[Install]
WantedBy=multi-user.target

# 重载并启用
[root@rocky8 ~]#sudo systemctl daemon-reload
[root@rocky8 ~]#sudo systemctl enable --now postgresql.service 
[root@rocky8 ~]#sudo systemctl status postgresql.service

[root@rocky8 ~]#netstat -tnlp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      85935/postgres

十、验证 + 生产调优

10.1基础验证

bash 复制代码
# 本地连接
[root@rocky8 ~]#su - postgres
 PostgreSQL 17.11 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 12.2.1 20221121 (Red Hat 12.2.1-7), 64-bit
(1 row)

# 远程连接
[postgres@rocky8 ~]$psql -h 127.0.0.1 -p 5432 -U postgres
Password for user postgres: 
psql (17.11)
Type "help" for help.

postgres=# SHOW server_version;
 server_version 
----------------
 17.11
 
 # 端口监听
 [postgres@rocky8 ~]$ss -tlnp | grep 5432
LISTEN 0      400        127.0.0.1:5432      0.0.0.0:*    users:(("postgres",pid=85935,fd=7))

10.2PG17 核心特性验证

bash 复制代码
postgres=# SHOW jit;
 jit 
-----
 on
 
postgres=# SHOW max_parallel_workers;
 max_parallel_workers 
----------------------
 8

postgres=# SHOW parallel_leader_participation;
 parallel_leader_participation 
-------------------------------
 on

postgres=# SHOW data_checksums;
 data_checksums 
----------------
 on

postgres=# CREATE INDEX idx_users_name_zh ON users (name COLLATE "zh-Hans-CN-x-icu");
postgres=# EXPLAIN (ANALYZE, BUFFERS) 
SELECT * FROM users ORDER BY name;
                                                          QUERY PLAN                                                  
        
----------------------------------------------------------------------------------------------------------------------
--------
 Index Scan using idx_users_name_zh on users  (cost=0.15..95.31 rows=3410 width=68) (actual time=0.005..0.005 rows=0 l
oops=1)
   Buffers: shared hit=1
 Planning:
   Buffers: shared hit=2
 Planning Time: 0.085 ms
 Execution Time: 0.019 ms

postgres=# SHOW wal_compression;
 wal_compression 
-----------------
 zstd

postgres=# SELECT uuid_generate_v4();
           uuid_generate_v4           
--------------------------------------
 da1ddcbf-c0ea-41bd-9c2a-4e25f7cccb62

postgres=# SELECT gen_random_uuid();
           gen_random_uuid            
--------------------------------------
 231baac1-63b7-47da-8c96-98f6145343c6
 
 postgres=# SHOW huge_pages;
 huge_pages 
------------
 try

10.3扩展安装

bash 复制代码
#-- 安装常用扩展
postgres=# CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
postgres=# CREATE EXTENSION IF NOT EXISTS pgcrypto;
postgres=# CREATE EXTENSION IF NOT EXISTS hstore;
postgres=# CREATE EXTENSION IF NOT EXISTS pg_trgm;
postgres=# CREATE EXTENSION IF NOT EXISTS unaccent;

#安装 pgvector
[root@rocky8 postgresql-17.11]#cd /tmp
[root@rocky8 tmp]#sudo dnf install -y git
[root@rocky8 tmp]#git --version
git version 2.43.7
[root@rocky8 tmp]#git clone --branch v0.8.0 https://github.com/pgvector/pgvector.git
[root@rocky8 tmp]#cd pgvector
[root@rocky8 pgvector]#
[root@rocky8 pgvector]#export PG_CONFIG=/apps/pgsql/bin/pg_config
[root@rocky8 pgvector]#make
[root@rocky8 pgvector]#sudo --preserve-env=PG_CONFIG make install
[root@rocky8 pgvector]#ls -l /apps/pgsql/share/extension/vector.control
-rw-r--r-- 1 root root 145 Aug 18 22:20 /apps/pgsql/share/extension/vector.control

postgres=# CREATE EXTENSION IF NOT EXISTS vector;
postgres=# SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';
 extname | extversion 
---------+------------
 vector  | 0.8.0

postgres=# \dx
                                            List of installed extensions
        Name        | Version |   Schema   |                              Description                               
--------------------+---------+------------+------------------------------------------------------------------------
 hstore             | 1.8     | public     | data type for storing sets of (key, value) pairs
 pg_stat_statements | 1.11    | public     | track planning and execution statistics of all SQL statements executed
 pg_trgm            | 1.6     | public     | text similarity measurement and index searching based on trigrams
 pgcrypto           | 1.3     | public     | cryptographic functions
 plpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language
 unaccent           | 1.1     | public     | text search dictionary that removes accents
 uuid-ossp          | 1.1     | public     | generate universally unique identifiers (UUIDs)
 vector             | 0.8.0   | public     | vector data type and ivfflat and hnsw access methods
 
扩展名称 版本 所属Schema 功能描述
hstore 1.8 public 存储键值对集合的数据类型
pg_stat_statements 1.11 public 追踪所有SQL语句的规划和执行统计信息
pg_trgm 1.6 public 基于三元语法的文本相似度测量和索引搜索
pgcrypto 1.3 public 提供加密相关函数
plpgsql 1.0 pg_catalog PL/pgSQL 过程语言支持
unaccent 1.1 public 用于移除重音符号的全文搜索词典
uuid-ossp 1.1 public 生成符合标准的通用唯一标识符(UUID)
‌vector‌ 0.8.0 public 向量数据类型,支持IVFFlat和HNSW索引访问方法(pgvector向量扩展)

关于 pgvector v0.8.0 的核心能力

支持的向量类型

  • 标准 vector 类型:最高支持 16000 维单精度向量
  • halfvec 类型:最高支持 16000 维半精度向量,显著降低存储占用
  • bit 二进制向量:最高支持 64000 位
  • sparsevec 稀疏向量:最高支持 16000 个非零元素

距离运算符

  • <->:L2欧氏距离
  • <#>:负内积
  • <=>:余弦距离
  • <+>:L1曼哈顿距离
  • <~>:汉明距离(仅二进制向量)
  • <%>:雅卡尔距离(仅二进制向量)

索引支持

  • HNSW 多层图索引:查询速度更快、召回率更优,无需预训练,可直接创建
  • IVFFlat 倒排索引:构建速度更快、内存占用更低,适合大规模向量场景

进阶特性

  • 支持迭代索引扫描优化高过滤条件下的召回率
  • 原生兼容 PostgreSQL 所有 ACID 特性、事务、JOIN 操作和流复制
  • 可以与 PostgreSQL 全文检索能力结合实现混合语义搜索
相关推荐
Doraemomo1 小时前
Linux编程-进程的执行和退出
linux·运维·服务器
lengjingzju1 小时前
编译与调试完全指南—第5章 GDB调试详解
linux
艾伦_耶格宇1 小时前
【ELK】-5 kibana和filebeat
linux·运维·ubuntu·elk
复园电子2 小时前
USB服务器架构设计分析:多设备管理、权限控制与安全传输机制
运维·服务器·安全
DevHub2 小时前
电视盒子刷 Armbian 教程:30 元旧盒子变 NAS 跑 Docker,200+ 机型可刷
linux·嵌入式硬件·docker·容器·开源·电视盒子
三言老师2 小时前
K8s 集群 Ceph 节点磁盘分区规划配置实操
linux·运维·数据库
Doraemomo4 小时前
Linux编程-线程
linux·运维·服务器
Linux-lucky10 小时前
21-Linux学习之旅之HTTPS和安全加固
linux·运维·学习·ubuntu·https
清水白石00811 小时前
Python 死锁排查全攻略:从线程卡死到锁依赖定位与工程化修复
linux·网络·python