PostgreSQL初体验

目录

一:PostgreSQL

1:简介

2:特点

3:优势

4:架构

5:应用场景

6:结论

二:安装PostgreSQL

1:编译安装

(1)安装编译

(2)解压源码包

(3)配置环境

(4)配置环境变量

(5)登录数据库

2:dnf安装

三:PostgreSQL结构

1:PG的逻辑结构

2:PG的物理结构

(1)软件安装目录

(2)数据库目录结构

(3)数据库有两个基础的对象 一个是oid,一个是表空间

(4)base的物理布局设计

(5)表空间跟数据库关系


一:PostgreSQL

1:简介

PostgreSQL 是一款开源的关系型数据库管理系统(RDBMS),起源于 1986 年加州大学伯克利分校的 POSTGRES 项目。它遵循 SQL 标准,支持复杂查询、事务处理和多种数据类型,以高扩展性和可靠性著称,被广泛用于企业级应用。

2:特点

  • 开源与自由:基于宽松的 BSD 许可证,允许用户自由使用、修改和分发代码,无商业使用限制。由全球开发者共同维护,确保功能迭代快速且透明,避免了厂商锁定风险。      
  • 标准符合性:支持 SQL:2016 等核心规范,兼容窗口函数、CTE(公共表表达式)、JSON 操作等高级语法。提供与 Oracle、MySQL 等数据库的语法兼容模式(如 PL/pgSQL 类似 Oracle 的 PL/SQL),降低迁移成本。    
  • 数据类型丰富:除基础类型外,支持数组、JSON/JSONB、XML、几何类型(PostGIS 扩展)、范围类型、UUID 等。
  • 事务与并发:ACID 事务支持确保原子性、一致性、隔离性、持久性。
  • 扩展性:通过扩展(Extensions)轻松增强功能
  • 安全性:支持 SELinux 集成(SE-PostgreSQL)强化操作系统级安全。

3:优势

  • 高性能:读写操作互不阻塞,支持高并发场景。提供 B-tree、GIN(全文检索)、GiST(空间数据)、BRIN(大范围数据)等索引类型,优化查询性能。支持多核并行执行(如聚合、扫描、JOIN 操作),加速复杂查询(9.6+ 版本)。
  • 高可用性:支持异步/同步数据复制,保障数据冗余与一致性。通过工具(如 PatroniRepmgr)实现主从切换,最小化停机时间。基于 WAL 日志的精准数据恢复,避免数据丢失。
  • 灵活性:集成 PostGIS(地理空间)、TimescaleDB(时序数据)、Citus(分布式表)等扩展,按需增强功能。兼容关系型、JSON/JSONB(文档)、键值(HStore)、图数据(Apache AGE)等模型。
  • 社区支持:全球开发者与公司(如 AWS、Microsoft、EDB)共同推动功能迭代与问题修复。提供官方手册、教程、Stack Overflow 问答及年度全球会议(PgConf)。AWS RDS/Aurora、Azure Database 等主流云平台提供托管服务,降低运维复杂度。
  • 成本效益:基于 BSD 许可证,无商业使用限制,节省数百万美元级商业数据库授权成本。高效利用普通服务器资源,支持横向扩展(如分片集群),减少硬件投入。

4:架构

  • 进程模型:采用多进程架构,每个客户端连接分配独立进程(通过连接池优化资源)。

  • 存储结构

    • 表空间:支持自定义数据存储路径。

    • 堆表文件:数据以堆表形式存储,支持 TOAST 技术处理大字段。

  • 内存管理

    • 共享缓冲区:缓存常用数据页,减少磁盘 I/O。

    • WAL(预写日志):确保事务持久性和崩溃恢复。

  • 查询处理:解析器→优化器(基于代价优化)→执行器。

5:应用场景

  • OLTP 系统:高并发事务处理(如金融交易、电商订单)。

  • OLAP 分析:通过并行查询和扩展插件支持复杂分析(如 Citus 实现分布式分析)。

  • 地理信息系统(GIS):结合 PostGIS 处理空间数据(如地图服务)。

  • 文档存储:利用 JSONB 类型高效存储和查询半结构化数据。

  • 时序数据:通过 TimescaleDB 扩展支持物联网、监控场景。

  • 混合负载:同时处理事务与分析(HTAP)。

6:结论

二:安装PostgreSQL

1:编译安装

(1)安装编译

yum -y install gcc libicu libicu-devel readline-devel zlib zlib-devel

(2)解压源码包

tar zxvf postgresql-16.3.tar.gz
cd postgresql-16.3
./configure --prefix=/usr/local/pgsql
make && make install

(3)配置环境

#创建用户
useradd postgres
mkdir /usr/local/pgsql/data
chown -R postgres /usr/local/pgsql/data

(4)配置环境变量

vim /etc/profile
export PATH=$PATH:/usr/local/pgsql/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib
#刷新环境变量
source /etc/profile
echo $PATH
echo $LD_LIBRARY_PATH

(5)登录数据库

#初始化数据
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data/ -l logfile start
登录数据库:psql

2:dnf安装

dnf -y install postgresql-server
#初始化数据库
postgresql-setup --initdb
pg_ctl start
登录数据库:psql
su - postgres

三:PostgreSQL结构

1:PG的逻辑结构

数据库集簇(database cluster)

  • 定义:由单个PostgreSQL服务器实例管理的所有数据库的集合,并非“多台服务器的集群”。

  • 初始化:通过 initdb 命令创建,生成一个数据目录(如 PGDATA),包含全局配置和模板数据库。

  • 关键点:一个实例仅管理一个数据库集簇,不同集簇需启动不同实例。

数据库

  • 作用:数据存储的顶层逻辑单元,用户需连接特定数据库进行操作。

  • 独立性:数据库间默认隔离(无法跨库查询),通过 dblink 或 FDW 实现跨库访问。

  • 模板数据库template0 和 template1 用于创建新数据库。

Schema(模式)

  • 层级:位于数据库内部,用于组织表、视图、函数等对象。

  • 权限控制:可通过模式实现对象分组权限管理(如 GRANT USAGE ON SCHEMA schema1 TO user1;)。

  • 默认模式public,若未指定则对象默认创建于此。

user用户

  • 关系:用户是具有登录权限的角色,角色用于权限继承和分组。

  • 权限体系:通过 GRANT/REVOKE 管理对象权限,角色可继承其他角色权限。

tablespace

  • 功能:定义数据库对象的物理存储位置,允许将数据分散到不同磁盘。

  • 使用场景:优化I/O性能(如将频繁访问的表放到SSD),或管理存储空间。

  • 与目录关系:表空间映射到文件系统目录,通过 pg_tblspc 子目录的符号链接实现。

OID

  • 用途:系统内部唯一标识对象(如数据库、表、索引等)。

  • 可见性:默认隐藏,可通过查询系统表(如 pg_database 或 pg_class)查看。

  • 存储方式:32位无符号整数,可能在新版本中被更长的标识符替代。

2:PG的物理结构

(1)软件安装目录

  • 路径示例

    • Linux: /usr/lib/postgresql/14/bin(二进制文件)、/usr/share/postgresql/14(脚本)

  • 关键内容:可执行文件(如 postgres 服务进程)、工具(如 pg_ctl)、头文件等。

(2)数据库目录结构

  • 核心子目录

    • base/:默认表空间下各数据库的数据文件。

    • global/:存储集簇全局表(如 pg_databasepg_authid)。

    • pg_tblspc/:表空间的符号链接(指向自定义表空间路径)。

    • pg_wal/:预写日志(WAL)文件,用于崩溃恢复。

    • pg_xact/:事务提交状态数据。

  • 配置文件postgresql.conf(主配置)、pg_hba.conf(客户端认证)、pg_ident.conf(用户名映射)。

(3)数据库有两个基础的对象 一个是oid,一个是表空间

  • OID物理体现:数据库目录名(如 base/12345,其中 12345 是数据库OID)、文件名(如 12345 表示表的OID)。

  • 表空间路径:通过 CREATE TABLESPACE 指定路径后,在 pg_tblspc/ 下生成符号链接(如 pg_tblspc/67890 -> /mnt/ssd_data)。

(4)base的物理布局设计

  • 结构:每个数据库对应一个以OID命名的子目录,包含:

    • 数据文件:每个表或索引对应一个或多个文件(如 12345.1)。

    • 空闲空间映射文件(_fsm)、可见性映射文件(_vm)。

  • 文件名规则${OID}_${fork}fork 表示文件类型(如主文件无后缀,_init 为初始化分支)。

(5)表空间跟数据库关系

  • 多对多关系

    • 一个表空间可被多个数据库使用(如 db1 和 db2 均可将表存放到表空间 ssd_space)。

    • 一个数据库可使用多个表空间(如 db1 的表分布在 ssd_space 和 hdd_space)。

系统自带表空间:

表空间pg_default是用来存储系统目录对象,用户表,用户表index,和临时表,临时表index,内部临时表的默认空间。对应存储目录$PADATA/base/

表空间pg_global用来存放系统字典表;对应存储目录$PADATA/global/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值