# Postgresql数据库安装参考手册
# 组件合规性说明
PostgreSQL采用类BSD许可协议(又称 PostgreSQL License (opens new window)),在合规性活动范围内可以免费使用:
- 允许任何目的使用、修改、分发代码(包括闭源商业产品),无需开源衍生作品。
- 仅需保留原始版权声明和许可文本。
- 基于PostgreSQL开发的商业产品无需公开源代码。
# Postgresql官网
Postgresql官网访问地址:https://www.postgresql.org/
# Postgresql版本维护策略和选型
Postgresql每年都有新的发行版本,每个发行版本有维护生命周期,官网的版本控制策略说明地址: https://www.postgresql.org/support/versioning/
建议选择次新稳定维护版本,如2025年Postgresql发布V18版本,则2025年推荐部署上一代或上上代Postgresql V16、V17版本。
注意关注大版本的Final Release(截止维护日期),确保数据库尽量在维护日期内,以获得持续的安全、问题处理。

# Linux下部署
# Linux联网安装方案
# Linux联网安装前提要求
Postgresql官网提供了不同的Linux发行版在线安装方法,要求当前Linux系统具备如下条件:
- 1)操作系统处于联网状态,并且能访问 https://www.postgresql.org
- 2)安装过程使用root管理员帐号
- 3)在官方标注的Linux发行版型号范围内,后续步骤有查看支持清单的方法(官网未列举的操作系统型号,无法使用本方案,比如国产Anolis龙蜥操作系统)
# Linux联网安装操作步骤
1、访问Postgresql Download地址:https://www.postgresql.org/download/
在官网下载页面,点击Linux面板,会列出Linux不同生态发行版,选择与自己Linux相匹配的生态发行版进入:
注:如果当前Linux操作系统不在支持范围内,则只能用另一种“源码编译”安装部署!

2、以Linux下的Red Hat/Rocky/AlmaLinux发行生态为例,进入下载面板后,通过“Select platform”、“Select architecture”、“Select version”下拉选择具体的Linux型号版本、架构和Postgresql的版本,会自动带出在线安装部署命令:


3、以AlmaLinux 9 + X86 + Postgresql17为例,PG官网会自动生成下载命令,只需要按照命令逐个执行即可完成包安装、初始化、自启动:
# AlmaLinux 9 + X86 + Postgresql17 安装命令
# Install the repository RPM:
# 安装PG仓库源
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Install PostgreSQL:
# 安装Postgresql
sudo dnf install -y postgresql17-server
# Optionally initialize the database and enable automatic start:
# 初始化数据库和设置数据库自启动
sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
sudo systemctl enable postgresql-17
sudo systemctl start postgresql-17
注:下载手册最后也提供了下载离线PG仓库源的方法,供这些无法访问外网的Linux环境使用:

4、登录PG修改密码:你可以通过 psql 命令行工具访问PostgreSQL。
在前面初始化时,会给系统预置一个postgres的用户用于管理数据库,我们可以切换到 postgres 用户并进入 psql:
sudo -i -u postgres
psql
# postgres默认没有密码,在psql模式下,通过如下命令设置密码:
\password postgres
5、(按需)创建用户和数据库:在 psql 中,你可以创建用户和数据库。
例如,创建一个名为 seeyondb 的用户(密码通用户名)和一个名为 seeyondatabase 的数据库:
-- 在psql模式下创建帐号和库
CREATE USER seeyondb WITH PASSWORD 'seeyondb';
-- 在psql模式下新建一个数据库,管理权限交给seeyondb
CREATE DATABASE seeyondatabase OWNER seeyondb;
6、退出psql:完成后,可以输入 \q 退出 psql。
7、调优PostgreSQL:编辑/var/lib/pgsql/data/postgresql.conf,调整数据库的最大连接和缓存数量:
-- max_connections最大连接数的值,生产环境建议配置500,后续根据实际情况做调整:
max_connections=500
-- shared_buffers的值:缓存模块,可以加速SQL响应效率,建议此值设置为2G以上,生产环境一般推荐占用当前系统内存的15%~20%,配置如下:
shared_buffers=2048M
-- listen_addresses设置监听的网卡IP,默认localhost,设置*表示当前服务器所有网卡
listen_addresses = '*'
参数修改后,通过sudo systemctl restart postgresql设置生效。
8、配置PostgreSQL:编辑/var/lib/pgsql/data/pg_hba.conf文件来设置身份验证方法:
# 第一种:增加一行host配置,192.168.xx.xx这个网段的设备可以通过用户名密码访问
host all all 192.168.0.0/24 md5
# 第二种:也可以把IP设置为0.0.0.0/0,表示任意外部IP访问,这种方式仅适合开发环境,生产环境不要随意暴露连接
host all all 0.0.0.0/0 md5
参数修改后,通过sudo systemctl restart postgresql设置生效。
9、配置防火墙,允许PG数据库端口可被外部访问:
sudo firewall-cmd --add-port=5432/tcp --permanent
sudo firewall-cmd --reload
10、以上完成后,我们可以通过客户端远程连接PG数据库了:

如果客户端通过数据库工具连接不通(比如Navicat),可根据工具提示将必要的IP加入到pg_hba中,如下图所示表示192.168.188.1需要加入配置中:

# Linux源码编译安装
# Linux源码编译适用场景
Linux源码编译理论适用全部Linux操作系统,官方主要建议为:如果客户的操作系统产品和版本不在downloads列表范围内(Other Linux),则推荐统一使用build from source(源码编译)形式部署PG。源码包可以提前下载,对无法连接外网的Linux系统也能使用。

# Linux源码编译部署步骤
1、 源码下载地址:https://www.postgresql.org/ftp/source/
从官网源码下载地址下载对应版本的源码包, 推荐按照 Postgresql版本维护策略和选型 章节选择在维护期的PG版本安装, 如果Linux系统内核版本较低,建议选择早期的PG版本,避免编译安装报错。
这里以Postgresql V17.5为例,提供部署方法:
mkdir -p /data
cd /data
# Linux在线下载后缀名为.tar.gz的源码包(也可以提前下载并上传到Linux)
wget https://ftp.postgresql.org/pub/source/v17.5/postgresql-17.5.tar.gz
# Linux在线下载后缀名为.tar.gz.md5的源码包md5值文件(也可以提前下载并上传到Linux)
wget https://ftp.postgresql.org/pub/source/v17.5/postgresql-17.5.tar.gz.md5
# 对比源码包md5值是否与postgresql-17.5.tar.gz.md5记录的一致
# 查看源码包md5值
md5sum postgresql-17.5.tar.gz
# 查看文件记录值
cat postgresql-17.5.tar.gz.md5
2、安装编译工具及依赖,不同体系操作系统使用不同命令
Ubuntu、Debian
apt update
apt install -y build-essential
apt install -y install libreadline-dev zlib1g-dev libssl-dev libicu-dev pkg-config bison flex m4
CentOS、RHEL
yum install -y gcc gcc-c++ make
yum install -y readline-devel zlib-devel openssl-devel libicu-devel pkgconfig bison flex m4
Fedora
dnf install -y gcc gcc-c++ make
dnf install -y readline-devel zlib-devel openssl-devel libicu-devel pkgconfig bison flex m4
3、编译&安装
# 解压
tar -zvxf postgresql-17.5.tar.gz
# 配置编译环境
cd postgresql-17.5
# /usr/local/postgresql-17.5表示PG编译后最终程序存放位置
./configure --prefix=/usr/local/postgresql-17.5
# 编译源码
make
# 安装
make install
# 创建软链接
ln -s /usr/local/postgresql-17.5 /usr/local/postgresql
4、初始化
# 创建PG数据库维护用户
useradd -m postgres
# 创建数据目录
mkdir /usr/local/postgresql/data
# 修改PG用户目录权限
chown -R postgres:postgres /usr/local/postgresql-17.5/
# 初始化数据库 -D 后面对应数据目录
sudo -u postgres /usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data
5、配置调整
# 修改监听地址(默认监听127.0.0.1,修改为服务器所有网卡的所有 IPv4/IPv6 监听,以便PG能被外部连接)
vim /usr/local/postgresql/data/postgresql.conf
listen_addresses = '*'
# 允许外部客户端通过tcp端口连接
vim /usr/local/postgresql/data/pg_hba.conf
# 第一种:增加一行host配置,192.168.xx.xx这个网段的设备可以通过用户名密码访问
host all all 192.168.0.0/24 scram-sha-256
# 第二种:也可以把IP设置为0.0.0.0/0,表示任意外部IP访问,这种方式仅适合开发环境,生产环境不要随意暴露连接
host all all 0.0.0.0/0 scram-sha-256

6、启停
# 启动数据库
sudo -u postgres /usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/pg-server.log start
# 停止数据库
sudo -u postgres /usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/pg-server.log stop
7、设置postgres的密码
# 在PG服务器执行命令进入数据库psql下
sudo -u postgres /usr/local/postgresql/bin/psql
# postgres默认没有密码,在psql模式下,通过如下命令设置密码
\password postgres
8、退出psql模式,配置防火墙,允许PG数据库端口可被外部访问:
sudo firewall-cmd --add-port=5432/tcp --permanent
sudo firewall-cmd --reload
客户端输入修改的密码进行测试连接:

9、参数优化
vim /usr/local/postgresql/data/postgresql.conf
# 内存相关设置
shared_buffers: 设置为服务器内存的 25% 左右,生产环境至少2G,如2048MB,用于缓存数据块以减少磁盘 I/O。
work_mem: 配置为每个连接的需求,通常设置为 16-64MB,适用于排序和哈希操作。
maintenance_work_mem: 在执行数据库维护任务(如 VACUUM、CREATE INDEX)时使用,可以更高。
effective_cache_size: 合理设置这个值,反映数据库使用的操作系统缓存大小。
# 并发相关设置
max_connections: 根据用户访问量合理设置,生产环境推荐500,避免过多并发连接导致性能下降。
wal_writer_delay: 在需要提升写性能时,可以减少 WAL 写的延迟。
# I/O和日志相关设置
wal_level: 基于系统复制需要进行选择,minimal 可以提供更快的写入性能。
checkpoint_segments 和 checkpoint_completion_target: 增加这些参数以减少 checkpoint 加载对系统的影响。
10、使用systemctl命令进行pg启停管理(命令仅供参考,如有问题需要自行研究调整)
# 如pg已经手动启动,使用命令主动停止
sudo -u postgres /usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/pg-server.log stop
# 增加postgresql.service配置
vim /etc/systemd/system/postgresql.service
# postgresql.service配置内容如下
[Unit]
Description=PostgreSQL Database Server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/pg-server.log start
ExecStop=/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/pg-server.log stop
ExecReload=/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data reload
Restart=on-failure
RestartSec=3s
[Install]
WantedBy=multi-user.target
# postgresql.service配置完成后,重新加载systemctl
systemctl daemon-reload
# 启动pg
systemctl start postgresql.service
# 查看pg状态
systemctl status postgresql.service
# 设置开机自启
systemctl enable postgresql.service
# Windows 环境安装部署方案
第一种:访问官方下载地址,下载安装PG: https://www.postgresql.org/download/



第二种:二进制包下载地址,下载免安装PG:https://www.enterprisedb.com/download-postgresql-binaries


快速跳转