PostgreSQL是對象-關係型數據庫,BSD 許可證。拼讀爲"post-gress-Q-L"。php
近30年來 PostgreSQL 無疑是您從未據說過的、最多見的開源 SQL 數據庫。PostgreSQL 常常身居幕後:從 EnterpriseDB 到 Amazon Redshift 、Greenplum、Netezza 及其餘許多商業數據庫產品。html
最近在許多商業產品的推進下,PostgreSQL 逐漸走向前臺。大約十年前 EnterpriseDB 打開了潘多拉的盒子 —— 做爲商業支持平臺提供 Oracle 的替代品。特別是最近一段時間,雲服務商提供了一系列託管產品:從 Amazon Wed Services 開始, 支持 PostgreSQL 做爲其託管關係數據庫服務 (Relational Database Service,RDS) 之一。git
過去一年 AWS 和它的競爭對手將 PostgreSQL 的市場前景提高了一個等級。AWS 推出了兼容 PostgreSQL 的原生雲數據庫平臺 Amazon Aurora ,做爲迴應 Microsoft 和 Google 推出了 Azure Database for PostgreSQL 和 Cloud SQL for PostgreSQL 解決方案。github
Mark Porter(馬克·波特,Amazon Aurora PostgreSQL 和 Amazon RDS for PostgreSQL 主管) 不得不經過一些花哨的方法表達 AWS 對開源社區的支持,例如修復 Bug、提供免費測試賬戶和其餘形式的財政支助。PostgreSQL 在 AWS 上的實現不是開源的, 由於它是爲 AWS 自身的雲基礎結構而設計。sql
PostgreSQL 雖然是聚焦於事務型數據庫的開源項目, 可是許多基於它的商業產品都是大規模並行處理數據倉庫(Massively Parallel Processing,MPP)。出於這個緣由, Greenplums,Netezzas 和Redshifts 建立了本身的開源 forks 項目, 甚至添加像 columnar tables 這樣的基本功能。數據庫
PostgreSQL 的一個常見主題是支持企業級負載的開源關係數據庫。關於這一點,競爭者包括 MySQL 和 MariaDB , 但仍然存在差別, PostgreSQL 支持更復雜的 SQL 函數和數據類型, 包括數組(arrays), 鏈接(joins)和視圖(Window Functions)等等。數組
另外一個緣由是出現了「replace Oracle」的口號, PL/pgSQL 的設計很是相似 Oracle PL/SQL。這正是EnterpriseDB 多年以來一直提倡的,同時得到了 美國金融業監管局(Financial Industry Regulatory Authority,FINRA) 的支持。FINRA 將大約 650 個 Oracle 實例遷移入雲( Amazon RDS for PostgreSQL),做爲一個更大戰略的一部分, 將其整個部署在 IT 基礎設施上的業務遷移到 AWS。根據 FINRA 首席開發者 Steve Downs 的說法,對於 Oracle DBA 而言,在 PostgreSQL 中使用諸如對象/關係映射(object/relational mappings)、存儲過程(stored procedures)以及利用視圖(view)支持複雜查詢的功能,給人一種似曾相識的感受。安全
然而, 做爲兩種不一樣的數據(包括 SQL 實現)PostgreSQL 和 Oracle 之間畢竟存在顯著差別。例如數據庫如何處理數字和可變字符字段、同義詞、複製 (replication,PostgreSQL 不像 Oracle 那樣成熟 ) 以及實例化視圖刷新等等。bash
PostgreSQL 有它獨特的優點,即做爲第三方尋求自主數據庫產品的開源平臺。重要的是, 去年秋季發佈的最新 10.0 版本(2017年11月09日), 解決了在 Oracle 或 SQL Server 產品中被視爲理所固然的功能,包括聲明式表分區(declarative table partitioning)、改進後的複製功能(replication), 發佈/訂閱(publish/subscribe)、仲裁提交(quorum commits,對於雲部署可能很是有用)。微信
總之,PostgreSQL 還有不少須要追趕的領域, Oracle 或 SQL Server 用戶也仍然有理由繼續使用他們的平臺。大部分的差別將體如今數據庫的實施, 而不是一些具體的功能特性。這種差別將主要體如今數據庫彈性、自動化、基礎架構選型以及雲計算的規模等方面。有了 AWS、Azure 和 Google Cloud 的加持(很是值得注意的一個信號),若干年後 PostgreSQL 可能最終走出陰影。
PostgreSQL 開始於 UC Berkeley 的 Ingres 計劃,經歷了長時間的演變。
Ingres 計劃的領導者 Michael Stonebraker(邁克爾·斯通布雷克,2015 年圖靈獎得主,目前是麻省理工學院兼職教授)在 1982 年離開 Berkeley 進入商業公司 Ingres,1985年又返回 Berkeley 開始新項目 Postgres 。Postgres 項目組從1986年開始發表了一些描述系統基本原理的論文併發行了版本一、二、3 、4,到1993年就有大量的用戶存在了。儘管 Postgres計劃正式的終止了,BSD許可證卻使開發者能夠得到副本並進一步開發系統。1994年,兩個 UC Berkeley 的研究生 Andrew Yu 和 Jolly Chen 增長了一個SQL語言解釋器來替代早先的基於 Ingres 的 QUEL 系統,建立了 Postgres95。
1996年重命名爲:PostgreSQL。(版本 6.0 )
2000年,前 Red Hat 投資者籌組了一間名爲Great Bridge的公司來商業化PostgreSQL,以和其餘商用數據庫廠商競爭。2001年底,Great Bridge 因市場緣由終止營運。2001年,Command Prompt, Inc. 發佈了最老牌的PostgreSQL 商業軟件 Mammoth PostgreSQL,並提供開發者贊助和貢獻 PL/Perl、PL/php、維護 PostgreSQL Build Farm 等。
2005年1月 ,Pervasive Software 宣佈參與社區及商業支持,直到 2006 年 7 月退出。2005年1月19日,版本 8.0 發行。自 8.0 後,PostgreSQL以原生(Native)的方式,運行於Windows系統。2006年6月,Solaris 10 包含 PostgreSQL一塊兒發佈。
2012年09月10日,PostgreSQL 發佈 9.2 版本,主要在性能方面的提高,也包括一些新的 SQL 特性。 2016年10月27日,PostgreSQL 發佈 9.6.1 版本。 2017年11月09日,PostgreSQL 發佈 10.1 版本。
# install $ brew install postgresql # version $ pg_ctl -V pg_ctl (PostgreSQL) 10.1 # initdb -- 建立一個新的PostgreSQL數據庫簇(cluster),單個服務端實例管理的多個數據庫的集合。 # 建立數據庫數據的宿主目錄,生成共享的系統表 (不屬於任何特定數據庫的表)和建立template1 和postgres數據庫 $ initdb /Users/yanrui/Data/TestPG # start $ pg_ctl -D /Users/yanrui/Data/TestPG start waiting for server to start....2018-01-03 14:13:17.005 CST [37621] LOG: listening on IPv4 address "127.0.0.1", port 5432 2018-01-03 14:13:17.005 CST [37621] LOG: listening on IPv6 address "::1", port 5432 2018-01-03 14:13:17.006 CST [37621] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432" 2018-01-03 14:13:17.048 CST [37623] LOG: database system was shut down at 2018-01-03 14:11:30 CST 2018-01-03 14:13:17.066 CST [37621] LOG: database system is ready to accept connections done server started # port listen bash-3.2$ netstat -an | grep LISTEN tcp6 0 0 ::1.5432 *.* LISTEN # createdb bash-3.2$ createdb -O[owner] test_db # default [當前登陸系統用戶名] bash-3.2$ psql 2018-01-03 18:14:37.537 CST [45864] FATAL: database "yanrui" does not exist psql: FATAL: database "yanrui" does not exist You have new mail in /var/mail/yanrui # login in bash-3.2$ psql test_db psql (10.1) Type "help" for help. # log out test_db=# \q (Ctrl+D) # 卸載 $ brew uninstall postgres # 開機 $ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist $ rm -rf ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
更多精彩內容掃碼關注公衆號:RiboseYim's Blog