PostgreSQL数据库结构
PG数据存储结构分为:逻辑结构和物理存储。
一、逻辑存储结构是:内部的组织和管理数据的方式【逻辑存储结构适用于不同的操作系统和硬件平台】
二、物理存储结构是:操作系统中组织和管理数据的方式。
1、逻辑存储结构

二、OID [object identifiers]对象标识符 int占4个字节
所有数据库对象都有各自的oid(object identifiers),oid是一个无符号的四字节整数,相关对象的oid都存放在相关的system catalog表中,比如数据库的oid和表的oid分别存放在pg_database,pg_class表中。
2.1、数据库集群-Database cluster
2.2、数据库-Database
2.3、表空间-tablespace
数据库在逻辑上分成多个存储单元,称作表空间。表空间用作把逻辑上相关的结构放在一起。数据库逻辑上是由一个或多个表空间组成。
新创建的数据库默认创建下面的表空间:
4、模式-Schema
自动创建的系统模式如下:
1)PG_CATALOG2)PG_LARGEOBJECT3)PG_TOAST4)PG_PARTITION
默认的用户模式PUBLIC。
5、段-segment
6、区-extent
7、块-block
8、数据库对象-Database object
9、数据表-Table
10、索引-Index
11、序列-Sequence
12、视图-View
2、物理存储结构
在执行initdb的时候会初始化一个目录,通常我们都会在系统配置相关的环境变量$PGDATA来表示,
初始化完成后,会再这个目录生成相关的子目录以及一些文件。
在postgresql中,tablespace的概念并不同于其他关系型数据库,这里一个tablespace对应的都是一个目录。如下图就是PG的物理结构:

1、存储系统主要包括三个部分:
内存中:buffer,MemoryContext;
数据文件,临时文件;
日志文件,日志缓存。
文件和目录相关作用描述
| files | description |
|---|---|
| PG_VERSION | 包含 postgresql 主版本号的文件 |
| pg_hba.conf | 控制 postgresql 客户端验证的文件 |
| pg_ident.conf | 控制 postgresql 用户名映射的文件<br/>配置操作系统用户和数据库服务器上的用户名的映射 |
| postgresql.conf | 配置参数文件 |
| postgresql.auto.conf | 用于存储在 ALTER SYSTEM(版本9.4或更高版本)中设置的配置参数的文件 |
| postmaster.opts | 记录服务器最后一次启动时使用的命令行参数 |
| postmaster.pid | 伴随数据库服务器一同启动,记录数据库服务器进程编号、PGDATA、端口等信息的文件 |
| subdirectories | description |
| base/ | 包含每个数据库子目录的子目录 |
| global/ | 包含群集范围的表的子目录,例如 pg_database、pg_control |
| pg_commit_ts/ (Version 9.5 or later) | 包含事务提交时间戳数据的子目录。 |
| pg_clog/ (Version 9.6 or earlier) \| pg_xact/ (Version 10 or later) | 包含事务提交状态数据的子目录。 |
| pg_dynshmem/ (Version 9.4 or later) | 包含动态共享内存子系统使用的文件的子目录。 |
| pg_logical/ (Version 9.4 or later) | 包含逻辑复制的状态数据的子目录。 |
| pg_multixact/ | 包含多事务状态数据的子目录(用于 shared row locks) |
| pg_notify/ | 包含 LISTEN / NOTIFY 状态数据的子目录 |
| pg_repslot/ (Version 9.4 or later) | 包含复制槽数据的子目录 |
| pg_serial/ (Version 9.1 or later) | 包含已提交的可序列化事务信息的子目录 |
| pg_snapshots/ (Version 9.2 or later) | 包含导出的快照的子目录。 PostgreSQL 的 函数 pg_export_snapshot 在此子目录中创建快照信息文件 |
| pg_stat/ | 包含用于统计子系统永久文件的子目录 |
| pg_stat_tmp/ | 包含用于统计子系统临时文件的子目录 |
| pg_subtrans/ | 包含子事物状态数据的子目录 |
| pg_tblspc/ | 包含指向表空间的符号链接的子目录 |
| pg_twophase/ | 包含 prepare 事务状态文件的子目录 |
| pg_xlog/ (Version 9.6 or earlier) \ | pg_wal/ (Version 10 or later) |
包含预写日志 |
3、逻辑与物理存储关系
1、逻辑关系存在表空间;
2、表空间存在对应的数据文件中;
新创建的数据库对应的数据文件的名称:
Catalog表空间 – databasename.dbfSystem表空间 – Udatabasename.dbfTemp表空间-- Tdatabasename.dbf
- 前面加 “U” 前缀代表用户数据表空间,用于保存用户表的数据。
- 不带 U 代表 是系统表的表空间,用于保存系统表的数据。
- U 前缀的数据文件代表的表空间名为PG。
- 不带U 的数据文件代表的表空间为 CATALOG。
4、PGSQL里面的数据类型

3,PostgreSQL 存储引擎 Heap 具体特性
PostgreSQL 的存储引擎 Heap 和 MySQL 的 InnoDB 都完全遵循ACID,使用的是行级锁。
4,围绕 JSON/JSONB 的全文检索功能以及 12.x 中的 JSON/JSONB Path
JSON 和 JSONB 的区别在于:
(1) JSON 类型以 JSON 格式存储文本数据,在查询的时候需要先做内容解析,然后进行查询。所以写入快、查询慢。
(2)JSONB 类型以 JSON 格式的二进制形式存储数据,在插入的时候需要做文本解析,查询的时候并不需要做解析,因此写入慢,查询快。
而对 JSON/JSONB 涉及到内容包括,下面的内容对对一条数据的一个简单例子:建表、新建数据、查询、模糊查询、数据更新。

本文转载与:http://www.360doc.com/content/21/0325/22/74432652_968889688.shtml
https://zhuanlan.zhihu.com/p/108909378
PostgreSQL数据库结构的更多相关文章
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- Postgresql 导出表结构信息
项目用了Postgresql 数据库,项目组要出表结构的文档,手写太麻烦,想用slq脚本导出一份.查了一番资料,似乎没有多好的方法.dump方式导出的脚本太乱,没法直接写在word文档里.只能自己写s ...
- PostgreSQL数据库基本配置
一.安装 首先安装PostgreSQL客户端: sudo apt-get install postgresql-client 然后,安装PostgreSQL服务器: sudo apt-get inst ...
- 在linux系统下检查postgresql数据库安装,登录数据库及简单的查看数据库
1. 检查Linux系统是否安装数据库 首先查看自己的系统是否安装了postgresql数据库命令如下: rpm -qa | grep postgresql 如果没有显示查询结果(如下图所示)说 ...
- postgreSQL数据库(索引、视图)
索引的含义与特点 索引是一个单独的.存储在磁盘上的数据库结构,它们包含对数据所有记录的引用指针,postgresql列类型都可以被索引,对相关列索引是提高查询操作效率的最佳途径.例如,查询select ...
- postgresql数据库的数据导出
一.pg_dump的用法:数据库的导入导出是最常用的功能之一,每种数据库都提供有这方面的工具,例如Oracle的exp/imp,Informix的dbexp/dbimp,MySQL的mysqldump ...
- postGreSQL数据库部署及简单使用
1,deployByRuiyIns rpm -ivh http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.no ...
- 连接postgresql数据库
初装postgresql数据库会产生默认的数据库用户postgres和同名的数据库.但是我的linux用户是jm,两者不一致,连不上数据库.于是先把linux用户切换为postgres.(数据库会为l ...
- 【Jhipster】升级/修改 数据库结构
前提 1.jhipster环境,jdk1.8,yeoman,node.js安装环境参考官方wiki,环境问题参考我的博客,如果出现注册中心空白页,请参考博客 2.首先需要启动jhipster基础服务, ...
随机推荐
- Java抽象类、继承及多态和适配器的实现
Java继承 方法重写是Java语言多态的特性,必须满足以下条件 在子类中,方法名称与父类方法名称完全相同 方法的参数个数和类型完全相同,返回类型完全相同 方法的访问修饰符访问级别不低于父类同名方法的 ...
- Eclipse安装Pydev插件时所遇到的问题
安装pydev插件折腾了半天,因为总是安装不成功,不成功的表现就是:windows-preferences设置里没有pydev 由于第一次安装这个插件所以不了解安装pydev插件的版本是有要求的,根据 ...
- 02:HTML
HTML介绍 Web服务本质 import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen(5 ...
- .Net RabbitMQ实战指南——HTTP API接口调用
RabbitMQ Management插件还提供了基于RESTful风格的HTTP API接口来方便调用.一共涉及4种HTTP方法:GET.PUT.DELETE和POST.GET方法一般用来获取如集群 ...
- Redis 性能问题分析
在一些网络服务的系统中,Redis 的性能,可能是比 MySQL 等硬盘数据库的性能更重要的课题.比如微博,把热点微博[1],最新的用户关系,都存储在 Redis 中,大量的查询击中 Redis,而不 ...
- 让Github畅通无阻,FastGithub1.0.0发布
前言 我近半年来被github的抽风虐得没脾气了,虽然我有代理的方式来上网,但代理速度并不理想,而且有时代理服务一起跟着抽风.这时候,我会搜索"github访问不了"相关题材,其中 ...
- 测试MySQL锁的问题
测试MySQL锁的问题 目录 测试MySQL锁的问题 1 Record Lock 2 Next-Key Lock 2 死锁测试 InnoDB支持三种行锁: Record Lock:单个行记录上面的锁 ...
- C#调百度通用翻译API翻译HALCON的示例描述
目录 准备工作 参数简介 输入参数 输出参数 使用HttpClient 翻译工具类 应用:翻译HALCON的示例描述 准备工作 HALCON示例程序的描述部分一直是英文的,看起来很不方便.我决定汉化一 ...
- NXNSAttack漏洞简析
漏洞简介: 该漏洞为DNS 放大攻击,是 DDoS 攻击,攻击者利用 DNS 服务器中的漏洞将小查询转换为可能破坏目标服务器的更大负载. 在 NXNSAttack 的情况下,远程攻击者可以通过向易受攻 ...
- Akamai CDN刷新(通过Akamai cli 自动刷新)
1.刷新类型选择 根据官方介绍,可使用多种途径和方式来完成快速刷新 按照简便快捷高效的要求,暂时选择Akamai cli + url 来完成刷新. 2.二进制文件下载地址 文件下载地址:https:/ ...