Skip to content

PostgreSQL 数据库安装规范

核心概念

PostgreSQL数据库安装规范是确保数据库系统正确、安全和高效部署的基础。安装过程主要涉及以下核心概念:

  • 安装前准备:包括系统要求、依赖检查和规划
  • 安装方法:不同操作系统的安装方式(包管理器、源码编译、二进制安装)
  • 初始化配置:数据库集群的初始化和基本配置
  • 安全设置:包括密码设置、访问控制和认证配置
  • 验证安装:确保数据库能够正常启动和运行
  • 升级和迁移:版本升级和数据迁移的最佳实践

安装前准备

1. 系统要求

组件最低要求推荐配置
CPU2核4核以上
内存4GB16GB以上
存储100GB500GB SSD以上
操作系统Linux 7+/Windows Server 2016+Linux 8+/Windows Server 2019+
文件系统ext4/XFSXFS

2. 依赖检查

bash
# Linux系统依赖检查(CentOS 7/8)
# CentOS 7
yum check-update
yum install -y epel-release
yum install -y wget curl gcc gcc-c++ make libxml2-devel libxslt-devel zlib-devel openssl-devel readline-devel

# CentOS 8
dnf check-update
dnf install -y epel-release
dnf install -y wget curl gcc gcc-c++ make libxml2-devel libxslt-devel zlib-devel openssl-devel readline-devel

# Ubuntu系统依赖检查
apt-get update
apt-get install -y wget curl gcc g++ make libxml2-dev libxslt1-dev zlib1g-dev libssl-dev libreadline-dev

3. 安装规划

  • 安装版本:选择稳定的LTS版本,如PostgreSQL 14、15或16
  • 安装路径:默认路径或自定义路径(建议使用/data/postgres)
  • 数据目录:独立的存储设备,建议使用SSD
  • WAL目录:独立的低延迟存储设备
  • 端口设置:默认5432,如需修改请提前规划

安装方法

1. Linux系统安装(使用包管理器)

CentOS 7/8 安装

bash
# CentOS 7
# 添加PostgreSQL YUM仓库
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 安装PostgreSQL 15
yum install -y postgresql15-server postgresql15-contrib postgresql15-devel

# CentOS 8
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf install -y postgresql15-server postgresql15-contrib postgresql15-devel

Ubuntu 安装

bash
# 添加PostgreSQL APT仓库
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

# 安装PostgreSQL 15
sudo apt-get update
sudo apt-get install -y postgresql-15 postgresql-contrib-15 libpq-dev

2. Linux系统安装(源码编译)

bash
# 下载源码包
wget https://download.postgresql.org/pub/source/v15.4/postgresql-15.4.tar.gz

# 解压源码包
tar -zxvf postgresql-15.4.tar.gz
cd postgresql-15.4

# 配置编译选项
./configure --prefix=/usr/local/pgsql --with-pgport=5432 --with-openssl --with-libxml --with-libxslt --with-readline

# 编译和安装
make -j 4
make install

# 创建PostgreSQL用户
groupadd -r postgres
useradd -r -g postgres -d /var/lib/postgresql -s /bin/bash postgres

# 创建数据目录
mkdir -p /data/postgres
touch /data/postgres/PG_VERSION
chown -R postgres:postgres /data/postgres
chmod 0700 /data/postgres

3. Windows系统安装

下载安装包

  1. 访问PostgreSQL官方下载页面:https://www.postgresql.org/download/windows/
  2. 下载对应版本的安装包(如postgresql-15.4-1-windows-x64.exe)
  3. 运行安装程序

安装步骤

  1. 选择安装目录:建议使用默认目录或非系统盘目录
  2. 选择组件:建议全选(PostgreSQL Server、pgAdmin 4、Stack Builder、Command Line Tools)
  3. 设置数据目录:建议使用非系统盘目录,如D:\PostgreSQL\data
  4. 设置超级用户密码:设置强密码并牢记
  5. 设置端口:默认5432,如需修改请记住端口号
  6. 选择区域:默认即可
  7. 完成安装:取消勾选Stack Builder,稍后手动安装所需组件

初始化配置

1. Linux系统初始化

bash
# 切换到postgres用户
su - postgres

# 初始化数据库集群
# 方法1:使用默认数据目录
/usr/pgsql-15/bin/initdb -D /var/lib/pgsql/15/data

# 方法2:使用自定义数据目录
/usr/pgsql-15/bin/initdb -D /data/postgres -E UTF8 --locale=C --encoding=UTF8

# 退出postgres用户
exit

# 配置PostgreSQL服务
# 修改服务配置文件
cat > /etc/systemd/system/postgresql-15.service << EOF
[Unit]
Description=PostgreSQL 15 database server
Documentation=https://www.postgresql.org/docs/15/
After=syslog.target network.target

[Service]
Type=forking

# User and group
User=postgres
Group=postgres

# Database cluster location
Environment=PGDATA=/data/postgres

# Where to send early-startup messages
StandardOutput=syslog

# Start the postmaster
ExecStart=/usr/pgsql-15/bin/pg_ctl start -D ${PGDATA} -s -w -t 300

# Stop the postmaster
ExecStop=/usr/pgsql-15/bin/pg_ctl stop -D ${PGDATA} -s -m fast

# Reload the postmaster configuration
ExecReload=/usr/pgsql-15/bin/pg_ctl reload -D ${PGDATA} -s

# PID file location
PIDFile=${PGDATA}/postmaster.pid

[Install]
WantedBy=multi-user.target
EOF

# 启动PostgreSQL服务
systemctl daemon-reload
systemctl enable postgresql-15
systemctl start postgresql-15

2. 配置文件修改

bash
# 修改postgresql.conf文件
vi /data/postgres/postgresql.conf

# 主要配置项修改建议
# 监听地址(允许远程连接)
listen_addresses = '*'

# 端口设置
port = 5432

# 最大连接数
max_connections = 200

# 共享内存设置
shared_buffers = 4GB

# 日志设置
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 100MB

# 修改pg_hba.conf文件,允许远程连接
vi /data/postgres/pg_hba.conf

# 添加以下行(根据需要调整)
# 允许所有IP地址使用密码认证连接
host    all             all             0.0.0.0/0               md5
# 允许IPv6地址使用密码认证连接
host    all             all             ::/0                    md5

安装后配置

1. 设置超级用户密码

bash
# 切换到postgres用户
su - postgres

# 设置密码
psql -c "ALTER USER postgres WITH PASSWORD 'YourStrongPassword';"

# 退出postgres用户
exit

2. 创建测试数据库和用户

bash
# 登录PostgreSQL
psql -h localhost -p 5432 -U postgres

# 创建测试用户
CREATE USER testuser WITH PASSWORD 'TestPassword123';

# 创建测试数据库
CREATE DATABASE testdb OWNER testuser;

# 授予权限
GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;

# 退出
\q

3. 测试远程连接

bash
# 从另一台机器测试连接
psql -h db-server-ip -p 5432 -U testuser -d testdb

验证安装

1. 检查服务状态

bash
# Linux系统
systemctl status postgresql-15

# Windows系统
# 使用服务管理器检查或命令行
sc query postgresql-x64-15

2. 验证数据库连接

bash
# 本地连接
psql -h localhost -p 5432 -U postgres -c "SELECT version();"

# 远程连接
psql -h db-server-ip -p 5432 -U testuser -d testdb -c "SELECT 1;"

3. 检查日志

bash
# Linux系统日志检查
cat /data/postgres/log/postgresql-$(date +%Y-%m-%d)_*.log | tail -n 50

# Windows系统日志
# 默认路径:C:\Program Files\PostgreSQL\15\data\log

常见问题处理

1. 服务无法启动

问题症状:systemctl start postgresql-15 失败

解决方法

bash
# 检查日志文件
tail -n 100 /data/postgres/log/postgresql-*.log

# 常见错误及解决
# 1. 端口被占用
netstat -tuln | grep 5432
# 修改postgresql.conf中的port参数

# 2. 数据目录权限问题
chown -R postgres:postgres /data/postgres
chmod 0700 /data/postgres

# 3. 配置文件语法错误
/usr/pgsql-15/bin/pg_ctl -D /data/postgres check

2. 远程连接失败

问题症状:无法从远程机器连接到PostgreSQL

解决方法

bash
# 1. 检查监听地址
cat /data/postgres/postgresql.conf | grep listen_addresses
# 确保设置为 '*' 或特定IP

# 2. 检查pg_hba.conf配置
cat /data/postgres/pg_hba.conf | grep host
# 确保允许远程IP连接

# 3. 检查防火墙设置
# CentOS
firewall-cmd --list-ports
firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --reload

# Ubuntu
ufw status
ufw allow 5432/tcp

3. 安装版本错误

问题症状:安装了错误的PostgreSQL版本

解决方法

bash
# 卸载旧版本
# CentOS
yum remove -y postgresql*
# Ubuntu
apt-get purge -y postgresql*

# 清理残留文件
rm -rf /var/lib/pgsql
rm -rf /data/postgres

# 重新安装正确版本

安装最佳实践

1. 安全最佳实践

  • 设置强密码:为所有用户设置强密码
  • 限制访问:仅允许必要的IP地址访问数据库
  • 禁用默认用户:不要使用默认的postgres用户进行日常操作
  • 定期更新:及时安装安全补丁和版本更新
  • 启用加密:配置SSL/TLS加密连接

2. 性能最佳实践

  • 使用SSD存储:提高读写性能
  • 独立存储:数据目录和WAL目录使用独立存储设备
  • 合理配置内存:根据硬件资源调整shared_buffers、work_mem等参数
  • 优化IO调度器:SSD建议使用none或mq-deadline调度器
  • 配置连接池:使用PgBouncer或Pgpool-II管理连接

3. 运维最佳实践

  • 备份策略:制定完善的备份策略,包括全量备份和增量备份
  • 监控配置:配置监控系统,监控数据库性能和状态
  • 日志管理:配置合理的日志保留策略
  • 文档记录:记录安装过程、配置变更和版本信息
  • 定期测试:定期测试备份恢复和故障切换

常见问题(FAQ)

Q1:如何选择PostgreSQL版本?

A1:建议选择稳定的LTS版本,如PostgreSQL 14、15或16。LTS版本提供5年的支持周期,包括安全更新和bug修复。对于生产环境,不建议使用开发版本或即将结束支持的版本。

Q2:PostgreSQL安装路径可以修改吗?

A2:可以修改。使用包管理器安装时,默认路径通常为/usr/pgsql-[version];使用源码编译时,可以通过--prefix参数指定安装路径。数据目录也可以自定义,建议使用独立的存储设备。

Q3:如何升级PostgreSQL版本?

A3:PostgreSQL升级建议使用pg_upgrade工具,步骤如下:

  1. 安装新版本PostgreSQL
  2. 停止旧版本服务
  3. 使用pg_upgrade升级数据目录
  4. 启动新版本服务
  5. 验证升级结果
  6. 优化新数据库(VACUUM ANALYZE)

详细升级步骤请参考官方文档。

Q4:如何配置PostgreSQL自动启动?

A4:

  • Linux系统:使用systemd服务,配置开机自启

    bash
    systemctl enable postgresql-15
  • Windows系统:安装时默认配置为自动启动,可通过服务管理器修改

Q5:如何卸载PostgreSQL?

A5:

  • Linux系统(包管理器)

    bash
    # CentOS
    yum remove -y postgresql15*
    # Ubuntu
    apt-get purge -y postgresql-15*
  • Windows系统:使用控制面板或卸载程序卸载

  • 清理残留文件:删除数据目录和配置文件

安装文档管理

1. 文档内容

  • 安装版本和时间
  • 安装路径和配置
  • 数据目录和WAL目录位置
  • 端口设置
  • 超级用户密码(加密存储)
  • 安装过程中的特殊配置
  • 测试结果和验证报告

2. 文档更新

  • 每次升级或重大配置变更后更新文档
  • 记录变更内容、时间和操作人员
  • 定期审查文档,确保准确性

3. 文档分享

  • 分享给相关运维人员
  • 存储在安全的文档管理系统中
  • 确保文档的访问权限控制

通过遵循上述安装规范,可以确保PostgreSQL数据库的正确、安全和高效部署,为后续的运维工作打下坚实的基础。