前几天我写了篇数据库库国产化时代DBA该学点啥数据库的文章,其中有句话说是如果真的拿不准该学点啥,那么学点PG也是好的,所以今天就来聊聊如何学PG的事情。
如果有同学真的想学点PG数据库,从哪里入手比较好呢?很多朋友学PG都是在工作中遇到了,用到哪学到哪。这也是一种学习方法,只是不够系统。遇到过的问题往往稍微变形一下,或者用在一个基于PG的国产数据库上,某些经验就不管用了。数据库知识是十分系统的,因此系统学习PG数据库的基础知识还是十分必要的。
PG数据库和Oracle相比,不算太复杂,不过比起MySQL这样的数据库来说还是要复杂得多的。而且PG是一种十分学院派的数据库产品,因此很多基础概念如果不搞清楚,对于深入理解PG也还是会有些麻烦的。
如果你以前已经有其他数据库运维的经验,则可以先系统地从理论上去学习PG,再进行实践就行了。如果是一个新手,则必须先装一套PG数据库,先去学习一下基本的数据库操作和SQL语句,掌握了最基本的操作再来学习理论,否则你会觉得云山雾罩的看不明白。对于已经用过一段时间PG数据库或者已经长时间使用过其他数据库,并且对PG运维也已经有一定使用经验的“老DBA”,如果你想要进一步提升PG的技术,那么我依然建议你放下手头的实践工作,抽点时间去系统学习PG的基础概念。
PG的概念其实比Oracle简单多了,如果你真能花上个把月的空余时间,已经能够初步有小成了。学习PG的基本概念,可以去PG官网看资料,PG官网的资料十分繁杂,看起来比较费时间。如果想节约时间,直接看一些成书的资料更好。Hironobu SUZUKI大师的PostgreSQL internal(https://www.interdb.jp/pg/)是学习PG内核原理的十分好的书籍,建议大家根据需要去翻阅。我建议大家翻阅的主要意思是这本书读起来还是需要花点时间的,如果有兴趣有时间从头到尾阅读当然很好。如果你只是想碎片化学习,当遇到一些技术问题想不明白的时候去翻阅可能效率更高。
俄罗斯的PostgreSpro公司的PG 14技术内幕也是一本系统学习PG概念的很好的学习资料。有兴趣的朋友可以到https://edu.postgrespro.com/去下载。这本书的内容更为丰富,如果能够系统学习,基本上就能掌握PG的主要概念了。我把这本书比作是PG的Oracle Concepts。如果你想成为PG的高手,这本书绝对不能错过。如果仅仅是想学习PG的某些概念,以便于更好地做一个PG DBA,那么碎片化学习你关心的章节也是相当不错的。
对于有一定数据库经验的DBA来说,要学习PG数据库首先要理解PG的体系架构,了解PG数据库的体系架构与其他数据库不同的地方。首先了解PG数据库的物理架构,主要的目录都是干什么的,里面存储什么数据。
其次了解PG的逻辑架构,PG的表和索引都是如何组织的 ,PG的表和Oracle的表有何不同,维护PG的的表和索引与Oracle有何不同,掌握了这些基础知识算是初步入门了。
日常管理中还有一个十分重要的东西,那就是权限问题,PG的权限与Oracle的虽然模型相似,不过还是有极大的区别的。掌握日常工作中需要为应用和开发团队授予的各种权限,制定出一套适合于本企业的权限管理规范是DBA需要做的事情,因此需要尽早掌握这些概念。
另外一个重要的概念,锁和事务也是DBA需要尽快掌握的。我以前在公众号发过多篇关于PG锁的文章,其中一篇是《PG数据库的锁咋弄得这么复杂呢》,就是感慨于PG的锁不如Oracle那么直观,观察起来比较绕。如果不把PG的锁搞明白了,在运维中还是比较头痛的。俄罗斯postgrepro公司的PG大师叶格尔-罗格夫关于PG锁的系列文章是我建议大家都去读一读的。
另外PG的数据库连接池(比如PGPOOL)、高可用复制、备份恢复等,也都是在运维中必然遇到的问题。当你了解了PG的一些基础的运维操作和概念后,需要通过实验尽快掌握这些技术。
在学习这些技术的时候,都免不了了解PG的一些数据字典表和基本视图。对于几十张常用的PG数据字典表和视图的掌握是DBA从初级升级到中高级的必由之路,多花点时间去学习还是必要的。
PG学习所需要的环境并不复杂,你只需要有一台安装了LINUX的PC机或者服务器就可以启动你的学习过程。实在没有,如果你的笔记本电脑配置还可以,那么通过WSL子系统模拟,也可以部署一些简单的PG学习环境,在这个环境上学习就足够用了。
以上是今天我给PG学习者的一些个人建议,希望对你的PG学习之旅有所帮助。