一、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。 -
查询示例:
sqlSELECT oid, relname FROM pg_class WHERE relkind = 'r';
-
-
表空间(Tablespace) :
-
物理存储位置的逻辑映射,允许数据分散存储。
-
创建表空间:
sqlCREATE TABLESPACE ts_custom LOCATION '/mnt/ssd_data';
-
(4)base 的物理布局
- 目录结构:
base/<database_oid>/<table_oid>- 每个表对应一个或多个文件(如
12345、12345_fsm)。
- 每个表对应一个或多个文件(如
- 文件类型:
- 主文件(
.data):存储实际数据。 - 空闲空间映射(
_fsm):记录数据页的空闲空间。 - 可见性映射(
_vm):加速 VACUUM 操作。
- 主文件(
(5)表空间与数据库关系总结
| 特性 | 表空间 | 数据库 |
|---|---|---|
| 作用 | 定义物理存储位置 | 逻辑数据容器 |
| 多对象支持 | 可包含多个数据库的对象 | 可跨多个表空间存储对象 |
| 依赖关系 | 独立于数据库存在 | 依赖表空间存储数据 |
| 管理命令 | CREATE TABLESPACE |
CREATE DATABASE |