暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

4_PostgreSQL存储空间与权限管理

原创 怕晒的太阳 2022-11-24
795

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:表示一次性给予所有可以授予的权限  

最后修改时间:2022-11-26 11:49:21
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论