PostgerSQL物理,逻辑,进程结构以及系统表系统函数详解
PostgreSQL逻辑结构
我们在初始化数据库时会建立cluster,cluster下的每个数据库都是隔离状态,不能跨库访问,除非由第三方插件之类的。在cluster中有一张全局的表,保留了该cluster下所有库的信息。
随便从哪个库里访问这张表都行,因为是全局的,可以看到有哪些database。
这个目录相当于cluster,处于最顶级。
然后连接具体的数据库postgres,然后进入数据库后查看schema,在schema下面就是一些具体的如表,索引等具体对象了。
PostgreSQL物理结构
表,索引这些东西都会有单独的文件来存,是在./configure。。。后面跟一堆参数时指定,默认是1个G,如果超过一个G会生成新文件,文件名就会依次自动排上序号。
0号数据块第一条记录。
PostgreSQL进程结构
我这里的2284是父进程,他会启动一堆子进程。
PostgreSQL系统表
每一条记录都有oid。
这个命令可以看到系统表。
来单独分析一下pg_class这张表。
目录 pg_class 记录表和几乎所有具有列或者像表的东西。这包括索引(但还要参见 pg_index )、序列、视图、物化视图、组合类型和TOAST表,参见 relkind 。下面,当我们提及所有这些类型的对象时我们使用“关系”。并非所有列对于所有关系类型都有意义。
然后我们还可以在pg_am表里看到支持哪些索引。
PostgreSQL系统视图
PostgreSQL管理函数
注意,下面这个函数要去配置文件里改东西才能完成在线备份。
数据可靠性
存储控制器那里如果没有断电保护,那么建议关闭,有断电保护就建议打开,硬盘write cache那里通常没有断电保护,建议关闭。postgresql只能保证buffer cache写到存储控制器。