SQL兼容性javascript
PostgreSQL 9.5 兼容 SQL:2011 子集 http://www.postgresql.org/docs/9.5/static/features-sql-standard.html MySQL 5.7 兼容 SQL:1999 子集
功能差別 - 高級SQLphp
遞歸查詢, connect by, 樹形查詢
PostgreSQL 經過(with 或 tablefunc支持)支持,MySQL 不支持
例子
https://yq.aliyun.com/articles/240 http://www.postgresql.org/docs/9.5/static/tablefunc.html 窗口查詢, window over PostgreSQL 支持,MySQL 不支持 例子 http://blog.163.com/digoal@126/blog/static/16387704020137154137930 http://blog.163.com/digoal@126/blog/static/16387704020121024102312302/ http://blog.163.com/digoal@126/blog/static/16387704020124239390354/ http://www.postgresql.org/docs/9.5/static/functions-window.html rollup, grouping sets, cube PostgreSQL 支持,MySQL 不支持 例子 http://www.postgresql.org/docs/9.5/static/queries-table-expressions.html#QUERIES-GROUPING-SETS http://blog.163.com/digoal@126/blog/static/16387704020154269591874/ 高級聚合(json,數組,相關性,標準差(採樣,全局),截距,斜率,方差(採樣,全局),mode,percentile_cont,distc,rank,dense_rank,percent_rank,cume_dist,grouping) PostgreSQL 支持,MySQL 不支持 例子 http://www.postgresql.org/docs/9.5/static/functions-aggregate.html http://blog.163.com/digoal@126/blog/static/1638770402015224124337/ http://blog.163.com/digoal@126/blog/static/1638770402015379286873/ http://blog.163.com/digoal@126/blog/static/16387704020153713222764 hash join PostgreSQL 支持,MySQL 不支持 merge join PostgreSQL 支持,MySQL 不支持 nestloop join 都支持 例子 http://www.postgresql.org/docs/9.5/static/xoper-optimization.html http://www.postgresql.org/docs/9.5/static/planner-optimizer.html 哈希聚合 PostgreSQL 支持, MySQL 不支持 例子 http://www.postgresql.org/docs/9.5/static/runtime-config-query.html#RUNTIME-CONFIG-QUERY-ENABLE 事務間共享事務快照 PostgreSQL 支持,MySQL 不支持 例子 http://www.postgresql.org/docs/9.5/static/functions-admin.html#FUNCTIONS-SNAPSHOT-SYNCHRONIZATION http://www.postgresql.org/docs/9.5/static/sql-set-transaction.html http://www.postgresql.org/docs/9.5/static/app-pgdump.html http://blog.163.com/digoal@126/blog/static/163877040201326829943/ http://blog.163.com/digoal@126/blog/static/163877040201241134721101/
功能差別 - 約束html
foreign key
PostgreSQL 支持, MySQL 僅 innodb 引擎支持FK
例子
http://www.postgresql.org/docs/9.5/static/ddl-constraints.html for no key update, for key share 粒度鎖 PostgreSQL 支持, MySQL 不支持 例子 http://www.postgresql.org/docs/9.5/static/explicit-locking.html#LOCKING-ROWS http://blog.163.com/digoal@126/blog/static/16387704020130249109133/ http://blog.163.com/digoal@126/blog/static/16387704020130305109687/ check 約束 PostgreSQL 支持, MySQL不支持(僅支持語法,實際不生效,不嚴謹) 例子 http://www.postgresql.org/docs/9.5/static/ddl-constraints.html exclusion 約束 PostgreSQL 支持, MySQL不支持 例子 http://www.postgresql.org/docs/9.5/static/ddl-constraints.html
功能差別 - 易用性java
表空間
都支持
alter 列值轉表達式(alter table alter column c1 type newtype using (expression(...)) ) PostgreSQL 支持, MySQL 不支持 例子 http://www.postgresql.org/docs/9.5/static/sql-altertable.html https://yq.aliyun.com/articles/30470 alter table 須要重組表的操做 MySQL ( innodb ) optimize table, 添加列,刪除列, 重排, 修改row_format, key_block_size, mark column null, not null, 修改字段長度, 修改字段數據類型, 添加主鍵, 刪除主鍵, 轉換字符集, 指定字符集, rebuild table http://dev.mysql.com/doc/refman/5.7/en/innodb-create-index-overview.html PostgreSQL vacuum full, cluster, 修改字段數據類型, (修改長度不須要重組表) http://www.postgresql.org/docs/9.5/static/sql-altertable.html 分區表 都支持 PostgreSQL 經過繼承支持分區表, 阿里RDS PostgreSQL支持分區表語法 例子 http://www.postgresql.org/docs/9.5/static/ddl-partitioning.html https://yq.aliyun.com/articles/113 物化視圖 PostgreSQL 支持, MySQL 暫不支持 例子 http://www.postgresql.org/docs/9.5/static/sql-creatematerializedview.html 物化視圖增量刷新 PostgreSQL 支持, MySQL 暫不支持 例子 http://www.postgresql.org/docs/9.5/static/sql-refreshmaterializedview.html 表繼承關係 PostgreSQL 支持, MySQL 暫不支持 例子 http://www.postgresql.org/docs/9.5/static/tutorial-inheritance.html 使用 like 建結構相似的表 PostgreSQL 支持, MySQL 暫不支持 例子 http://www.postgresql.org/docs/9.5/static/sql-createtable.html
功能差別 - 開發功能python
客戶端開發語言支持
C, java, python, ...
函數
void, 單行,SRF,事件觸發器(MySQL 不支持),觸發器 例子 http://blog.163.com/digoal@126/blog/static/16387704020132131361949/ http://www.postgresql.org/docs/9.5/static/event-triggers.html 2PC PostgreSQL 支持, MySQL 僅innodb支持 服務端綁定變量 PostgreSQL 支持, MySQL 不支持 例子 http://www.postgresql.org/docs/9.5/static/sql-prepare.html savepoint PostgreSQL 支持, MySQL 僅innodb支持 異步消息 PostgreSQL 支持, MySQL 不支持 例子 http://www.postgresql.org/docs/9.5/static/sql-notify.html http://www.postgresql.org/docs/9.5/static/sql-listen.html 遊標 都支持 數組FOR循環,query FOR循環,遊標FOR循環 PostgreSQL 全支持 例子 http://www.postgresql.org/docs/9.5/static/plpgsql-control-structures.html http://www.postgresql.org/docs/9.5/static/plpgsql-cursors.html MySQL 不支持數組
功能差別 - 類型支持mysql
數據類型 PostgreSQL 高精度numeric, 浮點, 自增序列,貨幣,字節流,時間,日期,時間戳,布爾,枚舉,平面幾何,立體幾何,多維幾何,地球,PostGIS,網絡,比特流,全文檢索,UUID,XML,JSON,數組,複合類型,域類型,範圍,樹類型,化學類型,基因序列,FDW, 大對象 MySQL 數字,時間,字符串,簡單的GIS,JSON 支持索引的數據類型 PostgreSQL 高精度numeric, 浮點, 自增序列,貨幣,字節流,時間,日期,時間戳,布爾,枚舉,平面幾何,立體幾何,多維幾何,地球,PostGIS,網絡,比特流,全文檢索,UUID,XML,JSON,數組,複合類型,域類型,範圍,樹類型,化學,基因序列 MySQL 數字,字符串,比特流,時間,全文檢索,GIS
功能差別 - 索引支持linux
索引方法 PostgreSQL 支持 btree, hash, gist, sp-gist, gin, brin 索引 MySQL 支持 btree, gis類型索引 規則表達式匹配,支持索引檢索 PostgreSQL 支持 MySQL 不支持 數組支持索引 PostgreSQL 支持,MySQL不支持數組 全文檢索支持索引 都支持 索引擴展功能 PostgreSQL 支持 表達式索引,部分索引,聯合索引 MySQL 支持 聯合索引 自定義索引方法 PostgreSQL支持 MySQL 不支持
功能差別 - 併發能力c++
隔離級別
PostgreSQL 支持 RC, RR, 以及高於SQL 92標準的串行隔離級別 MySQL 支持 RU,RC,RR,以及SQL 92標準的串行隔離級別 slave庫支持RR隔離級別查詢 都支持 鎖粒度 PostgreSQL 支持 行鎖,對象鎖,頁鎖,預鎖,應用鎖,自旋鎖,共享鎖,排它鎖 MySQL 不支持 應用鎖,預鎖 死鎖檢測 都支持 skip locked, nowait PostgreSQL 都支持 MySQL 不支持, 阿里雲RDS MySQL 支持nowait
功能差別 - 多引擎和外部源支持redis
多引擎支持 PostgreSQL 內置heap, 經過插件實現內存表, 列存儲, 壓縮存儲, 流式存儲, 非關係存儲等。 MySQL MyISAM, innodb, ... 外部表 PostgreSQL支持任意外部數據源, (例如jdbc, file, odbc, oracle, mysql, db2, redis, mongo, ES, hadoop......) MySQL 僅支持csv文件外部表 dblink PostgreSQL 支持, MySQL 暫不支持 內存表 都支持, (PostgreSQL 經過外部表支持) ES 引擎 PostgreSQL 支持 MySQL 不支持
功能差別 - 安全算法
數據加密 PostgreSQL 支持加密數據類型,可選GPG加密算法 MySQL 須要經過其餘手段達到目的 認證方法 PostgreSQL 支持 密碼、LDAP、AD、GSSAPI、SSPI、Ident、Peer、RADIUS、PAM、簽名認證 MySQL 支持 密碼 認證 數據傳輸加密 都支持 行安全策略 PostgreSQL 支持, MySQL 暫不支持 數據庫內部支持libselinux接口, (美國國家安全局制定的安全增強標準) PostgreSQL 支持, MySQL 暫不支持
功能差別 - 優化器
http://www.postgresql.org/docs/9.5/static/runtime-config-query.html GPU 並行計算支持 PostgreSQL 支持, MySQL 不支持 遺傳優化器算法 PostgreSQL 支持CBO、CRO、遺傳算法 MySQL 支持CBO、CRO HINT PLAN 都支持 CPU 並行計算 PostgreSQL 9.6支持(線性性能提高) MySQL 不支持 自定義成本因子 PostgreSQL 支持 MySQL 不支持
功能差別 - 可用性和可靠性
多master
都支持
邏輯複製
都支持
物理複製
PostgreSQL 支持, MySQL 不支持
級聯複製
都支持
同步複製
都支持
pasox,設置保護級別
PostgreSQL 9.6 支持 MySQL 不支持 主備延遲 PostgreSQL 不受事務大小限制, 幾乎沒有延遲(ms之內) MySQL延遲和事務大小相關, 長事務會致使巨大主備延遲 在線備份, 增量備份 都支持 基於REDO的數據庫回滾,修復主備時間線錯亂 PostgreSQL 支持, MySQL不支持 任意時間點恢復(事務粒度) 都支持, MySQL 須要用戶本身寫程序來支持
功能差別 - 編程擴展能力
是否支持採樣查詢 PostgreSQL 支持, MySQL不支持 是否支持擴展采樣算法 PostgreSQL 支持, MySQL不支持 自定義數據類型 PostgreSQL 支持, MySQL 不支持 自定義索引方法 PostgreSQL 支持, MySQL 不支持 字符集自動轉換, C擴展接口 PostgreSQL 支持, MySQL 不支持 自定義聚合 PostgreSQL 支持, MySQL 不支持 自定義窗口 PostgreSQL 支持, MySQL 不支持
功能差別 - 管理特性
JOB 支持
都支持
支持數據緩存快照和預熱
PostgreSQL 支持, MySQL不支持
支持數據文件塊級別fadvise flag設置
PostgreSQL 支持, MySQL不支持
性能診斷方法
PostgreSQL explain (analyze, verbose, costs, timing, buffers) IO Time profile probe auto_explain MySQL explain 角色權限繼承 PostgreSQL 支持, MySQL 暫不支持
性能差別
TPC-H(OLAP), 複雜查詢 PostgreSQL 優點很是明顯
PostgreSQL 9.6 支持CPU並行 PostgreSQL 支持GPU插件加速 PostgreSQL rewrite能力更強 PostgreSQL 支持hash join, hash agg, merge join PostgreSQL btree,hash,gin,gist,sp-gist,brin索引方法 TPC-C(OLTP) 請自行測試 TPC-B 請自行測試 秒殺,模糊查詢,地理位置信息查詢,範圍查詢,實時流式計算,批量入庫等場景 PostgreSQL 優點很是明顯
如下沒法給出客觀意見,請自行測試,或者下載源碼欣賞。
穩定性 可靠性 代碼成熟度
平臺兼容性
都很棒
服務端編程語言
函數(過程)語言 PostgreSQL plpgsql, sql, c, c++, java, javascript, R, python, perl, php, tcl, ruby, lua, julia, ... MySQL sql, 不支持其餘擴展編程語言
擴展能力
類型擴展,操做符擴展,函數擴展,索引方法擴展,索引擴展, PostgreSQL 支持, MySQL不支持 C觸發器函數, C事件觸發器函數 PostgreSQL 支持, MySQL不支持 函數語言擴展 PostgreSQL 支持擴展函數支持接口, erlang, .... MySQL 不支持 機器學習庫 PostgreSQL 支持, MySQL 不支持 流式計算 PostgreSQL 支持, MySQL 不支持
scale up 能力
PostgreSQL 資源管控能力強。 單實例能夠充分發揮HPC的性能,有多少資源就能使用多少資源。 支持GPU並行計算 支持CPU並行計算 MySQL 請自行測試
scale out 能力
都支持sharding
PostgreSQL
pg_shard, oneproxy, plproxy, pg-xc, pg-xl, PostgreSQL 9.6 FDW based shard # 應用場景 PostgreSQL 幾乎適合任何場景 MySQL 適合相對較簡單的應用場景
社區狀態
PostgreSQL
單一開源分支,社區力量較集中。全球有1000名以上的內核研發人員。 社區研發由核心組員和committer組成,持續5年以上對社區版本有貢獻內核研發人員超過50位。 社區核心人員分別來自數據庫廠商,數據庫支持和服務公司,數據庫最終用戶的公司,造成了一個很是好的力量均衡。 MySQL 分支很是多, 引擎很是多。
社區活躍度
PostgreSQL 很是活躍 MySQL 很是活躍
生態
DBA
PostgreSQL,國內供不該求
內核研發
PostgreSQL,國內超過100名內核研發,依舊供不該求 應用開發 PostgreSQL,SQL兼容性強,開發人員通用 MySQL,SQL兼容性較弱,企業應用開發人員難接受 客戶端驅動 PostgreSQL,兼容性強 MySQL,兼容性強 開發框架 PostgreSQL,兼容性很是好,有一些很是特殊的開發框架(如IOT,化學,醫療,基因庫,GIS...) MySQL,兼容性好 服務端編程語言 PostgreSQL,擴展能力極強,支持各類服務端編程語言 MySQL,不支持擴展 軟件開發商數量,不相上下 軟件廠商覆蓋面 ,不相上下 培訓公司 PostgreSQL,國內較少,國外較多 軟件外包公司 技術支持公司 PostgreSQL ,國內較少,國外較多 數據庫廠商 PostgreSQL,國內外都很是多(BSD許可的緣由) MySQL,很是少 用戶量 PostgreSQL,國內企業用戶偏多,互聯網行業偏少,國外都較多 用戶覆蓋面, PostgreSQL,覆蓋幾乎各個行業的核心繫統 MySQL,互聯網較多,企業周邊系統較多 高校 PostgreSQL,教育資源豐富
應用案例
PostgreSQL
生物製藥 {Affymetrix(基因芯片), 美國化學協會, gene(結構生物學應用案例), …}
電子商務 { CD BABY, etsy(與淘寶相似), whitepages, flightstats, Endpoint Corporation, 阿里巴巴 …}
學校 {加州大學伯克利分校, 哈佛大學互聯網與社會中心, .LRN, 莫斯科國立大學, 悉尼大學, 武漢大學, 人民大學, 上海交大, 華東師範 …}
金融 {Journyx, LLC, trusecommerce(相似支付寶), 日本證券交易交所, 郵儲銀行, 同花順, 平安銀行…}
遊戲 {MobyGames, 斯凱網絡 …}
政府 {美國國家氣象局, 印度國家物理實驗室, 聯合國兒童基金, 美國疾病控制和預防中心, 美國國務院, 俄羅斯杜馬, 國家電網, 12306…} 醫療 {calorieking, 開源電子病歷項目, shannon醫學中心, …} 製造業 {Exoteric Networks, 豐田, 捷豹路虎} 媒體 {IMDB.com, 美國華盛頓郵報國會投票數據庫, MacWorld, 綠色和平組織, …} 開源項目 {Bricolage, Debian, FreshPorts, FLPR, PostGIS, SourceForge, OpenACS, Gforge, …} 零售 {ADP, CTC, Safeway, Tsutaya, Rockport, …} 科技 {Sony, MySpace, Yahoo, Afilias, APPLE, 富士通, Omniti, Red Hat, Sirius IT, SUN, 國際空間站, Instagram, Disqus, 去哪兒, 騰訊, 華爲, 中興, 雲遊, 智聯招聘, 高德地圖 …} 通訊 {Cisco, Juniper, NTT(日本電信), 德國電信, Optus, Skype, Tlestra(澳洲電訊), 中國移動…} 物流 {SF} 目前國內較大規模應用PG的企業 平安科技、郵儲銀行、高德、去哪兒、騰訊、阿里、華爲、斯凱、通策醫療、雲遊、探探科技 國家電網、XX鐵路、xx保險、XX運營商、XXOA辦公、同花順、中航
發展潛力
PostgreSQL
SQL兼容性強,功能強大,穩定性好,性能優越,擴展能力強,社區活躍,幾乎覆蓋全世界全部行業。
國外生態已造成,國內正逐漸成爲數據庫焦點,伴隨IOT和工業4.0的發展,redis+mongo+postgresql+倉儲分析系統,能覆蓋幾乎全部應用場景的需求,發展潛力巨大。
學習成本
PostgreSQL 文檔完備脈絡清晰,代碼註釋完備,認真學習很是容易達到較高的水平。 PostgreSQL功能很是強大,與Oracle旗鼓至關,初期學習成本會較高,可是學成以後,會有一種與之融爲一體的感受,使用起來駕輕就熟。能夠大大下降使用成本,管理成本和風險。
開發成本
PostgreSQL SQL兼容性好,功能強大,擴展能力強,服務端編程能力強。 數據庫端能夠解決很是多的程序需求,不須要move data,開發成本低。
開源許可
PostgreSQL BSD許可,容許任意形式分發和使用 MySQL GPL許可,商用軟件分發必須開源
本文轉自:https://yq.aliyun.com/ask/19599?spm=a2c4e.11155435.0.0.49f26596BoyotH