工作中用過這兩個數據庫,但都不是太深入,僅限於用而已,但給我留下的印象就是Pgsql更好些,因為這兩個庫我都遇到過數據丟失的問題,前者我通過網上方法加自己的判斷有驚無險地恢復了,而後者搜索各種資料加問身邊的專家都沒辦法。
剛網上搜了壹下兩者的區別,總體的感覺也是前者是最好的開源關系數據庫,而後者是互聯網行業應用最廣泛的數據庫, 可能應用等多發現的坑也多,網上相關資料也多。如果讓我個人選沒特殊要求情況下會選前者。
關於兩個的區別可以看知乎上相關問題,回答很精彩,
其中壹個如下。
壹、 PostgreSQL 的穩定性極強, Innodb 等引擎在崩潰、斷電之類的災難場景下抗打擊能力有了長足進步,然而很多 MySQL 用戶都遇到過Server級的數據庫丟失的場景——mysql系統庫是MyISAM的,相比之下,PG數據庫這方面要好壹些。
二、任何系統都有它的性能極限,在高並發讀寫,負載逼近極限下,PG的性能指標仍可以維持雙曲線甚至對數曲線,到頂峰之後不再下降,而 MySQL 明顯出現壹個波峰後下滑(5.5版本之後,在企業級版本中有個插件可以改善很多,不過需要付費)。
三、PG 多年來在 GIS 領域處於優勢地位,因為它有豐富的幾何類型,實際上不止幾何類型,PG有大量字典、數組、bitmap 等數據類型,相比之下mysql就差很多,instagram就是因為PG的空間數據庫擴展POSTGIS遠遠強於MYSQL的my spatial而采用PGSQL的。
四、PG 的“無鎖定”特性非常突出,甚至包括 vacuum 這樣的整理數據空間的操作,這個和PGSQL的MVCC實現有關系。
五、PG 的可以使用函數和條件索引,這使得PG數據庫的調優非常靈活,mysql就沒有這個功能,條件索引在web應用中很重要。
六、PG有極其強悍的 SQL 編程能力(9.x 圖靈完備,支持遞歸!),有非常豐富的統計函數和統計語法支持,比如分析函數(ORACLE的叫法,PG裏叫window函數),還可以用多種語言來寫存儲過程,對於R的支持也很好。這壹點上MYSQL就差很遠,很多分析功能都不支持,騰訊內部數據存儲主要是MYSQL,但是數據分析主要是HADOOP+PGSQL(聽李元佳說過,但是沒有驗證過)。
七、PG 得多種集群架構可以選擇,plproxy 可以支持語句級的鏡像或分片,slony 可以進行字段級的同步設置,standby 可以構建WAL文件級或流式的讀寫分離集群,同步頻率和集群策略調整方便,操作非常簡單。
八、壹般關系型數據庫的字符串有限定長度8k左右,無限長 TEXT 類型的功能受限,只能作為外部大數據訪問。而 PG 的 TEXT 類型可以直接訪問,SQL語法內置正則表達式,可以索引,還可以全文檢索,或使用xml xpath。用PG的話,文檔數據庫都可以省了。
九,對於WEB應用來說,復制的特性很重要,mysql到現在也是異步復制,pgsql可以做到同步,異步,半同步復制。還有mysql的同步是基於binlog復制,類似oracle golden gate,是基於stream的復制,做到同步很困難,這種方式更加適合異地復制,pgsql的復制基於wal,可以做到同步復制。同時,pgsql還提供stream復制。