今天又看见POSTGRESQL 大佬(就职阿里巴巴),年前又发布了南方大部分单位开始紧俏的POSTGRESQL DBA的职位,并准备迅速培养POSTGRESQL DBA ,供应饥渴的市场的信息。另外微软终于出手了,购买了最初始研发POSTGRESQL 的公司,公司名大家自己搜吧,看来微软坐不住了,要扩大产品线了,甲骨文都没着急,你着急啥。
突然有一个想法,一直知识的潮流是 国外--》国内 , 南方--》北方,一线城市--》 二线城市,这样一个规律。 借用张爱玲的名言,出名要趁早,在这个急速变化的社会,不知道什么时候能赶上某班车,能不能赶上就要看个人的造化了。
POSTGRESQL 其中有一些概念和架构,虽然对于操作没有特别的帮助,但了解后,会对整个数据库的操作有一个更高层次的帮助。所以想写一个关于POSTGERSQL 的系列,一起赶上这趟车。并借用其他数据库的知识,来做一个对比,如果有错误的地方,还请大家指正,共同进步。
——————————————————————————————
首先,要上车,的有个环境吧,这里选择最新的11版本,进行源码安装。这里是最简单的安装,不是最优安装,具体最优安装后续推出,有些东西源码安装后是不能改变的,所以一下安装仅仅支持测试,不建议在生产上直接来,需要根据生产的数据量等等因素来配比如何 POSTGRESQL
1 请准备 CENTOS 7
2 请自己落实POSTGRESQL 用户账号和密码 (这里假设你对LINUX 是有了解的并能自己操作)
3 下载源码包 https://www.postgresql.org/ftp/source/v11.0/
4 建立POSTGRESQL 账号
5 在POSTGRESQL 的账号下解压文件
6 安装依赖包
sudo yum -y install gcc*
sudo yum -y install -y readline-devel
sudo yum install zlib-devel
7 开始编译
./configure
8 make install
9 初始化数据库
/usr/local/pgsql/bin/initdb -D /pgdata/data
启动数据库
/usr/local/pgsql/bin/postgres -D /pgdata/data >logfile 2>&1 &
创建数据库
/usr/local/pgsql/bin/createdb test
连接数据库
/usr/local/pgsql/bin/psql test
如果不出问题你应该已经连接到数据库了
下面一些命令你就可以做了
——————————————————————————————
Postgresql 中所有的对象(表,库,VIEW, PROCEDURE 等等)都有对象的标识符号, oid。
这些对象和ID 之间的对应关系,都保存在 PG_DATABASE 和 PG_CLASS 表中。
下面是POSTGRESQL 一个 database cluster的基本架构图,(自己画的)
在POSTGRESQL 中有一个概念叫 DATABASE CLUSTER,不要误读,其实这个概念和 MYSQL SQL SERVER 中一个INSTANCE 中包含多个 DATABASES 的概念一样,并非CLUSTER。
而PG中也有重要的配置文件:
分别是
pg_hba.conf 权限控制文件
pg_ident.conf 用户验证MAP
postgresql.conf 系统配置文件
在默认的系统配置下,数据库的数据文件在达到 1GB 后会自动产生新的文件。truncate table 相当于清除了文件,下图,清除后,文件的relfilenode编码已经变了,说明产生了新的文件。
同时POSTGRESQL 也有TABLE SPACE的概念,可以建立TABLE SPACE (和ORACLE的很类似),但不同的是,你不在需要指定文件归属于那个TABLE SPACE,只需要建立空间即可,指明TABLE SPACE 的OWNER。系统会自动建立文件,以OID 为名。一个库下的每个表,或索引都可以有自己的TABLE SPACE (逻辑上可以,但实际上这样做比较麻烦)。 大家可以根据磁盘的性能,来将重要的表 ,索引归属到一个TABLE SPACE。同时建立TABLE SPACE 还有选择项可以选择,可以通过设置浮点数字来让数据库在查询时更清楚,数据文件所处的磁盘性能如何,并更具有倾向性的使用索引或全表扫描,这在其他数据库中是没有类似设置,具体请查看POSTGRESQL 相关文档,设置不当适得其反。
每个PG的页面是顺序组成的,有相关的编号,而每个页面中也有元组(数据块)的位置和偏移量,以及HEAD 到 元组的指针,等,所以要读取数据值需要知道 PAGE NUMBER + TUMPLE NUMBER 就能找到相关数据。(自己画的,如需,请注明出处)
当然元组是不能超过页面的进行跨页面进行存储的,所以就有了 TOAST 方式来存储一个比页面还大的数据(请查看相关文档)。相关TOAST 逻辑上可以存储1G的数据。
每个表上可以查看每个元组的PAGE NUMBER 和 元组指针号,这和ORACLE 又是很类似,每个页面也都有 ROWNUMBER。
所以都可以快速的访问到数据。
—————————————————————————————