你了解世界上功能最強(qiáng)大的開源數(shù)據(jù)庫(kù)嗎?
如果不是領(lǐng)導(dǎo)強(qiáng)制要求,可能根本不會(huì)留意到這款號(hào)稱世界上功能最強(qiáng)大的開源數(shù)據(jù)庫(kù)——PostgreSQL。如果你不讀這篇文章,或許也會(huì)錯(cuò)過一個(gè)躍躍欲試想擠進(jìn)前三的優(yōu)秀數(shù)據(jù)庫(kù)。
為了能夠熟練運(yùn)用,特意買書研究,發(fā)現(xiàn)這款數(shù)據(jù)庫(kù)還真有點(diǎn)意思。匯總一篇文章與大家分享,目的只有一個(gè):讓大家多少了解一下這款數(shù)據(jù)庫(kù)。
你會(huì)發(fā)現(xiàn)與Mysql相比,PostgreSQL的社區(qū)并不活躍,中文資料可以說是少得可憐,在數(shù)據(jù)庫(kù)中排行老四。前三都不一定全用過,誰(shuí)會(huì)去記住老四呢。但下面的數(shù)據(jù)不得不讓我們留意。
下面是DB-Engines數(shù)據(jù)庫(kù)流行度排行榜2020年7月份的數(shù)據(jù)。

在老大老二的評(píng)分不斷下降的情況下,這么一個(gè)沒有后臺(tái)的開源數(shù)據(jù)庫(kù),竟然勵(lì)精圖治,突飛猛進(jìn)。有沒有像春秋戰(zhàn)國(guó)時(shí)的秦國(guó),是時(shí)候得留意一下它了。
下面再看看這幾年P(guān)ostgreSQL的增速情況。

圖中遙遙領(lǐng)先其他數(shù)據(jù)庫(kù),追趕前三名的數(shù)據(jù)庫(kù),就是PostgreSQL,不少大廠已經(jīng)在使用了。
PostgreSQL是一款開源的對(duì)象關(guān)系型數(shù)據(jù)庫(kù),也就是說與Mysql的功能一致。在歐美地區(qū)使用比較廣泛,因其限制嚴(yán)格、實(shí)現(xiàn)嚴(yán)謹(jǐn),在金融、電信等領(lǐng)域應(yīng)用比較多。
對(duì)照Mysql來了解一下PostgreSQL(以下簡(jiǎn)稱PG):
1、在SQL的標(biāo)準(zhǔn)實(shí)現(xiàn)上比MySQL完善,而且功能實(shí)現(xiàn)比較嚴(yán)謹(jǐn);
2、存儲(chǔ)過程的功能支持要比MySQL好,具備本地緩存執(zhí)行計(jì)劃的能力;
3、PG對(duì)表連接支持較完整,優(yōu)化器的功能較完整,支持的索引類型很多,復(fù)雜查詢能力較強(qiáng);
4、PG主表采用堆表存放,MySQL采用索引組織表,能夠支持比MySQL更大的數(shù)據(jù)量。
5、PG的主備復(fù)制屬于物理復(fù)制,相對(duì)于MySQL基于binlog的邏輯復(fù)制,數(shù)據(jù)的一致性更加可靠,復(fù)制性能更高,對(duì)主機(jī)性能的影響也更小。
6、MySQL的存儲(chǔ)引擎插件化機(jī)制,存在鎖機(jī)制復(fù)雜影響并發(fā)的問題,而PG不存在。
上面是比較籠統(tǒng)的概述,下面給大家匯總一下讀相關(guān)書籍發(fā)現(xiàn)。
1、數(shù)據(jù)庫(kù)、表等操作基本相同,與Mysql不同的是PG的主鍵自增采用了獨(dú)立的序列,然后將序列賦值給對(duì)應(yīng)的字段來實(shí)現(xiàn)自增。
2、PG的字段級(jí)、表級(jí)的約束也特別有意思。可以通過CHECK關(guān)鍵字來約束指定字段是否大于或小于某個(gè)閾值(僅舉例,不限于此)。針對(duì)表級(jí)別的約束,還可以通過CHECK關(guān)鍵字來約束兩個(gè)字段之間的關(guān)系,比如:CHECK(createtime < parentcreatetime)。是不是非常有意思?
3、數(shù)據(jù)類型中PG提供了money類型,可基于時(shí)區(qū)來顯示對(duì)應(yīng)的貨幣格式,如“$1,000.00”。
4、數(shù)據(jù)類型中支持了豐富的日期時(shí)間類型,而還有相應(yīng)的運(yùn)算操作,加減乘除應(yīng)有盡有。
5、數(shù)據(jù)類型中還支持了點(diǎn)、線、線段、矩形、路徑、多邊形、圓等幾何圖形,雖然不會(huì)經(jīng)常用到,有便是一件很Cool的事。當(dāng)然,也少不了JSON和數(shù)組的類型。
6、PG提供了數(shù)學(xué)函數(shù)、字符串函數(shù)、二進(jìn)制字符串函數(shù)、數(shù)據(jù)類型格式化函數(shù)、日期和時(shí)間函數(shù)、位串函數(shù)、枚舉函數(shù)、幾何函數(shù)、JSON函數(shù)、范圍函數(shù)、數(shù)字函數(shù)等等,豐富到眼花繚亂。
7、SQL查詢中提供了遞歸查詢,內(nèi)置了大量的窗口函數(shù)。
8、索引支持B-tree索引、Hash索引、GiST索引、SP-GiST索引、GIN索引、BRIN索引。足夠豐富。
9、視圖支持物化視圖和普通視圖。
10、支持表繼承,面向?qū)ο缶幊痰呐笥咽遣皇菍?duì)此很親切。
11、PG支持基本的表分區(qū)功能更,PG10之后支持聲明式內(nèi)置表分區(qū)功能。該功能支持把大表拆分成更小的物理分片,分別進(jìn)行獨(dú)立存儲(chǔ)。
12、PG支持在大型事務(wù)中通過使用保存點(diǎn)(SAVEPOINT)來回滾部分事務(wù)。
13、PG對(duì)SQL語(yǔ)句進(jìn)行了邏輯優(yōu)化和物理優(yōu)化。
當(dāng)然,還有其他很多有意思的功能等待發(fā)掘。讀完上述內(nèi)容你是不是也有興趣了解一下?那這篇文章的目的就達(dá)到了。
最后,寫這篇文章有兩個(gè)目的。第一,很明確,給大家介紹一款數(shù)據(jù)庫(kù)。第二,是想推廣一個(gè)學(xué)習(xí)提升的理念:盡情去去嘗試了解新事物,努力突破自己的舒適區(qū),這往往會(huì)給自己帶來非常大的收獲。