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

数据库在逻辑上分成多个存储单元,称作表空间。表空间用作把逻辑上相关的结构放在一起。数据库逻辑上是由一个或多个表空间组成。

新创建的数据库默认创建下面的表空间:

1)Catalog表空间 存放系统表信息;
2)System表空间 存放用户数据;
3)Temp表空间;

4、模式-Schema

自动创建的系统模式如下:

1)PG_CATALOG2)PG_LARGEOBJECT3)PG_TOAST4)PG_PARTITION

默认的用户模式PUBLIC。

5、段-segment

6、区-extent

7、块-block

8、数据库对象-Database object

  1)模式对象表、索引、序列、大对象、视图、
            函数【通过函数,可以在数据库服务器端执行指令程序】
            存储过程、
          【数据类型:包括文本、任意精度的数值数组、JSON 数据、枚举类型、XML 数据】
        、触发器、包 … …
  2)非模式对象用户、数据库

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数据库结构的更多相关文章

  1. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  2. Postgresql 导出表结构信息

    项目用了Postgresql 数据库,项目组要出表结构的文档,手写太麻烦,想用slq脚本导出一份.查了一番资料,似乎没有多好的方法.dump方式导出的脚本太乱,没法直接写在word文档里.只能自己写s ...

  3. PostgreSQL数据库基本配置

    一.安装 首先安装PostgreSQL客户端: sudo apt-get install postgresql-client 然后,安装PostgreSQL服务器: sudo apt-get inst ...

  4. 在linux系统下检查postgresql数据库安装,登录数据库及简单的查看数据库

    1.    检查Linux系统是否安装数据库 首先查看自己的系统是否安装了postgresql数据库命令如下: rpm -qa | grep postgresql 如果没有显示查询结果(如下图所示)说 ...

  5. postgreSQL数据库(索引、视图)

    索引的含义与特点 索引是一个单独的.存储在磁盘上的数据库结构,它们包含对数据所有记录的引用指针,postgresql列类型都可以被索引,对相关列索引是提高查询操作效率的最佳途径.例如,查询select ...

  6. postgresql数据库的数据导出

    一.pg_dump的用法:数据库的导入导出是最常用的功能之一,每种数据库都提供有这方面的工具,例如Oracle的exp/imp,Informix的dbexp/dbimp,MySQL的mysqldump ...

  7. postGreSQL数据库部署及简单使用

    1,deployByRuiyIns rpm -ivh http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.no ...

  8. 连接postgresql数据库

    初装postgresql数据库会产生默认的数据库用户postgres和同名的数据库.但是我的linux用户是jm,两者不一致,连不上数据库.于是先把linux用户切换为postgres.(数据库会为l ...

  9. 【Jhipster】升级/修改 数据库结构

    前提 1.jhipster环境,jdk1.8,yeoman,node.js安装环境参考官方wiki,环境问题参考我的博客,如果出现注册中心空白页,请参考博客 2.首先需要启动jhipster基础服务, ...

随机推荐

  1. ThreadLocal源码阅读笔记

    功能描述 ThreadLocal解决了访问共享变量的阻塞问题,并且不需要像CAS操作一样牺牲CPU资源,它为每一个线程维护了一个变量副本,每个线程在访问ThrealLocal里面的变量时实际上访问的是 ...

  2. 在Visual Studio 中使用git——标记(Tag)管理(十)

    在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...

  3. 密码学系列之:feistel cipher

    密码学系列之:feistel cipher 简介 feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构.它是由德籍密码学家Horst Feistel在I ...

  4. Task01:初识数据库

    本章主要讲解数据库安装和数据库基本介绍,考虑易用性及普及度,本课程采取mysql进行教学. 1.1 初识数据库 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合.该数据集合称 ...

  5. DDD实战课(实战篇)--学习笔记

    目录 DDD实践:如何用DDD重构中台业务模型? 领域建模:如何用事件风暴构建领域模型? 代码模型(上):如何使用DDD设计微服务代码模型? 代码模型(下):如何保证领域模型与代码模型的一致性? 边界 ...

  6. 【题解】Grape luogu1156改 dp

    考试时被数据坑了 题目 原题 传送门 题目描述: 众所周知的是oyyf 沉迷葡萄,今天的oyyf为了葡萄溜到了He 大佬家的葡萄园偷葡萄,可惜的是还没偷到葡萄He 大佬就来葡萄园了,吓的oyyf 直接 ...

  7. WEB安全新玩法 [6] 防范图形验证码重复使用

    在完成关键业务操作时,要求用户输入图形验证码是防范自动化攻击的一种措施.为安全起见,即使针对同一用户,在重新输入信息时也应该更新图形验证码.iFlow 业务安全加固平台可以加强这方面的处理. 某网站系 ...

  8. js笔记9

    1.面向对象 js一开始就是写网页特效,面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差,所以作者就受到了java和c语言的影响,往面向对象靠齐.js天生有一个Ob ...

  9. Ubuntu 之 Esc and CapsLK

    Ubuntu 更换 CapsLK 和 ESC 内容如下 // vim .xmodmap !! No Caps Lock clear lock !! Make Caps_lock an escape k ...

  10. 第5章:资源编排(YAML)

    5.1 编写YAML注意事项 YAML 是一种简洁的非标记语言. 语法格式: 缩进表示层级关系 不支持制表符"tab"缩进,使用空格缩进 通常开头缩进 2 个空格 字符后缩进 1 ...