PostgreSQL 初体验

目录

一、PostgreSQL

1. 简介

2. 特点

(1) 开源免费(Open Source)

(2)标准兼容(SQL Compliance)

(3) 丰富的数据类型(Data Types)

(4) 强大的事务与并发控制(Transactions & Concurrency)

(5)高度可扩展(Extensibility)

(6)企业级安全性(Security)

3. 优势

4. 架构

5. 应用场景

6. 结论

二、安装PostgreSQL

1. 编译安装

(1)安装编译安装所需环境

(2)编译安装

(3)配置环境变量

(4)登录数据库

三、PostgreSQL 结构

1. PG 的逻辑结构​编辑

2. PG 的物理结构

(1)软件安装目录

(2)数据库目录结构​编辑

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

(4)base 的物理布局设计

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


一、PostgreSQL

1. 简介

PostgreSQL(简称Postgres)是一款功能强大的开源对象-关系型数据库管理系统(ORDBMS),强调对SQL标准的全面支持,并逐渐发展成为兼具关系型数据库严谨性和面向对象灵活性的开源数据库。

其核心设计理念包括高度可扩展性、数据完整性及对复杂查询的支持,广泛应用于企业级应用、数据分析、地理信息系统(GIS)等领域

2. 特点

(1) 开源免费(Open Source)
  • 基于 PostgreSQL License(类 BSD 协议),允许自由使用、修改和商业发布,无版权限制。
  • 社区驱动开发,全球开发者贡献代码,版本迭代活跃(如近年新增 JSONB 全文索引、向量存储等前沿功能)。
(2)标准兼容(SQL Compliance)
  • 支持 ANSI SQL 标准(如窗口函数、CTE、事务隔离级别),同时扩展了大量企业级特性(如递归查询、行级锁)。
  • 兼容 SQL/JSON 标准,JSONB 类型支持高效索引和查询,适合现代 Web 应用的半结构化数据场景。
(3) 丰富的数据类型(Data Types)
  • 基础类型:除传统数值、字符串、日期外,支持数组(Array)、枚举(Enum)、范围类型(如 int4range 表示整数区间)。
  • 高级类型
    • 空间数据:通过 PostGIS 扩展支持几何图形(Point、LineString、Polygon)和地理信息系统(GIS)功能。
    • 全文搜索:内置 tsvector/tsquery 类型,支持分词、模糊匹配和相关性排序。
    • 新兴类型:支持 JSONB(可索引的 JSON)、XML、IPv6、UUID,以及 PostgreSQL 15 + 新增的向量类型(用于 AI / 机器学习场景)。
(4) 强大的事务与并发控制(Transactions & Concurrency)
  • ACID 强一致性:通过预写日志(WAL, Write-Ahead Logging)保证数据持久化,崩溃恢复机制可靠。
  • MVCC(多版本并发控制):默认隔离级别为 Read Committed,通过版本号实现无锁读,避免写锁阻塞读操作,适合高并发场景(如电商订单、实时分析)。
  • 细粒度锁控制:支持表级锁、行级锁(SELECT ... FOR UPDATE)和 advisory lock(自定义应用层锁)。
(5)高度可扩展(Extensibility)
  • 插件生态:通过 CREATE EXTENSION 机制快速集成功能,例如:
    • PostGIS:空间数据处理,用于地图服务、物流轨迹分析。
    • pg_cron:定时任务调度,替代 Linux cron。
    • Citus:分布式扩展,支持分库分表,提升大数据量下的查询性能。
    • pg_stat_statements:SQL 性能分析,定位慢查询。
  • 自定义函数:支持 PL/pgSQL、Python、Java 等多语言编写存储过程,甚至动态加载 C 语言扩展。
  • 存储过程与触发器:支持复杂业务逻辑下沉到数据库层,减少应用层压力。
(6)企业级安全性(Security)
  • 认证机制:支持 LDAP、Kerberos、SCRAM-SHA-256 密码认证,兼容多认证源(如 AWS IAM 数据库认证)。
  • 权限控制:基于角色(ROLE)的细粒度权限管理,支持表级、列级权限(如敏感字段隐藏)和行级安全策略(RLS, Row-Level Security),实现 “不同用户看到不同数据”。
  • 加密能力
    • 传输层:支持 SSL/TLS 加密连接,防止数据窃听。
    • 存储层:通过 pgcrypto 扩展实现字段级加密,或集成云服务商的透明数据加密(TDE)。
  • 审计日志:内置日志记录功能,可追踪 SQL 操作,满足合规性要求(如 GDPR、等保 2.0)。

3. 优势

  • 高性能:PostgreSQL 通过优化查询计划、支持并行查询、分区表等特性,提供卓越性能表现,即使处理大规模数据和高并发访问时,也能保持高效响应速度。

  • 高可用性:支持主从复制、流复制和逻辑复制等多种复制方式,使数据库系统轻松实现高可用性和容灾备份,故障时能快速恢复服务,确保业务连续性。

  • 灵活性:丰富的数据类型和高级特性使其能灵活应对各种复杂业务场景,无论是结构化数据还是非结构化数据,都能提供强大支持。

  • 社区支持:拥有活跃的开发者社区和丰富生态系统,社区中有大量教程、文档和插件可供使用,众多经验丰富的开发者也愿意分享经验、解答问题。

  • 成本效益:作为开源软件,降低了企业成本投入,其卓越性能和广泛应用场景使其成为许多企业的首选数据库产品。

4. 架构

  • 逻辑层面包含数据库集群、表空间、数据库、Schema、表、索引等结构;

  • 物理层面包括数据文件、日志文件、参数文件、控制文件等存储方式,其中数据块(Page)作为数据读写基本单位,在 PostgreSQL 中扮演关键角色。通过优化数据块的读写效率和布局方式,PostgreSQL 能进一步提高性能表现。

5. 应用场景

  • 企业应用:如ERP、CRM、HRM等系统,需要处理复杂的事务和查询操作;postgresql凭借其高性能和事务处理能力,能够为企业应用提供稳定可靠的数据支持。

  • 数据分析:在数据仓库和商业智能领域,PostgreSQL 凭借其丰富的数据类型和高级查询特性,能够轻松应对大规模数据分析和挖掘任务。

  • web 应用:对于需要高并发访问和实时数据处理的 Web 应用来说,PostgreSQL 的 MVCC 机制和扩展性特性使得其成为了一个理想的选择。

  • 地理信息系统:通过 PostGIS 扩展,PostgreSQL 能够支持地理空间数据的存储和分析功能,为 GIS 应用提供了强大的数据支持。

  • 物联网与大数据:随着物联网和大数据技术的不断发展,PostgreSQL 凭借其高性能、可扩展性和丰富的数据类型特性,在物联网和大数据领域中也得到了广泛的应用。

6. 结论

PostgreSQL 是一款功能强大、开源的数据库管理系统,在信息化建设中发挥越来越重要的作用,其丰富的特性、卓越的性能、灵活的应用场景以及强大的社区支持使它成为了众多企业与开发者的首选数据库产品。

二、安装PostgreSQL

1. 编译安装

(1)安装编译安装所需环境
1.下载依赖包   dnf -y install gcc libicu libicu-devel readline-devel zlib zlib-devel
2. 解压  tar zxvf
3. 切换进目录
(2)编译安装
配置编译   ./configure --prefix=/usr/local/pgsql
make && make install
(3)配置环境变量
5.创建用户  useradd postgres
6.创建数据存储目录   mkdir /usr/local/pgsql/data
7.改目录归属  chown -R postgres /usr/local/pgsql/data
8.配置环境变量     vim /etc/profile函数库路径 	export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/loacl/pgsql/lib命令路径		export  PATH=$PATH:/usr/local/pgsql/bin
9.刷新环境变量   source /etc/profile
查看    echo $PATH/LD_LIBRARY_PATH
(4)登录数据库
10.初始化
切换用户  su - postgres
初始   /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
11.启动数据库
启动程序  /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
12.登录
psql

三、PostgreSQL 结构

1. PG 的逻辑结构

  • 集群(Cluster)

    • 一个 PostgreSQL 服务实例对应一个集群,包含多个数据库。

    • 通过 initdb 初始化时创建,是物理数据存储的顶层容器。

  • 数据库(Database)

    • 集群内可创建多个数据库,每个数据库独立(默认不共享数据)。

    • 用户通过 CREATE DATABASE 创建,不同数据库通过名称隔离。

  • 模式(Schema)

    • 每个数据库包含多个模式(类似于命名空间),用于逻辑分组表、视图等对象。

    • 默认模式为 public,可通过 CREATE SCHEMA 创建新模式

  • User 用户

    • postgres 用户是默认创建的超级管理员;每个数据库都有一个 OWNER 用户,每个用户可以 OWNER 多个数据库。

  • 数据库对象

    • 包含 table、index、view、序列、函数等,数据最终存储在表中。表由多个 page[block]组成,一个 page 包含(页头信息、空闲空间、Tuple),实际存储数据的区域对应到物理层面上是文件,由 page 构成。

    • 模式内包含具体对象,如表、视图、索引、函数等。

    • 对象通过 <schema>.<object> 格式引用(如 public.users

  • tablespace:存储数据库的一个逻辑空间,可以存放不同的数据库,对应在物理层面上是一个目录。

  • OID:所有数据库对象都有各自的 oid(object identifiers),oid 是一个无符号的四字节整数,相关对象的 oid 存放在相关的 system catalog 表中,如数据库的 oid 和表的 oid 分别存放在 pg_database、pg_class 表中。

  • 总结
    (1)从大小排列:database cluster --> databases --> schema --> objects。
    (2)Tablespace 是数据最大的存储空间,Database 是构成表空间的存储单元,pages 是 PostgreSQL 数据库中最小的 IO 单元。

2. PG 的物理结构

(1)软件安装目录

其中各个目录里的内容及用途:

  • bin:二进制可执行文件,是 PG 数据库的所有相关命令所在,为方便使用需设置到环境变量中
  • lib:动态库目录,PostgreSQL 运行所需要的动态库都在此目录下
  • share:放有文档和配置模板文件,一些拓展插件的 SQL 文件在此目录下的 extension 中
  • data:目录是数据库集群的物理存储核心,包含用户数据、元数据和配置文件
  • include:目录则提供编译扩展和客户端程序所需的 C 语言头文件
(2)数据库目录结构
-bash - 4.2$ tree -L 1 -d /usr/local/pgsql/data/
/usr/local/pgsql/data/ —— 数据目录├── base —— 表和索引文件存放目录
├── global —— 影响全局的系统表存放目录
├── pg_commit_ts —— 事务提交时间戳数据存放目录
├── pg_dynshmem —— 被动态共享所使用的文件存放目录
├── pg_logical —— 用于逻辑复制的状态数据
├── pg_multixact —— 多事务状态的数据
├── pg_notify —— LISTEN/NOTIFY 状态的数据
├── pg_replslot —— 复制槽数据存放目录
├── pg_serial —— 已提交的可序列化信息存放目录
├── pg_snapshots —— 快照
├── pg_stat —— 统计信息
├── pg_stat_tmp —— 统计信息子系统临时文件
├── pg_subtrans —— 子事务状态数据
├── pg_tblspc —— 表空间
├── pg_twophase —— 预备事务状态文件
├── pg_wal —— 事务日志(预写日志)
└── pg_xact —— 日志提交状态的数据存放目录#是最小化系统,可以临时安装包管理器进行查看 yum install -y tree
#或手动解析成树状图  find /usr/local/pgsql/data/ -type d | sed 's/[^-][^\/]*\//--/g; s/^/   /; s/\/$/|/'
#非树状 ls -R /usr/local/pgsql/data/  通过 -R 参数递归显示目录层级

 文件和目录相关作用描述

filesdescription
PG_VERSION包含 PostgreSQL 主版本号的文件
pg_hba.conf控制 PostgreSQL 客户端验证的文件,控制 PG 客户端认证主机、数据库、用户、IP 地址
pg_ident.conf控制 PostgreSQL 用户名映射的文件,配置操作系统用户和数据库服务器上的用户映射
postgresql.conf配置参数文件
postgresql.auto.conf用于存储在 ALTER SYSTEM(版本 9.4 及更高版本)中设置的配置参数的文件
postmaster.opts记录服务器上一次启动的命令行选项
subdirectoriesdescription
base/包含每个数据库子目录的子目录
global/包含集群范围表的子目录,例如 pg_database 和 pg_control
pg_commit_ts/包含事务提交时间戳数据的子目录。9.5 版本以后
clog / 或 pg_xact(9.6 及 earlier)包含事务提交状态数据的子目录,它在版本 10 中重命名为 pg_xact。CLOG 将在 5.4 章节中讲解。
dynshmem/包含动态共享内存子系统使用的文件的子目录。9.4 版本以后
logical/包含逻辑解码的状态数据的子目录。9.4 版本以后
pg_multixact/包含多事务状态数据的目录(用于共享行锁)
pg_notify/包含 LISTEN/NOTIFY 状态数据的子目录
pg_replslot/包含复制槽数据的子目录(9.4 版本以后)
pg_serial/包含已提交的可序列化事务信息(9.1 版本以后)信息的子目录
pg_snapshots/包含导出快照的子目录(9.2 版本以后)。PostgreSQL 的函数 pg_export_snapshot 在此子目录中创建快照信息文件
pg_stat/包含统计子系统永久文件的子目录
pg_stat_tmp/包含统计子系统临时文件的子目录
pg_subtrans/包含子事务状态数据的子目录
pg_tblspc/表空间符号链接目录
pg_twophase/包含 prepare 事务的状态文件
pg_wal/(Version 10 or later)包含 WAL(Write Ahead Logging)段文件的子目录。在版本 10 中从 pg_xlog 重命名而来。
pg_xact/(Version 10 or later)包含事务提交状态数据的子目录。在版本 10 中从 pg_clog 重命名而来。CLOG 将在 5.4 章节中详解。
pg_xlog/(Version 9.6 or earlier)包含 WAL(Write Ahead Logging)段文件的子目录。在版本 10 中重命名为 pg_wal。
(3)数据库有两个基础的对象,一个是oid, 一个是表空间
  • OID(Object Identifier)

    • 每个数据库对象(如表、索引)分配唯一的 32 位整数标识符。

    • 系统表(如 pg_class)记录 OID 与对象名的映射。

    -- 查看表的 OID  
    SELECT oid, relname FROM pg_class WHERE relname = 'users';  
  • 表空间(Tablespace)

    • 定义数据文件的存储路径,允许将数据分散到不同磁盘。

    • 默认表空间:

      • pg_default:存储用户数据(对应 base 目录)。

      • pg_global:存储集群级系统表(对应 global 目录)。

(4)base 的物理布局设计
  • base 目录

    • 每个数据库在 base 下有一个以数据库 OID 命名的子目录。

    • 示例:数据库 OID 为 16384 → 目录为 base/16384

  • 数据文件

    • 每个表或索引对应一个或多个文件(文件名为 relfilenode 值)。

    • 文件命名规则:<relfilenode>(如 12345)。

    • 大表可能被拆分为多个文件(如 12345.112345.2)。

(5)表空间跟数据库关系
  • 在 Oracle 数据库中:一个表空间只属于一个数据库使用,而一个数据库可以拥有多个表空间,属于 “一对多” 的关系。
  • 在 PostgreSQL 集群中:一个表空间可以让多个数据库使用,而一个数据库可以使用多个表空间,属于 “多对多” 的关系。

    系统自带表空间:

  • 表空间 pg_default 是用来存储系统目录对象、用户表、用户表 index、临时表、临时表 index、内部临时表的默认空间,对应存储目录 $PGDATA/base/。
  • 表空间 pg_global 用来存放系统字典表,对应存储目录 $PGDATA/global/。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05_核支持向量机

描述 核支持向量机&#xff08;通常简称为SVM&#xff09;可以推广到更复杂模型的扩展&#xff0c;这些模型无法被输入空间的超平面定义。 SVM 的核心思想是找到一个最优的超平面&#xff0c;将不同类别的数据分开。这个超平面不仅要能够正确分类数据&#xff0c;还要使得两个…

Java + 鸿蒙双引擎:ZKmall开源商城如何定义下一代B2C商城技术标准?

在 B2C 电商领域持续革新的当下&#xff0c;技术架构的优劣成为决定商城竞争力的核心要素。ZKmall开源商城以其创新融合的 Java 与鸿蒙双引擎&#xff0c;为下一代 B2C 商城技术标准勾勒出全新蓝图&#xff0c;在性能、兼容性、拓展性等关键维度实现了重大突破。 一、Java 技术…

关于 Web 漏洞原理与利用:3. CSRF(跨站请求伪造)

一、原理&#xff1a; 利用用户登录态伪造操作 CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09;是攻击者“借刀杀人”&#xff0c;借用用户浏览器中已有的登录状态&#xff0c;诱导用户完成攻击者指定的操作。 1. 基本机制分解 1&#xf…

【HTML5】【AJAX的几种封装方法详解】

【HTML5】【AJAX的几种封装方法详解】 AJAX (Asynchronous JavaScript and XML) 封装是为了简化重复的异步请求代码&#xff0c;提高开发效率和代码复用性。下面我将介绍几种常见的 AJAX 封装方式。 方法1. 基于原生 XMLHttpRequest 的封装 XMLHttpRequest。其主要特点如下…

C++ - 网络编程之初始连接(Winsock2 概述、初始连接案例、初始连接案例解读)

一、Winsock2 概述 Winsock2&#xff08;Windows Sockets 2&#xff09;是微软提供的 Windows 平台网络编程库 二、初始连接案例 1、Server #include <winsock2.h> #include <ws2tcpip.h> #include <iostream>#pragma comment(lib, "ws2_32.lib&quo…

Spring Cloud Gateway深度解析:原理、架构与生产实践

文章目录 前言一、概述二、核心架构设计及设计原理2.1 分层架构模型网络层&#xff08;I/O模型&#xff09;核心处理层 2.2 核心组件协作流程路由定位阶段过滤器执行阶段 2.3 响应式编程模型实现Reactor上下文传递背压处理机制 2.4 动态路由设计原理2.5 异常处理体系2.6 关键路…

游戏开发实战(一):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】

文章目录 奇美拉项目游戏规则奇美拉(Chimeras)档案领队成员 结果展示&#xff1a; 奇美拉项目 由于项目工程较大&#xff0c;并且我打算把我的思考过程和实现过程中踩过的坑都分享一下&#xff0c;因此会分3-4篇博文详细讲解本项目。本文首先介绍下游戏规则并给出奇美拉档案。…

说一下响应状态码有哪些?

HTTP响应状态码分类(RFC 7231标准) 1. 1xx(信息类) 临时响应,表示请求已被接收,需要继续处理 100 Continue:客户端应继续发送请求体 101 Switching Protocols:服务器同意升级协议(如WebSocket) 102 Processing(WebDAV):服务器正在处理但未完成 2. 2xx(成功类)…

Linux多进程 写时拷贝 物理地址和逻辑地址

如果不采用写时拷贝技术 直接fork子进程 会发生什么&#xff1f; 如上图所示 橙色为父进程所占内存空间 绿色为子进程所占内存空间。 如果子进程只是需要做出一点点和父进程不一样的 其余和父进程均为相同 第一 就会出现复制开销比较大&#xff1b;第二占用内存空间 所以 …

【TTS回顾】Bert-VITS2深度解析:融合BERT的多语言语音合成模型

一、基本介绍 Bert-VITS2是基于VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的改进版本,通过整合BERT语义编码能力,显著提升了语音合成的自然度和表现力。项目地址:https://github.com/fishaudio/Bert-VITS2 语种自然度相似度流…

win11下docker 的使用方案

Windows 11 Docker 使用方式对比 特性Docker Desktop (使用 WSL 2 后端)直接在 WSL 2 中安装 Docker Engine安装与易用性极简&#xff0c;一键安装&#xff0c;提供直观的 GUI 界面 管理容器、镜像、卷等相对复杂&#xff0c;需手动在 Linux 环境中安装 Docker Daemon 并配置G…

配合本专栏前端文章对应的后端文章——从模拟到展示:一步步搭建传感器数据交互系统

对应文章&#xff1a;进一步完善前端框架搭建及vue-konva依赖的使用&#xff08;Vscode&#xff09;-CSDN博客 目录 一、后端开发 1.模拟传感器数据 2.前端页面呈现数据后端互通 2.1更新模拟传感器数据程序&#xff08;多次请求&#xff09; 2.2&#x1f9e9; 功能目标 …

牛客网NC209794:使徒袭来

牛客网NC209794:使徒袭来 题目背景 问题分析 数学建模 设三位驾驶员的战斗力分别为 a, b, c已知条件&#xff1a;a b c n (n为输入的正整数)目标&#xff1a;求 a b c 的最小值 解题思路 根据算术-几何平均值不等式(AM-GM不等式)&#xff0c;对于任意正实数a, b, c&a…

动态规划之爬楼梯模型

文章目录 爬楼梯模型LeetCode 746. 使用最小花费爬楼梯思路Golang 代码 LeetCode 377. 组合总和 Ⅳ思路Golang 代码 LeetCode 2466. 统计构造好字符串的方案数思路Golang 代码 LeetCode 2266. 统计打字方案数思路Golang 代码 爬楼梯模型 爬楼梯模型是动态规划当中的一个经典模型…

【每天一个知识点】湖仓一体(Data Lakehouse)

“湖仓一体”&#xff08;Data Lakehouse&#xff09;是一种融合了数据湖&#xff08;Data Lake&#xff09;与数据仓库&#xff08;Data Warehouse&#xff09;优势的新型数据架构。它既继承了数据湖对多类型数据的灵活存储能力&#xff0c;也具备数据仓库对结构化数据的高效查…

Linux | mdadm 创建软 RAID

注&#xff1a;本文为 “Linux mdadm RAID” 相关文章合辑。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 Linux 下用 mdadm 创建软 RAID 以及避坑 喵ฅ・&#xfecc;・ฅ Oct 31, 2023 前言 linux 下组软 raid 用 mdadm 命令&#xff0c;multi…

Unity自定义shader打包SpriteAtlas图集问题

Unity打包图集还是有一些坑的&#xff0c;至于图集SpriteAtlas是什么请参考我之前写的文章&#xff1a;【Sprite Atlas】Unity新图集系统SpriteAtlas超详细使用教程_spriteatlas 使用-CSDN博客 问题&#xff1a; 今天碰到的问题是&#xff0c;shader绘制的时候&#xff0c;因…

如何用 OceanBase 的 LOAD DATA 旁路导入进行大表迁移

前言 在日常工作中&#xff0c;我们时常会遇到需要将某个大数据量的单表进行迁移的情况。在MySQL中&#xff0c;针对这样的大表&#xff0c;我们通常会选择先将原表导出为csv格式&#xff0c;然后利用LOAD DATA语法来导入csv文件&#xff0c;这种方法相较于mysqldump在效率上有…

VR 互动实训的显著优势​

&#xff08;一&#xff09;沉浸式学习&#xff0c;提升培训效果​ 在 VR 互动实训中&#xff0c;员工不再是被动的知识接受者&#xff0c;而是主动的参与者。以销售培训为例&#xff0c;员工戴上 VR 设备&#xff0c;就能置身于逼真的销售场景中&#xff0c;与虚拟客户进行面对…

OpenCV 第6课 图像处理之几何变换(重映射)

1. 概述 简单来说,重映射就是把一副图像内的像素点按照规则映射到到另外一幅图像内的对应位置上去,形成一张新的图像。 因为原图像与目标图像的像素坐标不是一一对应的。一般情况下,我们通过重映射来表达每个像素的位置(x,y),像这样: g(x,y)=f(h(x,y)) 在这里g()是目标图…