一、PostgreSQL

1. 简介

PostgreSQL 是一个功能强大的开源关系型数据库管理系统(RDBMS),起源于 1986 年的加州大学伯克利分校项目。它支持 SQL 标准并提供丰富的扩展功能,适用于复杂的数据处理场景。

2. 特点
  • 可扩展性:支持自定义数据类型、运算符、函数和索引。
  • 事务完整性:严格遵循 ACID(原子性、一致性、隔离性、持久性)原则。
  • 并发控制:采用多版本并发控制(MVCC)机制,避免读写冲突。
  • 高级功能:支持 JSON、GIS、全文搜索、窗口函数等。
3. 优势
  • 开源免费:遵循 PostgreSQL 许可协议,可自由使用和修改。
  • 兼容性:支持多种编程语言接口(如 Python、Java、C/C++)。
  • 可靠性:提供主从复制、逻辑复制等高可用方案。
  • 社区活跃:拥有庞大的开发者社区和丰富的插件生态。
4. 架构

PostgreSQL 采用多进程架构:

  • 主进程(Postmaster):管理连接和后台进程。
  • 后端进程(Backend):每个客户端连接对应一个独立进程。
  • 辅助进程:包括 WAL 写入器、检查点进程等。
5. 应用场景
  • OLTP 系统:如电商、金融交易系统。
  • 数据分析:支持复杂查询和并行计算。
  • 地理信息系统(GIS):通过 PostGIS 扩展处理空间数据。
  • 文档存储:利用 JSONB 类型高效管理半结构化数据。
6. 结论

PostgreSQL 是兼顾性能、功能与开源灵活性的理想数据库选择,尤其适合需要高度定制化和复杂业务逻辑的场景。

二、安装 PostgreSQL

1. 编译安装

适用于需要自定义配置的场景:

# 下载源码
wget https://ftp.postgresql.org/pub/source/v15.5/postgresql-15.5.tar.gz
tar -xzvf postgresql-15.5.tar.gz
cd postgresql-15.5

# 编译安装
./configure --prefix=/opt/pgsql
make
make install

# 初始化数据库
/opt/pgsql/bin/initdb -D /data/pgdata

2. dnf 安装

适用于 CentOS/RHEL 等系统:

# 添加官方仓库
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 安装 PostgreSQL 15
dnf install -y postgresql15-server

# 初始化并启动
/usr/pgsql-15/bin/postgresql-15-setup initdb
systemctl enable postgresql-15
systemctl start postgresql-15

三、PostgreSQL 结构

1. PG 的逻辑结构
  • 数据库(Database):独立的数据容器。
  • 模式(Schema):命名空间,用于组织表、视图等对象。
  • 对象:表(Table)、索引(Index)、函数(Function)等。
2. PG 的物理结构
(1)软件安装目录
  • 二进制文件:/usr/pgsql-15/bin(dnf 安装)或 /opt/pgsql/bin(编译安装)。
  • 配置文件:/var/lib/pgsql/15/data/postgresql.conf
  • 日志文件:/var/lib/pgsql/15/data/log
(2)数据库目录结构

数据目录(如 /var/lib/pgsql/15/data)包含:

  • PG_VERSION:版本信息文件。
  • base:存储数据库的核心数据文件。
  • pg_wal:预写日志(WAL)目录。
(3)基础对象:OID 与表空间
  • OID(对象标识符)
    • 系统内部唯一标识对象的整数,如 pg_class 中存储表 OID。
    • 查询示例:
      SELECT oid, relname FROM pg_class WHERE relkind = 'r';
      

  • 表空间(Tablespace)
    • 物理存储位置的逻辑映射,允许数据分散存储。
    • 创建表空间:
      CREATE TABLESPACE ts_custom LOCATION '/mnt/ssd_data';
      

(4)base 的物理布局
  • 目录结构:base/<database_oid>/<table_oid>
    • 每个表对应一个或多个文件(如 1234512345_fsm)。
  • 文件类型:
    • 主文件(.data):存储实际数据。
    • 空闲空间映射(_fsm):记录数据页的空闲空间。
    • 可见性映射(_vm):加速 VACUUM 操作。
(5)表空间与数据库关系总结
特性 表空间 数据库
作用 定义物理存储位置 逻辑数据容器
多对象支持 可包含多个数据库的对象 可跨多个表空间存储对象
依赖关系 独立于数据库存在 依赖表空间存储数据
管理命令 CREATE TABLESPACE CREATE DATABASE

Logo

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

更多推荐