国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > PostgreSQL > 正文

PostgreSQL是什么?PostgreSQL數(shù)據(jù)庫(kù)百科全解

2020-03-12 23:55:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

PostgreSQL是什么?PostgreSQL數(shù)據(jù)庫(kù)百科全解


什么是PostgreSQL?

PostgreSQL是以加州大學(xué)伯克利分校計(jì)算機(jī)系開發(fā)的 POSTGRES,現(xiàn)在已經(jīng)更名為PostgreSQL,版本 4.2為基礎(chǔ)的對(duì)象關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS)。PostgreSQL支持大部分 SQL標(biāo)準(zhǔn)并且提供了許多其他現(xiàn)代特性:復(fù)雜查詢、外鍵、觸發(fā)器、視圖、事務(wù)完整性、MVCC。同樣,PostgreSQL 可以用許多方法擴(kuò)展,比如, 通過(guò)增加新的數(shù)據(jù)類型、函數(shù)、操作符、聚集函數(shù)、索引免費(fèi)使用、修改、和分發(fā) PostgreSQL,不管是私用、商用、還是學(xué)術(shù)研究使用。

主要特性:

PostgreSQL 是一個(gè)自由的對(duì)象-關(guān)系數(shù)據(jù)庫(kù)服務(wù)器(數(shù)據(jù)庫(kù)管理系統(tǒng)),它在靈活的 BSD-風(fēng)格許可證下發(fā)行。它提供了相對(duì)其他開放源代碼數(shù)據(jù)庫(kù)系統(tǒng)(比如 MySQL 和 Firebird),和專有系統(tǒng)(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一種選擇。

PostgreSQL 不尋常的名字導(dǎo)致一些讀者停下來(lái)嘗試拼讀它,特別是那些把SQL拼讀為"sequel"的人。PostgreSQL 開發(fā)者把它拼讀為 "post-gress-Q-L"。它也經(jīng)常被簡(jiǎn)略念為 "postgres"。

優(yōu)點(diǎn)

事實(shí)上, PostgreSQL 的特性覆蓋了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以說(shuō)是目前世界上最豐富的數(shù)據(jù)類型的支持,其中有些數(shù)據(jù)類型可以說(shuō)連商業(yè)數(shù)據(jù)庫(kù)都不具備, 比如 IP 類型和幾何類型等;其次,PostgreSQL 是全功能的自由軟件數(shù)據(jù)庫(kù),很長(zhǎng)時(shí)間以來(lái),PostgreSQL 是唯一支持事務(wù)、子查詢、多版本并行控制系統(tǒng)(MVCC)、數(shù)據(jù)完整性檢查等特性的唯一的一種自由軟件的數(shù)據(jù)庫(kù)管理系統(tǒng)。 Inprise 的 InterBase 以及SAP等廠商將其原先專有軟件開放為自由軟件之后才打破了這個(gè)唯一。最后,PostgreSQL擁有一支非常活躍的開發(fā)隊(duì)伍,而且在許多黑客的努力下,PostgreSQL 的質(zhì)量日益提高。

從技術(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)。

缺點(diǎn)

從 Postgres 開始,PostgreSQL 就經(jīng)受了多次變化。

首先,早期的 PostgreSQL 繼承了幾乎所有 Ingres, Postgres, Postgres95 的問(wèn)題:過(guò)于學(xué)院味,因?yàn)槭紫人哪康氖菙?shù)據(jù)庫(kù)研究,因此不論在穩(wěn)定性, 性能還是使用方方面面,長(zhǎng)期以來(lái)一直沒(mé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ì)算的極限。不過(guò)學(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)。

其次,PostgreSQL 的確還欠缺一些比較高端的數(shù)據(jù)庫(kù)管理系統(tǒng)需要的特性,比如數(shù)據(jù)庫(kù)集群,更優(yōu)良的管理工具和更加自動(dòng)化的系統(tǒng)優(yōu)化功能 等提高數(shù)據(jù)庫(kù)性能的機(jī)制等。


PostgreSQL歷史版本:


早期版本

被稱為 PostgreSQL (發(fā)音為Post-gress-cue-ell)的對(duì)象-關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(有一段時(shí)間被稱為 Postgres95)是從伯克利寫的 POSTGRES 軟件包發(fā)展而來(lái)的。經(jīng)過(guò)十幾年的發(fā)展, PostgreSQL 是世界上可以獲得的最先進(jìn)的開放源碼的數(shù)據(jù)庫(kù)系統(tǒng), 它提供了多版本并發(fā)控制,支持幾乎所有 SQL構(gòu)件(包括子查詢,事務(wù)和用戶定 義類型和函數(shù)), 并且可以獲得非常廣闊范圍的(開發(fā))語(yǔ)言綁定 (包括 C,C++,Java,perl,tcl,和 python)。
Postgres95

在 1994 年, Andrew Yu 和 Jolly Chen 向 POSTGRES 中增加了 SQL 語(yǔ)言的解釋器。并隨后將 Postgres95 源代碼發(fā)布到互聯(lián)網(wǎng)上供大家使用, 成為一個(gè)開放源碼的,原先伯克利 POSTGRES 代碼的繼承者。
Postgres95 所有源代碼都是完全的 ANSI C , 而且代碼量減少了 25%。并且有許多內(nèi)部修改以利于提高性能和代碼的維護(hù)性。 Postgres95 版本 1.0.x 在進(jìn)行 Wisconsin Benchmark 測(cè)試時(shí)大概比 POSTGRES v4.2 快 30-50%。
目前版本

到了 1996 年, "Postgres95"改成新名字 PostgreSQL 用于反映最初的 POSTGRES 和最新的使用 SQL 的版本之間的關(guān)系。 同時(shí)版本號(hào)也 重新從 6.0 開始, 將版本號(hào)放回到最初的由 伯克利 POSTGRES 項(xiàng)目開始的順序中。
Postgres95 版本的開發(fā)重點(diǎn)放在標(biāo)明和理解現(xiàn)有的后端代碼的問(wèn)題上。 PostgreSQL 開發(fā)重點(diǎn)轉(zhuǎn)到了 一些有爭(zhēng)議的特性和功能上面,當(dāng)然各個(gè)方面的工作同時(shí)都在進(jìn)行。
目前,PostgresSQL的穩(wěn)定版本到了9.3.1,具有非常豐富的特性和商業(yè)級(jí)數(shù)據(jù)庫(kù)管理系統(tǒng)的質(zhì)量。


PostgreSQL改進(jìn):

除了修正了一些錯(cuò)誤,下面的是一些主要改進(jìn):
查詢語(yǔ)言

原來(lái)的查詢語(yǔ)言 PostQUEL 被 SQL 取代(在 server 端實(shí)現(xiàn))。在 PostgreSQL 之前還不支持子查詢)(但這個(gè)功能可以在 Postgres95 里面由用戶定義的 SQL 函數(shù)實(shí)現(xiàn))。重新實(shí)現(xiàn)了聚集。同時(shí)還增加了對(duì) GROUP BY 查詢子句的支持。 C 程序仍可以調(diào)用 libpq接口函數(shù)。
新增加了利用 GNU Readline 進(jìn)行交互 SQL 查詢(psql)。 這個(gè)程序很大程度上取代了老的 monitor 程序。
前端庫(kù)

增加了新的前端庫(kù), libpgtcl, 用以支持以 Tcl為基礎(chǔ)的客戶端。一個(gè)樣本 shell, pgtclsh,提供了新的 Tcl 命令用于 Tcl 程序和 Postgres95 后端之間的交互。
徹底重寫了大對(duì)象的接口。 保留了將大對(duì)象倒轉(zhuǎn)(Inversion )作為存儲(chǔ)大對(duì)象的唯一機(jī)制。 (去掉了倒轉(zhuǎn)(Inversion )文件系統(tǒng)。)
去掉了記錄級(jí)(instance-level )的規(guī)則系統(tǒng)。 但我們?nèi)匀豢梢酝ㄟ^(guò)重寫規(guī)則使用規(guī)則。
特性教程

在發(fā)布的源碼中增加了一個(gè)簡(jiǎn)短的常用 SQL 和 Postgres95 特有的 SQL 特性的教程。
用GNU make (取代了 BSD make)用于制作。 Postgres95 可以使用不加補(bǔ)丁的 GCC (修正了偶數(shù)字節(jié)數(shù)據(jù)( doubles )的對(duì)齊問(wèn)題)。


PostgreSQL項(xiàng)目:

Michael Stonebraker 領(lǐng)導(dǎo)的 POSTGRES 項(xiàng)目是由防務(wù)高級(jí)研究項(xiàng)目局(DARPA), 陸軍研究辦公室(ARO),國(guó)家科學(xué)基金(NSF), 以及 ESL, Inc 共同贊助的。 POSTGRES 的實(shí)現(xiàn)始于 1986 年, 該系統(tǒng)最初的概念詳見 POSTGRES的設(shè)計(jì)。 最早的數(shù)據(jù)模型定義見 The POSTGRES Data Model。 當(dāng)時(shí)的規(guī)則系統(tǒng)設(shè)計(jì)在 POSTGRES 規(guī)則系統(tǒng)的設(shè)計(jì) 里描述. 存儲(chǔ)管理器的理論基礎(chǔ)和體系結(jié)構(gòu)在 POSTGRES存儲(chǔ)系統(tǒng)的設(shè)計(jì) 里有詳細(xì)描述。
從那以后,POSTGRES 經(jīng)歷了幾次主要的版本更新。 第一個(gè)"演示性"系統(tǒng)在 1987 年便可使用了, 并且在 1988 年的 ACM-SIGMOD 大會(huì)上展出。在 1989 年六月發(fā)布了版本 1給一些外部的用戶使用。 為了回應(yīng)用戶對(duì)第一個(gè)規(guī)則系統(tǒng)的批評(píng),作者重新設(shè)計(jì)了規(guī)則系統(tǒng),并在1990年6月發(fā)布了使用新規(guī)則系統(tǒng)的版本 2。 版本 3 在1991年出現(xiàn), 增加了多存儲(chǔ)管理器的支持, 并且改進(jìn)了查 詢執(zhí)行器, 重新編寫了規(guī)則系統(tǒng)。 從那以后,隨后的版本直到 Postgres95 發(fā)布前工作都集中在移植性和可靠性上。
POSTGRES 已經(jīng)在許多研究或?qū)嶋H的應(yīng)用中得到了應(yīng)用。 這些應(yīng)用包括: 一個(gè)財(cái)務(wù)數(shù)據(jù)分析系統(tǒng),一個(gè)噴氣引擎性能監(jiān)控軟件包,一個(gè)小行星跟蹤數(shù)據(jù)庫(kù), 一個(gè)醫(yī)療信息數(shù)據(jù)庫(kù)和一些地理信息系統(tǒng)。 POSTGRES 還被許多大學(xué)用于教學(xué)用途。 Illustra Information Technologies Illustra Information Technologies (并入 Informix) 拿到代碼并使之商業(yè)化。在 1992 年 POSTGRES 成為 Sequoia 2000 科學(xué)計(jì)算計(jì)劃的首要數(shù)據(jù)管理器。
到了 1993 年,外部用戶的數(shù)量幾乎翻番。隨著用戶的增加。 用于源代碼維護(hù)的時(shí)間日益增加 占用了太多本應(yīng)該用于數(shù)據(jù)庫(kù)研究的時(shí)間, 為了減少支持的負(fù)擔(dān),伯克利的POSTGRES 項(xiàng)目在版本 4.2 時(shí)正式終止。


PostgreSQL版本發(fā)布:

2013年10月10日,PostgreSQL 正式發(fā)布9.3.1版本。
2012年09月10日,PostgreSQL 宣布 9.2 正式版發(fā)布了!該版本主要在性能方面有很大的提升,也包括一些新的 SQL 特性以及復(fù)制支持方面,主要內(nèi)容包括:
允許查詢直接從索引中獲取數(shù)據(jù),避免訪問(wèn)堆數(shù)據(jù) (index-only scans)
允許查詢計(jì)劃器為指定參數(shù)值生成自定義的計(jì)劃,甚至是用了 Prepared Statement
提升計(jì)劃器通過(guò)內(nèi)部索引掃描來(lái)使用嵌套循環(huán)
允許流復(fù)制從節(jié)點(diǎn)將數(shù)據(jù)轉(zhuǎn)到其他從節(jié)點(diǎn) (cascading replication)
允許pg_basebackup對(duì)待機(jī)的服務(wù)器進(jìn)行基準(zhǔn)備份
增加新工具pg_receivexlog用來(lái)收集[3] WAL 文件的改動(dòng)
增加SP-GiST(Space-Partitioned GiST) 索引訪問(wèn)方法
支持range data types
增加JSON數(shù)據(jù)類型
為視圖增加security_barrier選項(xiàng)
允許 libpq 連接字符串使用URI格式
支技HP-UX
為 libpq 增加single-row processing mode以更好的處理大結(jié)果集。


PostgreSQL特征:

函數(shù)

通過(guò)函數(shù),可以在數(shù)據(jù)庫(kù)服務(wù)器端執(zhí)行指令程序。盡管這樣的指令程序可以使用基本的SQL語(yǔ)句寫成,但是由于其缺乏流程控制等功能,所以在PostgreSQL中引入了使用其它程序語(yǔ)言編寫函數(shù)的能力,包括:
一個(gè)內(nèi)置的名為PL/pgSQL的過(guò)程語(yǔ)言,類似于Oracle的PL/SQL;
包括PL/Perl,plPHP,PL/Python,PL/Ruby,PL/sh,PL/Tcl與PL/Scheme在內(nèi)的腳本語(yǔ)言;
編譯語(yǔ)言:C,C++,或Java(通過(guò)PL/Java)。
R統(tǒng)計(jì)語(yǔ)言(PL/R)。
以上部分的語(yǔ)言,甚至可以在觸發(fā)器內(nèi)執(zhí)行。PostgreSQL支持行返回函數(shù):它們的輸出是一系列行類型數(shù)據(jù)的集合,可以在查詢中當(dāng)作表來(lái)使用。函數(shù)也可以被定義成以創(chuàng)建者或者調(diào)用者的身份運(yùn)行。在某些場(chǎng)合,或者其他的數(shù)據(jù)庫(kù)產(chǎn)品中,函數(shù)也會(huì)被稱為“存儲(chǔ)過(guò)程”,但技術(shù)上這兩者并未有太大分別。
索引

在PostgreSQL中,用戶可以自定義索引方法,或使用內(nèi)置的B-tree,哈希表與GiST索引。PosrgreSQL的索引功能同時(shí)也具有以下功能:
反向索引檢索:無(wú)須額外的索引就能實(shí)現(xiàn)類似ORDER BYfieldDESC的操作。
表達(dá)式索引:可以建立基于表達(dá)式值而非數(shù)值或列的索引。
部分索引:僅索引表的部分,可以通過(guò)在CREATE INDEX語(yǔ)句口添加WHERE從句以創(chuàng)建更小的索引。
位圖索引掃描:從8.1版開始支持此功能。該功能將讀取多個(gè)索引,生成表示它們之間符合查詢標(biāo)準(zhǔn)的多元組交集的位圖。這樣解決了混合索引的問(wèn)題。在一個(gè)具有20列的表中,理論上能創(chuàng)建20! 個(gè)索引,在實(shí)際應(yīng)用中已不現(xiàn)實(shí)。使用位圖索引掃描后,在每次查詢時(shí),它將能把約束條件中所涉及列各自的索引進(jìn)行任意的排列組合。
觸發(fā)器

觸發(fā)器是由SQL語(yǔ)句查詢所觸發(fā)的事件。如:一個(gè)INSERT語(yǔ)句可能觸發(fā)一個(gè)檢查數(shù)據(jù)完整性的觸發(fā)器。觸發(fā)器通常由INSERT或UPDATE語(yǔ)句觸發(fā)。
在PostgreSQL中,可在數(shù)據(jù)表上設(shè)置觸發(fā)器,但無(wú)法在視圖中設(shè)置(對(duì)視圖的UPDATE或者INSERT操作可以使用規(guī)則(RULE)定義)。多個(gè)觸發(fā)器可依據(jù)字母順序依次執(zhí)行。此外,除了使用內(nèi)嵌的PL/PgSQL語(yǔ)言之外,觸發(fā)器的函數(shù)也可以用PL/Perl,PL/Python等語(yǔ)言編寫。
并發(fā)控制

PostgreSQL使用多版本并發(fā)控制(MVCC,Multiversion concurrency control)系統(tǒng)進(jìn)行并發(fā)控制,該系統(tǒng)向每個(gè)用戶提供了一個(gè)數(shù)據(jù)庫(kù)的“快照”,用戶在事務(wù)內(nèi)所作的每個(gè)修改,對(duì)于其他的用戶都不可見,直到該事務(wù)成功提交。這從很大程度上減少了對(duì)讀取鎖的依賴,同時(shí)保證了數(shù)據(jù)庫(kù)高效地符合ACID原則。
規(guī)則

規(guī)則(RULE)允許一個(gè)查詢能被重寫,通常被用作實(shí)現(xiàn)可更新的視圖。
數(shù)據(jù)類型

PostgreSQL內(nèi)置豐富的數(shù)據(jù)類型,包括:
任意精度的數(shù)值
無(wú)限制長(zhǎng)度文本
幾何圖元
IP地址與IPv6地址
無(wú)類域間路由地址塊,MAC地址
數(shù)組
此外,用戶可以創(chuàng)建自定義數(shù)據(jù)類型,通常通過(guò)PostgreSQL的GiST機(jī)制,它們也能被很好得索引,比如PostGIS地理信息系統(tǒng)的數(shù)據(jù)類型。
定義對(duì)象

用戶可以為數(shù)據(jù)庫(kù)內(nèi)幾乎所有的對(duì)象定義新的類型,包括:
索引
操作符(可重載現(xiàn)有操作符。)
聚合函數(shù)
數(shù)據(jù)域
數(shù)據(jù)類型轉(zhuǎn)換
會(huì)話(編碼轉(zhuǎn)換)
繼承

數(shù)據(jù)表的結(jié)構(gòu)及屬性可從一個(gè)“父”表中繼承,數(shù)據(jù)將在兩者間共享。對(duì)子表中數(shù)據(jù)的插入或者刪除也將在父表中體現(xiàn),同樣,對(duì)父表作出的修改,比如添加列等操作也會(huì)導(dǎo)致子表產(chǎn)生相應(yīng)改動(dòng)。該功能尚未完全實(shí)現(xiàn),實(shí)際上,表的約束尚不能繼承。比如,在一張外聯(lián)參考了父表id字段的表中,插入一條具有子表中某條記錄id數(shù)據(jù)的記錄會(huì)導(dǎo)致失敗,因?yàn)镻ostgreSQL在對(duì)父表的外鍵約束檢查中不會(huì)檢查子表的內(nèi)容。
擴(kuò)展

地理數(shù)據(jù)對(duì)象:PostGISGPL
全文檢索:通過(guò)Tsearch2或OpenFTS, 將在8.3版本中內(nèi)嵌Tsearch2。GPL
多種異步主/從復(fù)制方案,包括Slony-I(BSD授權(quán)),Mammoth Replicator
XML/XSLT支持contrib軟件包中的XPath擴(kuò)展GPL

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 西乌| 垣曲县| 万盛区| 榆社县| 大丰市| 永仁县| 水富县| 道孚县| 尉氏县| 缙云县| 贺兰县| 正蓝旗| 阳山县| 仲巴县| 淮安市| 扶绥县| 太保市| 湖口县| 大理市| 临夏市| 凤山市| 那曲县| 开封县| 若尔盖县| 昆明市| 岳阳县| 新和县| 公主岭市| 会昌县| 奎屯市| 寿光市| 家居| 安远县| 樟树市| 中江县| 汉中市| 枝江市| 池州市| 万全县| 旬阳县| 宣化县|