
【基本介紹】
postgresql是一款功能相當(dāng)強(qiáng)大的數(shù)據(jù)庫(kù)管理系統(tǒng);對(duì)主流的sql標(biāo)準(zhǔn)進(jìn)行快速的支持,而且還擁有許多的現(xiàn)代特性,包括了觸發(fā)器、mvcc、復(fù)雜查詢等,并且也對(duì)各種擴(kuò)展的方法支持,可以對(duì)函數(shù)、索引、數(shù)據(jù)類型進(jìn)行選擇,非常的適合使用在學(xué)術(shù)研究方面。
【官方介紹】
PostgreSQL是一款開源且功能強(qiáng)大的開源對(duì)象關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS)。使用PostgreSQL可能很好的實(shí)現(xiàn)數(shù)據(jù)庫(kù)服務(wù)器群集和負(fù)載均衡,并且支持幾乎所有SQL功能,包括subselects、transactions 以及用戶自定義類和功能,用于安全地存儲(chǔ)數(shù)據(jù)。PostgreSQL(也稱為Post-gress-Q-L)由PostgreSQL全球開發(fā)集團(tuán)(全球志愿者團(tuán)隊(duì))開發(fā),不受任何公司或其他私人實(shí)體控制。并且PostgreSQL是跨平臺(tái)的,可以在許多操作系統(tǒng)上運(yùn)行,如Linux,F(xiàn)reeBSD,OS X,Solaris和Microsoft Windows等。
【特點(diǎn)介紹】
比專有供應(yīng)商更好的支持除了我們強(qiáng)大的支持服務(wù)外,我們還擁有充滿活力的PostgreSQL專業(yè)人士和愛好者社區(qū),您的員工可以利用并貢獻(xiàn)自己的力量。
傳奇的可靠性和穩(wěn)定性
與許多專有數(shù)據(jù)庫(kù)不同的是,公司報(bào)告說(shuō)PostgreSQL從未在數(shù)年的高活動(dòng)運(yùn)行中從未崩潰。一次也沒有。它只是工作。
跨平臺(tái)
PostgreSQL幾乎適用于所有Unix品牌(最新穩(wěn)定版本的34個(gè)平臺(tái)),Windows兼容性可通過Cygwin框架獲得。本機(jī)Windows兼容性也適用于版本8.0及以上。
專為高容量環(huán)境而設(shè)計(jì)
我們使用一種稱為MVCC的多行數(shù)據(jù)存儲(chǔ)策略來(lái)使PostgreSQL在高容量環(huán)境下的響應(yīng)速度非???。同樣的原因,領(lǐng)先的專有數(shù)據(jù)庫(kù)供應(yīng)商也使用這種技術(shù)。

【功能介紹】
1.PostgreSQL的特性覆蓋了SQL-2/SQL-92和SQL-3/SQL-99;2.它包括了可以說(shuō)是目前世界上最豐富的數(shù)據(jù)類型的支持,其中有些數(shù)據(jù)類型可以說(shuō)連商業(yè)數(shù)據(jù)庫(kù)都不具備,比如IP類型和幾何類型等;
3.PostgreSQL是全功能的自由軟件數(shù)據(jù)庫(kù),很長(zhǎng)時(shí)間以來(lái),PostgreSQL是唯一支持事務(wù)、子查詢、多版本并行控制系統(tǒng)、數(shù)據(jù)完整性檢查等特性的唯一的一種自由軟件的數(shù)據(jù)庫(kù)管理系統(tǒng)。直到最近才有Inprise的InterBase以及SAP等廠商將其原先專有軟件開放為自由軟件之后才打破了這個(gè)唯一。
4.PostgreSQL擁有一支非?;钴S的開發(fā)隊(duì)伍,目前的提交人員已經(jīng)超過三十人,而且在許多黑客的努力下,PostgreSQL的質(zhì)量日益提高,也從另外一個(gè)側(cè)面上增加了人們使用PostgreSQL的信心,畢竟數(shù)據(jù)庫(kù)管理系統(tǒng)不能象桌面操作系統(tǒng)那樣一天宕一次還讓人覺得挺滿意。

【優(yōu)劣介紹】
一、優(yōu)點(diǎn)介紹1.PostgreSQL可以說(shuō)是最富特色的自由數(shù)據(jù)庫(kù)管理系統(tǒng),甚至我們也可以說(shuō)是最強(qiáng)大的自由軟件數(shù)據(jù)庫(kù)管理系統(tǒng)。
2.從技術(shù)角度來(lái)講,PostgreSQL采用的是比較經(jīng)典的C/S(client/server)結(jié)構(gòu),也就是一個(gè)客戶端對(duì)應(yīng)一個(gè)服務(wù)器端守護(hù)進(jìn)程的模式,這個(gè)守護(hù)進(jìn)程分析客戶端來(lái)的查詢請(qǐng)求,生成規(guī)劃樹,進(jìn)行數(shù)據(jù)檢索并最終把結(jié)果格式化輸出后返回給客戶端。為了便于客戶端的程序的編寫,由數(shù)據(jù)庫(kù)服務(wù)器提供了統(tǒng)一的客戶端C接口。而不同的客戶端接口都是源自這個(gè)C接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等,同時(shí)也要指出的是,PostgreSQL對(duì)接口的支持也是非常豐富的,幾乎支持所有類型的數(shù)據(jù)庫(kù)客戶端接口。這一點(diǎn)也可以說(shuō)是PostgreSQL一大優(yōu)點(diǎn)。
二、劣勢(shì)介紹
1.首先,早期的PostgreSQL繼承了幾乎所有Ingres,Postgres,Postgres95的問題:過于學(xué)院味,因?yàn)槭紫人哪康氖菙?shù)據(jù)庫(kù)研究,因此不論在穩(wěn)定性,性能還是使用方便方面,長(zhǎng)期以來(lái)一直沒有得到重視,直到PostgreSQL項(xiàng)目開始以后,情況才越來(lái)越好,目前,PostgreSQL已經(jīng)完全可以勝任任何中上規(guī)模范圍內(nèi)的應(yīng)用范圍的業(yè)務(wù)。目前有報(bào)道的生產(chǎn)數(shù)據(jù)庫(kù)的大小已經(jīng)有TB級(jí)的數(shù)據(jù)量,已經(jīng)逼近32位計(jì)算的極限。不過學(xué)院味也給PostgreSQL帶來(lái)一個(gè)意想不到的好處:大概因?yàn)楦鞔髮W(xué)的軟硬件環(huán)境差異太大的緣故,它是目前支持平臺(tái)最多的數(shù)據(jù)庫(kù)管理系統(tǒng)的一種,所支持的平臺(tái)多達(dá)十幾種,包括不同的系統(tǒng),不同的硬件體系。至今,它仍然保持著支持平臺(tái)最多的數(shù)據(jù)庫(kù)管理系統(tǒng)的稱號(hào)。
2.其次,PostgreSQL的確還欠缺一些比較高端的數(shù)據(jù)庫(kù)管理系統(tǒng)需要的特性,比如聯(lián)機(jī)熱備份,數(shù)據(jù)庫(kù)集群,更優(yōu)良的管理工具和更加自動(dòng)化的系統(tǒng)優(yōu)化功能等提高數(shù)據(jù)庫(kù)性能的機(jī)制等。
三、總結(jié)
1.但是,話說(shuō)回來(lái),PostgreSQL擁有極其強(qiáng)大的擴(kuò)展能力,你可以很容易地?cái)U(kuò)展數(shù)據(jù)類型,內(nèi)部函數(shù),聚集,操作符等等,而且,別忘了,你擁有所有的源程序,理論上你可以做任何你可以做的事情。因此,很多缺點(diǎn),在轉(zhuǎn)瞬之間就會(huì)消失也是很正常的。
2.總而言之,PostgreSQL的特性已經(jīng)完全可以滿足絕大部分用戶的需要,而且其質(zhì)量和特性仍然在日新月異地進(jìn)步著,所以,我們有理由相信在不遠(yuǎn)的將來(lái),PostgreSQL肯定能夠成為一種優(yōu)秀的,自由的,商業(yè)數(shù)據(jù)庫(kù)的替代產(chǎn)品。

【安裝步驟】
1、在起點(diǎn)軟件園下載該軟件的壓縮包,解壓并運(yùn)行安裝程序;2、進(jìn)入軟件的安裝向?qū)Ы缑妫c(diǎn)擊Next;

3、對(duì)軟件的安裝位置進(jìn)行選擇,默認(rèn)位置“C:\Program Files\PostgreSQL\9.4”,建議安裝在D盤,點(diǎn)擊Next即可安裝;

4、對(duì)安裝的原因進(jìn)行快速的選擇,點(diǎn)擊Next;

5、正在對(duì)軟件進(jìn)行快速的安裝,需要花費(fèi)一點(diǎn)的時(shí)間;

6、postgresql已經(jīng)安裝完成,點(diǎn)擊Finish即可關(guān)閉;

【使用方法】
一、Postgresql查看執(zhí)行計(jì)劃的方法進(jìn)入pgAdmin中,點(diǎn)擊工具欄按鈕進(jìn)入sql窗口,如圖

輸入查詢語(yǔ)句,我們以最簡(jiǎn)單的語(yǔ)句為例子
select * from schema_a.users;
快捷鍵F7即可看到語(yǔ)句的執(zhí)行計(jì)劃。

在psql中,使用explain命令查看執(zhí)行計(jì)劃。
explain select * from schema_a.users;

explain命令可帶參數(shù):
- analyze :執(zhí)行命令并顯示執(zhí)行事件,默認(rèn)false
- verbose :對(duì)執(zhí)行計(jì)劃提供額外的信息,如查詢字段信息等,默認(rèn)false
- costs :顯示執(zhí)行計(jì)劃的,默認(rèn)true
- buffers :默認(rèn)false,前置條件是analyze
- format :默認(rèn)格式是text
如果記不住,可輸入explain后用tab鍵查看可跟參數(shù)

查看執(zhí)行計(jì)劃,一般我們會(huì)比較關(guān)注消耗值cost和掃描的方式,如走索引或者full scan全表掃描.當(dāng)COST值消耗比較大時(shí)需要注意是否有優(yōu)化的可能。

二、PostgreSQL創(chuàng)建視圖的方法
首先我們來(lái)看臨時(shí)視圖,臨時(shí)視圖和其他視圖的區(qū)別是,當(dāng)你連上數(shù)據(jù)庫(kù)以后,創(chuàng)建了臨時(shí)視圖,當(dāng)你斷開連接,再連接到數(shù)據(jù)庫(kù)后,臨時(shí)視圖就消失了??聪聢D,首先我們連上數(shù)據(jù)庫(kù),創(chuàng)建一張數(shù)據(jù)庫(kù)表,因?yàn)橐晥D都是建立在表的基礎(chǔ)上的。
然后開始創(chuàng)建臨時(shí)視圖,命令是:
create table info(id int, name text, phone text)
create temp view vw_temp as select name, phone from info
下面第一張圖中是創(chuàng)建表info以及顯示表info的信息,第二張圖是創(chuàng)建視圖,以及顯示視圖vw_temp的信息。


然后退出數(shù)據(jù)庫(kù)連接,再登錄數(shù)據(jù)庫(kù),查看數(shù)據(jù)庫(kù)里的表以及視圖。
退出數(shù)據(jù)庫(kù)命令\q
然后再登錄命令:psql -d db02
輸入密碼后查看數(shù)據(jù)庫(kù)表:\d
結(jié)果如下圖所示,可以看到視圖vw_temp已經(jīng)消失了。示例中說(shuō)明了臨時(shí)視圖的特性。

普通視圖,就是具有正常功能的視圖,能夠一直存在于數(shù)據(jù)庫(kù)中,它的數(shù)據(jù)查詢都是從表中查。我們給出兩個(gè)創(chuàng)建普通視圖的示例,第一個(gè)是獲取info表的id和phone字段。
不做其他操作,命令是:
create view vw_info1 as select id, phone from info;
第二個(gè)視圖中,修改字段的名稱,命令是:
create view vw_info2(user_id, user_phone) as select id, phone from info;
這兩個(gè)視圖沒有太大的區(qū)別,唯一的區(qū)別就是可以自定義字段的名稱。

物化視圖,這種視圖和其他兩種視圖的區(qū)別在于,它內(nèi)部的數(shù)據(jù)不是來(lái)自表,而是根據(jù)查詢語(yǔ)句返回的字段和數(shù)據(jù)生成一張新表保存數(shù)據(jù)。因此查詢的時(shí)候直接就是從一張表里查詢。而不會(huì)是多表查詢,同時(shí)里面的數(shù)據(jù)還能更新。我們來(lái)創(chuàng)建一個(gè)物化視圖vw_info3,然后往表中插入幾條數(shù)據(jù),后面再來(lái)進(jìn)行分析和對(duì)比。
命令如下:
create materialized view vw_info3 as select id,name from info;
從下圖中可以看到,目前來(lái)看,唯一的區(qū)別就是它的信息里多了一條materialized view這樣一行信息

我們往表info里插入數(shù)據(jù),然后再對(duì)視圖vw_info2和vw_info3進(jìn)行查詢,使用explain關(guān)鍵字來(lái)分析他們的查詢過程,來(lái)進(jìn)行對(duì)比。下面第一張圖是往表info里插入數(shù)據(jù),然后顯示具體的數(shù)據(jù)。第二張圖是使用explain關(guān)鍵字分析后的顯示結(jié)果。從結(jié)果中可以清晰地看到,查詢普通視圖vw_info2時(shí),掃描的是info表,而查詢vw_info3時(shí),查詢的是vw_info3的表。足以說(shuō)明這兩種視圖的區(qū)別了。


配置物化視圖的全量更新和增量更新,前面我們說(shuō)到,物化視圖是將查詢語(yǔ)句返回后的數(shù)據(jù)生成一張新表,因此當(dāng)原來(lái)的表數(shù)據(jù)更新時(shí),物化視圖中的內(nèi)容并不會(huì)更新。如下面第一張圖中所示,先往info表中插入一條新的數(shù)據(jù),然后查詢表info和視圖vw_info3。可以看到表info中有新增的數(shù)據(jù),而創(chuàng)建視圖vw_info3時(shí),vw_info3中沒有數(shù)據(jù),所以查詢返回的結(jié)果什么都沒有。
因此需要更新視圖,配置更新的命令兩種用法如下:
refresh materialized view vw_info3 with data;
refresh materialized view concurrently with data;
上面兩個(gè)命令,第一個(gè)是全量更新,就是把vw_info3里的數(shù)據(jù)全部刪掉,重新更新。第二種是對(duì)比vw_info3和表info里的區(qū)別,把有變化的更新過來(lái)。如下面第二張圖中所示,更新以后vw_info3中就有數(shù)據(jù)了。


【常見問題】
PostgreSQL 是什么?該怎么發(fā)音?Postgres又是什么?PostgreSQL 讀作 Post-Gres-Q-L,(想聽一下其發(fā)音的人員可從這里下載聲音文件: MP3文件 ) 。
PostgreSQL 是面向目標(biāo)的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),它具有傳統(tǒng)商業(yè)數(shù)據(jù)庫(kù)系統(tǒng)的所有功能,同時(shí)又含有將在下一代 DBMS 系統(tǒng)的使用的增強(qiáng)特性。PostgreSQL 是自由免費(fèi)的,并且所有源代碼都可以獲得。
誰(shuí)控制PostgreSQL?
如果你在尋找PostgreSQL的掌門人,或是什么中央委員會(huì),或是什么所屬公司,你只能放棄了---因?yàn)橐粋€(gè)也不存在,但我們的確有一個(gè) 核心委員會(huì)和CVS管理組,但這些工作組的設(shè)立主要是為了進(jìn)行管理工作而不是對(duì)PostgreSQL進(jìn)行獨(dú)占式控制,PostgreSQL項(xiàng)目是由任何人均 可參加的開發(fā)人員社區(qū)和所有用戶控制的,你所需要做的就是訂閱郵件列表,參與討論即可(要參與PostgreSQL的開發(fā),詳見開發(fā)人員常見問題 Developer's FAQ 獲取信息)。
PostgreSQL可以處理最近各個(gè)國(guó)家夏時(shí)制的變化嗎?
PostgreSQL 8.0之前的版本是使用操作系統(tǒng)中的時(shí)區(qū)數(shù)據(jù)庫(kù)來(lái)處理夏時(shí)制的信息,自8.0版及以后的版本PostgreSQL會(huì)自身含有最新的時(shí)區(qū)信息。美國(guó)夏時(shí)制的更改包括在PostgreSQL 8.0.4版以后版本及所有以后發(fā)布的大的升級(jí)版本,如8.1版,加拿大和澳大利亞夏時(shí)制的更新包括在8.0.10版及以后版本中。
我們可以用什么語(yǔ)言和PostgreSQL打交道?
PostgreSQL(缺省情況)只安裝有C和內(nèi)嵌式C的接口,其他的接口都是獨(dú)立的項(xiàng)目,能夠分別下載,這些接口項(xiàng)目獨(dú)立的好處 是他們可以有各自的發(fā)布計(jì)劃和各自獨(dú)立的開發(fā)組。
一些編程語(yǔ)言如PHP都有訪問PostgreSQL的接口,Perl、TCL、Python以及很多其他語(yǔ)言的接口在網(wǎng)站上的Drivers/Interfaces小節(jié)可找到, 并且通過Internet很容易搜索到。
(使用PostgreSQL)我需要使用什么計(jì)算機(jī)硬件 ?
由于計(jì)算機(jī)硬件大多數(shù)是兼容的,人們總是傾向于相信所有計(jì)算機(jī)硬件質(zhì)量也是相同的。事實(shí)上不是, ECC RAM(帶奇偶校驗(yàn)的內(nèi)存),SCSI (硬盤)和優(yōu)質(zhì)的主板比一些便宜貨要更加可靠且具有更好的性能。PostgreSQL幾乎可以運(yùn)行在任何硬件上, 但如果可靠性和性能對(duì)你的系統(tǒng)很重要,你就需要全面的研究一下你的硬件配置了。在我們的郵件列表上也有關(guān)于 硬件配置和性價(jià)比的討論。


































