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

相关推荐
愿做无知一猿22 分钟前
Nacos连接MySQL异常?DataGrip竟成救星
数据库·mysql
G.O.G.O.G25 分钟前
LeetCode SQL 从入门到精通(MySQL)06(上)
数据库·sql·mysql·leetcode
研究员子楚1 小时前
GEO行业发展标准体系白皮书V2.0-第10卷 · 全球篇:跨国标准协同与全球品牌语义治理框架
数据库·人工智能·microsoft·架构·geo
Omics Pro2 小时前
深度学习多组学互作:组内+组间
数据库·人工智能·深度学习·mysql·搜索引擎·自然语言处理
残*影3 小时前
如何优雅地保存MySQL数据变更历史?
数据库·mysql
乐观的Terry4 小时前
3、数据库设计与领域实体
java·数据库·spring boot·spring cloud·ai编程
舞影天上4 小时前
RuoYi-Vue-Plus Docker 部署踩坑:MySQL 中文双重编码的根因与修复
数据库
Database_Cool_4 小时前
数据仓库弹性扩缩容怎么实现?AnalyticDB MySQL 在线扩容 0 中断实战
数据库·数据仓库·mysql·阿里云
Wzx1980124 小时前
Redis&ES——Retriever的抽象实现
数据库·人工智能·redis·elasticsearch
G.O.G.O.G5 小时前
《LeetCode SQL 从入门到进阶(MySQL)》06(下)
数据库·sql·oracle