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