PostgreSQL 与 MySQL 相比,优势何在?

目前在国内应用PostgreSQL做开发会不会引来性能不佳和后期维护困难的问题?PostgreSQL的前景如何?全球有没有非常成功的应用案例?

范狂夫

谢邀。

上午应景应邀回复了个.NetJava™的老生常谈口水战话题,立刻「政治敏感」了。各位感兴趣可以去看备份:《范狂夫: .NET 开源对 Java 的冲击有多大?》。看看里面到底有没有「敏感」内容。

而这个「开源数据库」的问题,之前很多网友从技术角度回复过了,各位可以看看那些答案。这里还是按照惯例展开其中充沛的政治和意识形态内容。

一言以蔽之:MySQLOracle™收购了!MySQLOracle™收购了!MySQLOracle™收购了!

重要的事情说三遍,还用我解释么?

非要解释也可以,那就是MySQL流行的时候还没被收购,开源社区所谓「LAMP」技术栈,曾经对互联网极大繁荣作出相当重要的贡献,然后就被「伪装成IT企业的律师事务所」盯上了。

随便举个例子,知乎首页推荐当中也经常出现的,各种「菜鸟建站方案」当中,最流行的是「WordPress」,据称插件极大充沛,包括但不限于「电子商务」,细节各位请自行搜索。

但是,这个流行的WordPress方案,就是依赖MySQL数据库的,虽然有第三方提供支持其它数据库的补丁,但基本上都是包装一层。为啥官方自己没有推出,据称是为了兼容各种既存插件。

好了,现在各位知道「伪装成IT企业的律师事务所」盯上MySQL是为什么了吧?按照数学渣的职业习惯「不惮以最大的恶意揣测」,这是「放长线钓大鱼」「将欲取之必先与之」,将来贸易战升级兲朝网信事业面临地毯式索赔的时候,可别说没人提醒过。

哪怕从「技术」角度观察,自打Oracle™「有錢是真的能為所欲為的」(先甭管这帮讼棍的钱是从哪里来的)之后,市面上也出现了《MySQL,从删库到跑路》之类名著。

上了年纪之后就容易唠叨,唉,曰若稽古,回忆当初「不入流码农」时期对数据库的感想。

首先,SQL也有各种方言存在。就从其它答案也能看出,按照「学院派」标准SQL写法,可以保证最大限度兼容性和移植性,而对SQL标准的支持程度,体现了数据库系统的成熟程度。

其次,在信息技术野蛮增长时期,还没有「标准化」的时候,各厂商都有自己的实现,配合自家既存技术,以达到「短平快」开发部署的目的。

我中华兲朝上国自有国情在此,按照繁荣的中文互联网上各种盛况进行估计,普及最广的「数据库」应该是「Microsoft™©® Access™©®」,随着「Microsoft™©® Office™©®」专业版那庞大的装机量发布。

Access数据库就不是标准SQL,其中使用了一些「Microsoft™©® VBA™©®」语法,使用「DAO」驱动程序。而Access的重点也不是数据库性能,而是全套「解决方案」。就是说,只用Access的情况下,照样可以开发出有「窗体」作为用户界面,有「报表」作为输出内容的,乍一看和普通exe没啥区别的「应用程序」。

本世纪初,网上有熟练码农吹嘘,「进销存」私活能轻轻松松每天接一个,各种书店了门市部了小卖部了「市场很大」,差不多都是这么干的。客户不用提醒也知道装个Office,剩下就是把「*.mdb」拷过去用了。于是,小微企业信息化工作中,面对「PowerBuilder™©®」和「Delphi™©®」的「竞争」,微软技术栈胜出。

而需要更强大功能的场合,微软买了「FoxBase™©®」改名「FoxPro™©®」,就是弥补Access与竞争对手的差距。这种「单机数据库应用」类型的产品,在互联网还不够繁荣的时代,是重要的信息化工作手段。

当时其它「竞争产品」如「Borland™©® InterBase™©®」,已经开源为「Firebird」了。顺便,「SQL Server」有两套,6.5版及以前是「Sybase™©®」与微软合作的,后来分道扬镳了也。那「Sybase™©® PowerBuilder™©®」如今也不流行了。

就说单机版数据库吧,Java™技术栈有个「Apache Derby」,100%Java™实现,开源社区贡献的 ,也被Oracle™拿走打包进官方发布了。而「100%.Net」数据库也有第三方实现,但是微软不需要拿走,自家操作系统里面可以随便装本地代码数据库,比方说「SQL Server Compact」。

扯远了。目前往精致方向发展的数据库,有个SQLite,纯C写的,开发者声明属于公共领域,没有附加任何协议,对标准SQL的支持很好,已经被许许多多企业和个人用来开发各种项目。

而往宏大叙事方向发展的,都需要结合应用场景。比方说IBMDB2,曾经被童年才俊们嘲笑「有什么用啊」。但这个数据库系统就是要配合IBM的巨型机使用,不是让移动互联网民下载到手机上用大拇指玩的。目前在对规模、安全性、稳定性等要求超过一定程度的系统投标之中,IBM是唯一的一家「史上最牛乙方」,连续运行几十年的成功案例一大堆,「甲方」别无选择。

其它规模较大的系统供应商,都有自己的选择,比方说知乎首页推荐中各种回答就提到了Go-lang是谷歌为了自己的需求开发的,未必适合其它场景。而境内与时俱进的童年才俊们就知道跟风,谷歌用Python就一窝蜂报名Python培训班还企图塞入高考,谷歌改Go-lang了就一窝蜂改Go-lang,也不管用得着用不着,至少把这些「你(这老掉牙的超过34岁的万恶的旧社会码农)听都没听过的新鲜名词」挂在嘴边很时髦。

对比之下,Oracle™有自己的「巨型机」解决方案么?收购了Sun之后也不过延续了「小型机」既存市场老客户罢了,还被Intel架构服务器不停挤占份额。

不扯了,回到问题本身。综上所述,我选「PostgreSQL」。

2018.04.22