PostgreSQL 初体验

一、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. 编译安装

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

bash 复制代码
# 下载源码
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 等系统:

bash 复制代码
# 添加官方仓库
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。

    • 查询示例:

      sql 复制代码
      SELECT oid, relname FROM pg_class WHERE relkind = 'r';
  • 表空间(Tablespace)

    • 物理存储位置的逻辑映射,允许数据分散存储。

    • 创建表空间:

      sql 复制代码
      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

相关推荐
softshow10262 小时前
PostgreSQL 12 完整部署+迁移+数据恢复
数据库·postgresql
bearpping2 小时前
关于Mysql 中 Row size too large (> 8126) 错误的解决和理解
数据库·mysql
zhuiyisuifeng2 小时前
PostgreSQL_安装部署
数据库·postgresql
watersink2 小时前
第15章 数据库系统
数据库
一只专注api接口开发的技术猿2 小时前
商品详情API的SLA保障体系:监控告警、异常检测与自动化修复
运维·数据库·架构·自动化
WarPigs2 小时前
SQL Server笔记
服务器·数据库·sqlserver
爱丽_3 小时前
事务隔离级别与一致性:从现象到实现(MVCC 与当前读)
数据库·mysql
会飞的大可3 小时前
Elasticsearch:搜索引擎作为 NoSQL 数据库
数据库·elasticsearch·搜索引擎
LaughingZhu3 小时前
Product Hunt 每日热榜 | 2026-04-03
数据库·人工智能·经验分享·神经网络·chatgpt·语音识别