先说说PG的优点
PostgreSQL确实是一款非常出色的开源关系型数据库,SQL特性的支持完善,内核稳定,社区活跃。
对于初学者来说,安装使用极为简单,PG自带的psql客户端是我见过最友好的命令行客户端,至今为止,我操作PG基本都是只使用psql,完全能满足所有需求。
其他的优点,很多前辈都有总结,我就不bb了。我就吐槽一下缺点吧。
再谈谈PG的不足
与排名前三的大佬相比,市场份额毕竟少,因此中文版的参考资料,各种业务场景下成熟的解决方案,运维体系都不够完善。
这三点不足之中,我感受最明显的就是运维手段的缺乏。
PG希望能大规模的在实际生产中使用,扩大自己是市场,首先带来的一个问题就是迁移。从各种商业数据库迁移,开源数据库迁移到PG的成熟方案,目前基本没有一个完善可靠的迁移工具,都是临时定制的,人力成本很高。我做过很多套系统从DB2,mysql到PG的迁移,限制很大,做不到自动化(时间不允许),也很难同步增量数据。
其次,监控。PG虽然提供了各种系统视图(类似pg_stat_xxx
),但是基本都是零散信息的收集,而且基本都只是PG中执行的SQL的信息,并没有记录SQL执行时宿主OS的性能信息,因此当DBA需要分析问题时,但从PG本体中无法获取到完整的性能报告,还要结合OS自身的监控才可以,这就带来的运维的复杂性,两者之间如何精确匹配对应,不好控制,这点上老大哥oracle就做的很好。
然后,小细节。这也是我自己在运维过程中遇到的坑。比如PG不记录DDL的创建时间,以至于做SQL审计的时候,不清楚是谁在什么时候创建了这张表。还有功能上的,比如PG10开放的分区表功能。最开始我看到PG10自带分区了,心里还一阵兴奋,但是当我真正试用之后,发现其实这是很鸡肋的:不支持主键,索引等约束,alter table
只支持加减列,分区个数过多还有性能问题。。。那么基本上,生产环境我是不会用这个功能的,管理上缺陷太多。社区讨论研究了这么多年,却还是只开放了一个基本功能,有点小失望。再有,比如社区公开的yum源,yum上只能下载到最新版本的PG,比如PG更新到10.3之后,10.2的rpm包就没地方可以下载了。。这个真心很不友好。
诸如此类的吧,PG是个好东西,但是想让人用的舒服,用的方便,用的省心,还有很长的路要走。
最后说说学习成本
就我和项目组还有DBA打交道的感受来说,PG运维想上手,难度还是不小的,相比mysql来说。PG的查询优化器很强大,因此执行计划也复杂。加上PG很多独创的设计,比如oid,mvcc,vacuum,统计信息(频繁值
,柱状图
等等),这些东西都散落在PG的各个系统表之中,想要关联起来去分析问题,需要对PG的架构设计有一定的认知才行。
不过呢,也正是因为PG功能强大,所以才复杂。至于PG缺的辅助手段,相信众多的PGer会慢慢完善起来的。
网友评论