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

相关推荐
Databend18 小时前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
ClouGence2 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将2 天前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils3 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波3 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
倔强的石头_4 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_7 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab8 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence8 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神8 天前
三、用户与权限管理
数据库·mysql