安装、架构、命令与优化


一、PostgreSQL 是什么

1.1 核心定位

PostgreSQL(简称 PG)是全球最强大的开源对象关系型数据库(ORDBMS),源自伯克利,血统纯正,完全开源、协议宽松、无版权风险

  1. 全能型数据库:支持关系型数据、JSON、数组、枚举、GIS、向量(PGVector),一套库搞定业务 + AI+GIS
  2. 标准合规:高度兼容 SQL 标准,支持窗口函数、CTE、复杂子查询
  3. 高并发可靠:MVCC 多版本并发,ACID 强事务,适合高并发 OLTP
  4. 生态爆炸:PostGIS、TimescaleDB、PGVector、Citus 等扩展,覆盖物联网、时序、AI 向量
  5. 社区与就业:国内大厂、云厂商、金融、政企全面拥抱 PG,岗位需求暴涨

1.3 典型应用场景

  • 企业级系统:ERP、CRM、OA
  • Web 高并发:电商、社交、SaaS
  • 数据分析:数仓、BI、离线计算
  • GIS 地理信息:地图、物流、LBS 服务
  • 物联网 / 时序:IoT 设备采集、监控数据
  • AI 向量检索:大模型特征存储、语义检索

二、PostgreSQL 安装(OpenEuler :源码编译 + DNF 两种方式)

本文以 OpenEuler 24 + PostgreSQL 16.3 为例,提供两种生产常用安装方式,你可根据场景选择。

方式一:源码编译安装

适合需要自定义路径、开启特殊编译参数、控制版本的场景。

1. 安装依赖

bash

运行

yum -y install gcc gcc-* make libicu libicu-devel readline-devel zlib zlib-devel
2. 下载、解压、编译

bash

运行

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

# 配置安装路径
./configure --prefix=/usr/local/pgsql

# 编译 + 安装
make && make install
3. 创建用户与数据目录

bash

运行

# 创建专用用户(禁止 root 运行 PG)
adduser postgres

# 创建数据目录
mkdir -p /usr/local/pgsql/data
chown postgres:postgres /usr/local/pgsql/data
4. 配置环境变量

bash

运行

cat >> /etc/profile << 'EOF'
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
export PATH=/usr/local/pgsql/bin:$PATH
EOF

source /etc/profile
5. 初始化数据库集群

bash

运行

su - postgres
initdb -D /usr/local/pgsql/data
6. 启动、连接

bash

运行

# 启动
pg_ctl -D /usr/local/pgsql/data -l logfile start

# 连接
psql

方式二:DNF 一键安装

适合快速搭建、不想折腾编译的场景。

bash

运行

# 安装
dnf install -y postgresql-server

# 初始化
postgresql-setup --initdb

# 切换用户登录
su - postgres
psql

✅ 补充

  1. 修改默认密码

sql

ALTER USER postgres PASSWORD '你的强密码';
  1. 允许远程连接
  • 修改 postgresql.conf

ini

listen_addresses = '*'
port = 5432
  • 修改 pg_hba.conf

ini

host    all             all             0.0.0.0/0               md5
  1. 设置开机自启(systemd)

bash

运行

# 编译安装需手动写 service,DNF 安装自动注册
systemctl enable postgresql
systemctl start postgresql

三、PostgreSQL 核心架构:逻辑 + 物理

3.1 逻辑架构(从上到下)

plaintext

数据库集簇(Cluster)
   └── 多个数据库(Database)
          └── 多个模式(Schema)
                 └── 表、视图、索引、函数、序列等对象
  • 集簇:一个 PG 实例管理的所有数据库总称
  • 数据库:逻辑隔离单元,不同库之间无法直接跨库查询
  • Schema:库内对象隔离,解决同名表冲突,多用户共用库必备
  • 对象:表、索引、视图、触发器、函数等

重点:PG 一个实例下多库,库下多 Schema;MySQL 是一个实例下多库,无 Schema 强隔离。

3.2 物理架构(文件到底存在哪)

PG 所有数据都在 $PGDATA 目录,核心目录作用:

目录 / 文件 作用
base/ 各数据库真实数据文件(表、索引)
global/ 全局系统表(用户、数据库信息)
pg_wal/ WAL 预写日志(崩溃恢复、主从复制)
pg_hba.conf 客户端访问认证(白名单、密码方式)
postgresql.conf 核心配置(内存、连接、性能)
PG_VERSION PG 主版本号

3.3 表空间关系

  • Oracle:表空间 ↔ 数据库 一对多
  • PG:表空间 ↔ 数据库 多对多
    • pg_default:默认表空间,用户表默认存放
    • pg_global:系统共享表空间

四、PostgreSQL 最常用命令

4.1 连接命令

bash

运行

# 本地连接
psql -U postgres -d postgres

# 远程连接
psql -h 192.168.x.x -p 5432 -U postgres -d postgres

4.2 psql 元命令

sql

# 查看库
\l

# 切换库
\c dbname

# 查看表
\dt

# 查看表结构
\d tablename

# 查看用户
\du

# 退出
\q

4.3 DDL 基础实战

sql

-- 创建数据库
CREATE DATABASE mydb;

-- 创建 Schema
CREATE SCHEMA user_schema;

-- 创建表(含主键、唯一、非空、默认时间)
CREATE TABLE user_schema.users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(32) NOT NULL UNIQUE,
    email VARCHAR(64) NOT NULL UNIQUE,
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 插入、查询、更新、删除
INSERT INTO user_schema.users (username, email) VALUES ('zhangsan', 'zhangsan@qq.com');
SELECT * FROM user_schema.users;

五、文档外补充:安全、配置、监控、优化

5.1 安全最佳实践

  1. 禁止 postgres 超级用户直连业务
  2. 业务使用最小权限用户
  3. 密码复杂度 + 定期更换
  4. pg_hba.conf 只放信任 IP,不开放 0.0.0.0/0
  5. 开启 SSL 远程连接

5.2 核心配置优化(8G 内存机器参考)

ini

# 连接
max_connections = 500
listen_addresses = '*'

# 内存
shared_buffers = 2GB          # 建议 物理内存 25%
work_mem = 16MB               # 单会话排序/哈希内存
maintenance_work_mem = 512MB  # 维护操作(VACUUM、CREATE INDEX)
effective_cache_size = 6GB    # 优化器可用缓存

# WAL
wal_level = replica
max_wal_size = 8GB
min_wal_size = 1GB

# 并行查询(PG16 增强)
max_parallel_workers = 8
max_parallel_workers_per_gather = 4

5.3 日常监控 SQL

sql

-- 查看当前连接
SELECT pid,usename,datname,client_addr,state FROM pg_stat_activity;

-- 杀死异常连接
SELECT pg_terminate_backend(pid);

-- 查看表大小
SELECT pg_size_pretty(pg_total_relation_size('tablename'));

5.4 PostgreSQL 16 新特性

  1. 并行能力增强:并行 FULL/RIGHT JOIN、并行聚合
  2. COPY 性能提升 3 倍 +
  3. SQL:2023 支持:ANY_VALUE、数字下划线分隔
  4. EXPLAIN GENERIC_PLAN:通用执行计划,适合参数化查询
  5. 索引 INCLUDE:覆盖索引,避免回表

六、常见问题与避坑

  1. 无法远程连接
    • 检查 listen_addressespg_hba.conf、防火墙端口 5432
  2. 中文乱码
    • 初始化时指定 UTF8 编码
  3. 性能差
    • 缺少索引、work_mem 太小、未做 VACUUM
  4. 不能用 root 启动
    • PG 强制要求专用用户,提升安全性
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐