# Postgresql数据库安装参考手册Linux

官网地址: https://www.postgresql.org/download/

# 联网安装方案

Linux能在线安装依赖组件的前提下,可以快速安装部署PG数据库,安装过程使用root管理员帐号:

# 安装仓库

Centos7或Redhat7

https://www.postgresql.org/download/linux/redhat/

打开官网地址,选择对应的pg版本、操作系统、系统架构,复制&粘贴并执行脚本命令

例:postgresql-13版本, redhat7, x86-64

# 安装 RPM 仓库:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Ubuntu或Debian

https://www.postgresql.org/download/linux/ubuntu/

# 导入仓库签名key:
sudo apt install curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc

# 创建仓库配置文件:
. /etc/os-release
sudo sh -c "echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $VERSION_CODENAME-pgdg main' > /etc/apt/sources.list.d/pgdg.list"

# 更新包缓存:
sudo apt update

# 开始安装

首先,使用如下命令自动下载Postgresql组件:

# 在openEuler、Fedora或CentOS 8+上,你可能会使用:
sudo dnf update
sudo dnf install postgresql-server postgresql -y

# 在CentOS 7或RHEL 7上,你可能会使用:
sudo yum update
sudo yum install postgresql-server postgresql -y
# 如果想安装指定版本,比如13版本,可以用 'postgresql13-server' 替换 'postgresql-server'
sudo yum install -y postgresql13-server

# 在Ubuntu或Debian上,你可能会使用:
sudo apt update
# 在Debian和Ubuntu的包管理系统中,PostgreSQL的服务器和客户端工具是集成在 postgresql 包中的,所以不存在单独install postgresql-server一说
sudo apt install postgresql postgresql-contrib -y
# 如果想安装指定版本,比如13版本,可以用 'postgresql-13' 替换 'postgresql'
sudo apt install postgresql-13 -y

安装完成后,需要初始化PostgreSQL数据库。运行以下命令:

sudo postgresql-setup --initdb

正常情况下,返回信息如下:

 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

启动PostgreSQL服务,并设置为开机自启:

sudo systemctl start postgresql
sudo systemctl enable postgresql

访问PostgreSQL:你可以通过 psql 命令行工具访问PostgreSQL。

在前面初始化时,会给系统预置一个postgres的用户用于管理数据库,我们可以切换到 postgres 用户并进入 psql

sudo -i -u postgres
psql

# postgres默认没有密码,在psql模式下,通过如下命令设置密码:
\password postgres

创建用户和数据库:在 psql 中,你可以创建用户和数据库。

例如,创建一个名为 seeyondb 的用户(密码通用户名)和一个名为 seeyondatabase 的数据库:

-- 在psql模式下创建帐号和库
CREATE USER seeyondb WITH PASSWORD 'seeyondb';
-- 在psql模式下新建一个数据库,管理权限交给seeyondb
CREATE DATABASE seeyondatabase OWNER seeyondb;

退出psql:完成后,可以输入 \q 退出 psql

调优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,设置*表示支持全部IP访问
listen_addresses = '*'

参数修改后,通过sudo systemctl restart postgresql设置生效。

配置PostgreSQL:编辑/var/lib/pgsql/data/pg_hba.conf文件来设置身份验证方法:

# 增加一行host配置,允许seeyondatabase数据库可以被外部IP 192.168.1.100通过帐号seeyondb访问
host    seeyondatabase    seeyondb    192.168.1.100/32    md5
# 也可以把IP设置为0.0.0.0/0,表示任意外部IP访问,这种方式仅适合开发环境,生产环境不要随意暴露连接
host    seeyondatabase    seeyondb    0.0.0.0/0    md5

参数修改后,通过sudo systemctl restart postgresql设置生效。

配置防火墙,允许PG数据库端口可被外部访问:

sudo firewall-cmd --add-port=5432/tcp --permanent
sudo firewall-cmd --reload

以上完成后,我们可以通过客户端远程连接PG数据库了:

1730636881532.png

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

1730636803619.png

# 离线包安装

https://www.modb.pro/db/1794761878199144448

# 源码安装

源码下载地址:https://www.postgresql.org/ftp/source/

# 下载源码包

从官网下载地址下载对应版本的源码包,这里以v17.5举例

# 下载源码包
wget https://ftp.postgresql.org/pub/source/v17.5/postgresql-17.5.tar.gz
# 下载源码包md5值文件
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

# 安装编译工具及依赖

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

# 编译&安装

# 解压
tar -zvxf postgresql-17.5.tar.gz

# 配置编译环境
cd postgresql-17.5
./configure --prefix=/usr/local/postgresql-17.5

# 编译源码
make

# 安装
make install

# 创建软链接
ln -s /usr/local/postgresql-17.5 /usr/local/postgresql

# 初始化

# 创建用户
useradd -m postgres

# 创建数据目录
mkdir /usr/local/postgresql/data

# 修改目录权限
chown -R postgres:postgres /usr/local/postgresql-17.5/

# 初始化数据库
sudo -u postgres /usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data

# 配置调整

# 修改监听地址(默认监听127.0.0.1,修改为网卡IP)
vim /usr/local/postgresql/data/postgresql.conf
listen_addresses = '192.168.0.92'

# 允许外部客户端通过tcp端口连接
vim /usr/local/postgresql/data/pg_hba.conf
host    all             all             0.0.0.0/0               scram-sha-256

# 启停

# 启动数据库
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

# 参数优化

# 内存相关设置
shared_buffers: 设置为服务器内存的 25% 左右,用于缓存数据块以减少磁盘 I/O。
work_mem: 配置为每个连接的需求,通常设置为 16-64MB,适用于排序和哈希操作。
maintenance_work_mem: 在执行数据库维护任务(如 VACUUM、CREATE INDEX)时使用,可以更高。
effective_cache_size: 合理设置这个值,反映数据库使用的操作系统缓存大小。

# 并发相关设置
max_connections: 根据用户访问量合理设置,避免过多并发连接导致性能下降。
wal_writer_delay: 在需要提升写性能时,可以减少 WAL 写的延迟。

# I/O和日志相关设置
wal_level: 基于系统复制需要进行选择,minimal 可以提供更快的写入性能。
checkpoint_segments 和 checkpoint_completion_target: 增加这些参数以减少 checkpoint 加载对系统的影响。
编撰人:admin