[转帖]4_PostgreSQL存储空间与权限管理

postgresql,存储空间,权限,管理 · 浏览次数 : 0

小编点评

**数据库空间管理** * 表空间可以将不同的表存放在不同的目录下。 * 通过文件系统的分离,优化存储空间和I/O吞吐。 * 不同的数据库之间无法跨库访问。 * 页:数据块是PostgreSQL中的I/O的最小单元,每个数据块包含块头、行指针和空闲空间。 * 每个数据块包含一个游标,用于描述数据块的起始位置和长度。 * Free Space Map(FSM)文件用于管理空闲空间,每个数据表文件对应一个<filenode>_fsm文件。 * 权限管理通过用户和角色实现。 **权限管理** * 超级用户可以在数据库中做任意的操作,无任何的限制。 * 用户权限包括创建用户、表、视图、函数等数据库对象的权限。 * 数据库对象可以被授予不同的权限,如SELECT、INSERT、UPDATE、DELETE等。 **其他** * CREATE USER命令实际上是CREATE ROLE的同义词。 * 权限层级关系用于表示数据库中不同对象之间的关系。 * 用户权限允许在schema的create权限,就可以在这个schema中创建表、视图、函数等数据库对象了。

正文

https://www.modb.pro/db/566444?utm_source=index_ori

 

1.存储空间

表空间:

• 表空间可以让我们将不同的表存放在不同的目录下

• 通过文件系统的分离,优化存储空间和I/O吞吐

CREATE TABLESPACE tablespace_name [ OWNER owner_name ] LOCATION 'directory' [ WITH ( tablespace_option = value [, ... ] ) ]  

• tablespace_option

        seq_page_cost ,缺省1.0, 执行计划程序对顺序读磁盘页面的成本的估算。

        random_page_cost,缺省4.0, 执行计划程序对随机读的磁盘页面的成本的估计。

        effective_io_concurrency,缺省1, 设置PostgreSQL可以同时被执行的并发磁盘I/O 操作的数量,允许的范围是 1 到 1000,当前这个设置仅影响位图堆扫描。  

数据库:

• 同一数据库簇下的不同数据库之间相互独立

CREATE DATABASE name
 [ [ WITH ] [ OWNER [=] user_name ]
   [ TEMPLATE [=] template ]
   [ ENCODING [=] encoding ]
   [ LC_COLLATE [=] lc_collate ]
   [ LC_CTYPE [=] lc_ctype ]
   [ TABLESPACE [=] tablespace_name ]
   [ ALLOW_CONNECTIONS [=] allowconn ]
   [ CONNECTION LIMIT [=] connlimit ]  

• 缺省会调用template1作为新建数据库的模板

• Tablespace会设置该数据库的缺省表空间

• 不同数据库之间无法跨库访问  

页:

• 页(Page)又称数据块(Block),是PostgreSQL中的I/O的最小单元

• 数据块的大小缺省是8KB, 1~ 32KB之间2的次幂

• 数据块包括了:

        块头:包括LSN、 Checksum、空闲空间起至位置等

        行指针:包含偏移量和长度,占4字节

        空闲空间

        行数据

        特殊数据:索引访问方法

Tuple :

Tuple Header(元组头,23字节)

描述元组数据的数据,描述本条数据(数据库行)的状态,事物id等。

由于数据存储需要对齐(8的整数倍,整体对外长度为24字节),空行的长度为24字节。另外还有4字节的指针。即一条空行总共占用24+4=28字节。

• Tuple就是数据行(row)

• Tuple头部包括:

    xmin:事务控制信息

    xmax :事务控制信息

    cid :命令编号

    ctid:行号

    infomask2:字段数

    infomask:可见性信息

    hoff:header长度

    可选null bitmap:字段是否为空位图

空闲的空间管理

• PostgreSQL使用Free Space Map(FSM)文件管理空闲空间,每个数据表文件都会对应一个<filenode>_fsm文件

• FSM文件实际上是一个3层的B-TREE的索引结构,用于快速空间检索

• FSM文件使用一个字节来记录一个数据块的空闲空间大小的范围,即0~ 255的值表示以32字节为间隔区间的空闲空间,该字节若为N,那么空闲空间范围为N*32~(N+1)*32-1,若N=3,那么空闲空间范围为96~ 127  

可见映射文件

• 当数据被更新或删除后,即使事务提交了也不会马上能够被重复利用,必须要进行空间回收(VACCUM)

• PostgreSQL使用可见性映射文件(Visibility Map File)标记需要清理的数据块,即<filenode>_vm结尾的文件

• VM文件使用二进制位图标识需要清理的数据块 

2.权限管理

权限管理

• PostgreSQL的权限管理通过用户和角色实现

• 超级用户
        PostgreSQL实例级最大权限的用户。
• 用户两种授权方式
        创建用户时指定的。
        通过grant命令赋于。
• 权限层级关系
        Database
        schema
        表、视图、函数等 

超级用户

• 超级用户可以在数据库中做任意的操作,无任何的限制。

        初始化数据库会创建与操作系统名一样的超级用户。

        使用这个初使的超级用户可以建其它的超级用户或普通用户,所以一个数据库中可以有多个超级用户。 

用户权限

• CREATE USER命令实际上是CREATE ROLE的同义词

• 创建用户时指定的权限

        超级用户权限

        创建database权限

        创建其他用户或角色权限

        登录的权限

属主与权限层次关系

• Database

• Schema:每个schema总是属于一个数据库;

• 表、视图、函数等:这些对象都是属于一个schema的

        如果用户有在schema的create权限,就可以在这个schema中创建表、视图、函数等数据库对象了; 

权限说明

• SELECT:该权限用来查询表或是表上的某些列,或是视图,序列。

• INSERT:该权限允许对表或是视图进行插入数据操作,也可以使用COPYFROM进行数据的插入

• UPDATE:该权限允许对表或是或是表上特定的列或是视图进行更新操作。

• DELETE:该权限允许对表或是视图进行删除数据的操作。

• TRUNCATE:允许对表进行清空操作。

• REFERENCES:允许给参照列和被参照列上创建外键约束。

• TRIGGER:允许在表上创建触发器。

• CREATE:对于数据库,允许在数据库上创建Schema;对于Schema,允许对Schema上创建数据库对象;对于表空间,允许把表或是索引指定到对应的表空间上。  

• CONNECT:允许用户连接到指定的数据库上。

• TEMPORARY或是TEMP:允许在指定数据库的时候创建临时表。

• EXECUTE:允许执行某个函数。

• USAGE:对于程序语言来说,允许使用指定的程序语言创建函数;对于Schema来说,允许查找该Schema下的对象;对于序列来说,允许使用currval和nextval函数;对于外部封装器来说,允许使用外部封装器来创建外部服务器;对于外部服务器来说,允许创建外部表。

• ALL PRIVILEGES:表示一次性给予所有可以授予的权限  

与[转帖]4_PostgreSQL存储空间与权限管理相似的内容:

[转帖]4_PostgreSQL存储空间与权限管理

https://www.modb.pro/db/566444?utm_source=index_ori 1.存储空间 表空间: • 表空间可以让我们将不同的表存放在不同的目录下 • 通过文件系统的分离,优化存储空间和I/O吞吐 CREATE TABLESPACE tablespace_name [

[转帖]Redis 4.0 自动内存碎片整理(Active Defrag)源码分析

阅读本文前建议先阅读此篇博客: Redis源码从哪里读起 Redis 4.0 版本增加了许多不错的新功能,其中自动内存碎片整理功能 activedefrag 肯定是非常诱人的一个,这让 Redis 集群回收内存碎片相比 Redis 3.0 更加优雅,便利。我们升级 Redis 4.0 后直接开启了a

[转帖]xtrabackup2.4备份恢复脚本

https://developer.aliyun.com/article/534230#:~:text=xtrabackup2.4%E5%A4%87%E4%BB%BD%E6%81%A2%E5%A4%8D%E8%84%9A%E6%9C%AC%201%201.%20%E4%BD%BF%E7%94%A8%

[转帖]计算机体系结构-(4)内存系统的问题解决方向

https://zhuanlan.zhihu.com/p/436875536 本人lino,即将毕业的研究生,在此记录下学习过程。本次记录跟随是苏黎世邦理工大学的计算机体系结构课程。 本文将介绍一些宽泛的Memory的解决方案。首先是Make memory and controllers more

[转帖]华为连投4家EDA公司 业内头部企业竞相

https://guba.sina.com.cn/?bid=115288&s=thread&tid=26 近日,华为旗下哈勃投资再度“落子”EDA(电子设计自动化软件工具),投资上海阿卡思微电子技术有限公司(下称“阿卡思微”)。这是华为在不到1年的时间内四度投资EDA公司,显示出其对EDA的看好程度

[转帖]eBPF系列学习(4)了解libbpf、CO-RE (Compile Once – Run Everywhe) | 使用go开发ebpf程序(云原生利器cilium ebpf )

文章目录 一、了解libbpf1. BPF的可移植性CO-RE (Compile Once – Run Everywhere)BPF 可移植性面临的问题BPF的可移植性CO-RE (Compile Once – Run Everywhere) 2. libbpf和bcc性能对比3. 了解libbpf

[转帖]tidb4.0.4使用tiup扩容TiKV 节点

https://blog.csdn.net/mchdba/article/details/108896766 环境:centos7、tidb4.0.4、tiup-v1.0.8 添加两个tikv节点 172.21.210.37-38 思路:初始化两台服务器、配置ssh互通——>编辑配置文件——>执行扩

[转帖]Linux服务器跨三网的网卡配置方法(4网卡3网段)

服务器有4个网卡,其中1、2号网卡进行绑定,配置10地址;3号网卡配置互联网地址;4号网卡配置192私网地址。IP信息如下 IP202.*.*.*10.14.167.229192.168.188.202掩码255.255.255.240255.255.255.240255.255.255.192网关

[转帖]BASH编写入门与实例

1 2 3 4 5 6 7 8 9 10 怎么写shell脚本: 。使用任何编辑工具编写shell脚本 例如vi -#!/bin/bash #在第一行放置头格式说明 -#!/usr/bin/gawk //awk需要添加的头格式,让系统知道用什么方式去解析此文件 -#!/usr/local/bin/p

[转帖]Redhat 8 磁盘调度策略变化:NOOP改为NONE

说明 在 redhat 4/5/6/7版本中的NOOP调度策略,从8开始修改为NONE,官方解释: none Implements a first-in first-out (FIFO) scheduling algorithm. It merges requests at the generic