佛山響應(yīng)式網(wǎng)站開(kāi)發(fā)深圳seo優(yōu)化公司
Day01-postgresql數(shù)據(jù)庫(kù)基礎(chǔ)入門培訓(xùn)
- 1、PostgresQL數(shù)據(jù)庫(kù)簡(jiǎn)介
- 2、PostgreSQL行業(yè)生態(tài)應(yīng)用
- 3、PostgreSQL版本發(fā)展與特性
- 4、PostgreSQL體系結(jié)構(gòu)介紹
- 5、PostgreSQL與MySQL的區(qū)別
- 6、PostgreSQL與Oracle、MySQL的對(duì)比
1、PostgresQL數(shù)據(jù)庫(kù)簡(jiǎn)介
-
PostgreSQL【簡(jiǎn)稱:PG】是加州大學(xué)伯克利分校計(jì)算機(jī)系開(kāi)發(fā)的,一個(gè)開(kāi)源免費(fèi)的關(guān)系式數(shù)據(jù)庫(kù)管理系統(tǒng),經(jīng)過(guò)長(zhǎng)達(dá)15年以上的積極開(kāi)發(fā)和不斷改進(jìn),PostgreSQL已在可靠性、穩(wěn)定性、數(shù)據(jù)一致性等獲得了業(yè)內(nèi)相對(duì)高的聲譽(yù)。
-
PostgreSQL可以運(yùn)行在所有主流操作系統(tǒng)上,包括Linux、AIX、HP-UX、Solaris和Windows等34種平臺(tái)。
-
PostgreSQL是完全的事務(wù)安全性數(shù)據(jù)庫(kù),完整地支持外鍵、聯(lián)合、視圖、觸發(fā)器和存儲(chǔ)過(guò)程(并支持多種語(yǔ)言開(kāi)發(fā)存儲(chǔ)過(guò)程)。
-
PostgreSQL支持了大多數(shù)SQL標(biāo)準(zhǔn)的數(shù)據(jù)類型,包括整型、數(shù)值型、布爾型、字節(jié)型、字符型、日期型、時(shí)間型、二進(jìn)制的大對(duì)像(圖片、聲音和視頻)。
-
PostgreSQL的存儲(chǔ)過(guò)程開(kāi)發(fā)可以使用眾多的程序語(yǔ)言,包括Java、Perl、Python、Ruby、Tcl、C/C++和自帶的PL/pgSQL,其中的PL/pgSQL與Oracle的PL/SQL很相似,內(nèi)置了數(shù)百個(gè)函數(shù),功能從基本的算術(shù)計(jì)算和字符串處理到加密邏輯計(jì)算并與Oracle有高度兼容性。
-
PostgreSQL支持國(guó)際字符集、多字節(jié)編碼并支持使用當(dāng)?shù)卣Z(yǔ)言進(jìn)行排序、大小寫處理和格式化等操作。
-
PostgreSQL對(duì)很多高級(jí)開(kāi)發(fā)語(yǔ)言有原生的編程接口,如C/C++、Java、.Net、Perl、Python、Ruby、Tcl和ODBC以及其他語(yǔ)言等,也包含各種文檔。
-
PostgreSQL有很多高級(jí)功能,像多版本并發(fā)控制(MVCC)、按時(shí)間點(diǎn)恢復(fù)(PITR)、表空間、異步復(fù)制、嵌套事務(wù)、在線熱備、復(fù)雜查詢的規(guī)劃和優(yōu)化以及為容錯(cuò)而進(jìn)行的預(yù)寫日志等。
-
PostgreSQL有很多高品質(zhì)的圖形化的PostgreSQL管理工具軟件,包括開(kāi)源和商業(yè)性質(zhì)的。
-
PostgreSQL的源代碼可以自由獲取,它的授權(quán)是在非常自由的開(kāi)源授權(quán)下,這種授權(quán)允許用戶在各種開(kāi)源或是閉源項(xiàng)目中使用、修改和發(fā)布PostgreSQL的源代碼。用戶對(duì)源代碼的可以按用戶意愿進(jìn)行任何修改、改進(jìn)。
-
PostgreSQL的快速發(fā)展是由于MySQL被Oracle公司收購(gòu)導(dǎo)致的,同時(shí)在2019年微軟官宣收購(gòu)PostgreSQL初創(chuàng)公司Citus Data(OLAP:citus分布式插件)。
2、PostgreSQL行業(yè)生態(tài)應(yīng)用
-
PostgreSQL被稱為“世界上最先進(jìn)的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)”,屬于一專多長(zhǎng)的全棧數(shù)據(jù)庫(kù),主要場(chǎng)景應(yīng)用如下:
- OLTP交易系統(tǒng)
- OLAP、批處理、數(shù)據(jù)倉(cāng)庫(kù)
- 空間與地理數(shù)據(jù)庫(kù)(PostGIS)
- 緩存系統(tǒng)、消息隊(duì)列/流處理
- 搜索索引、圖數(shù)據(jù)庫(kù)
- NoSOL數(shù)據(jù)庫(kù)
- 時(shí)序數(shù)據(jù)庫(kù) 【MySQL被稱為“世界上最流行的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)”】
-
在全球數(shù)據(jù)庫(kù)排名中,PostgreSQL排名全球第四(統(tǒng)計(jì)時(shí)間:2023.06)
- 在商業(yè)數(shù)據(jù)庫(kù)當(dāng)中,Oracle屬于多專多長(zhǎng)的全數(shù)據(jù)庫(kù),全球最強(qiáng)。
- 在開(kāi)源數(shù)據(jù)庫(kù)當(dāng)中,MySQL主要應(yīng)用于互聯(lián)網(wǎng)業(yè)務(wù)的OLTP,所以PostgreSQL彌補(bǔ)了MySOL在傳統(tǒng)行業(yè)不擅長(zhǎng)的方向,又解決了商業(yè)數(shù)據(jù)庫(kù)的成本問(wèn)題。
- 隨著信創(chuàng)項(xiàng)目的推動(dòng),國(guó)產(chǎn)數(shù)據(jù)庫(kù)主要以O(shè)racle、MySQL、PostgreSQL三個(gè)方向?yàn)橹?#xff0c;目前以PostgreSQL開(kāi)源進(jìn)行二次開(kāi)發(fā)的國(guó)產(chǎn)數(shù)據(jù)庫(kù)應(yīng)用越來(lái)越廣,同時(shí)國(guó)內(nèi)外使用的客戶越來(lái)越多,比如:平安、蘇寧、人壽、招商,DELL,富士通,SAP蘋果,本田,豐田等。
- PostgreSQL基于云平臺(tái)的使用,如AWS、阿里云、騰訊、華為都有用到PG的社區(qū)版作為數(shù)據(jù)庫(kù)可選方案之一
根據(jù)中國(guó)信通院發(fā)布的數(shù)據(jù)庫(kù)發(fā)展研究報(bào)告2021,我國(guó)關(guān)系型數(shù)據(jù)庫(kù)基于MySQL和PostgreSQL二次開(kāi)發(fā)的數(shù)量依次占關(guān)系型數(shù)據(jù)庫(kù)比例為28.40%和29.63%。
- 從目前國(guó)內(nèi)發(fā)布的產(chǎn)品來(lái)說(shuō),大部分都高度兼容Oracle。
- 未來(lái)國(guó)內(nèi)市場(chǎng)數(shù)據(jù)庫(kù)主流的產(chǎn)品線為3種模式:
- Oracle
- PostgreSQL
- MySQL(MySQL+MongoDB+Redis)
從國(guó)內(nèi)外數(shù)據(jù)庫(kù)源流分支來(lái)說(shuō)(依托開(kāi)源協(xié)議來(lái)構(gòu)建或二次開(kāi)發(fā)),源流于PostgreSQL的開(kāi)源協(xié)議框架,據(jù)不完全準(zhǔn)確統(tǒng)計(jì),列舉部分-Part1:
- EDB(Enterprise Postgres Database)
- PostGlS、Citus、Timescaledb、PipelineDB
- GreenPlum
- 電信TeleDB
- 騰訊TDSQL PostgreSQL版(原TBase)
- 阿里PolarDB for PostgreSQL/AnalyticDB PostgreSQL
- 人大金倉(cāng)KingBase
源流于PostgreSQL的開(kāi)源協(xié)議框架,據(jù)不完全準(zhǔn)確統(tǒng)計(jì),列舉部分-Part2:
- 瀚高HighGo DB
- 酷克HASHDATA
- 優(yōu)炫UXDB
- 亞信AntDB
- 偶數(shù)HAWQ
- 華為GaussDB A(200+300)
- 華為openGauss
源流于PostgreSQL的開(kāi)源協(xié)議框架,據(jù)不完全準(zhǔn)確統(tǒng)計(jì)-Part3
其中基于華為openGauss又包括-Part1:
- 中國(guó)移動(dòng)-磐維數(shù)據(jù)庫(kù)
- 中國(guó)聯(lián)通-CUDB
- 海量Vastbase
- 恩墨MogDB
- 神舟通用
- 南大通用Gbase 8c/8s
- 恒生電子LightDB
源流于PostgreSQL的開(kāi)源協(xié)議框架,據(jù)不完準(zhǔn)確統(tǒng)計(jì)-Part4
其中基于華為openGauss又包括-Part2:
- 超聚變FusionDB
- 虛谷偉業(yè)-有蓉?cái)?shù)據(jù)庫(kù)
- 北京太陽(yáng)塔LNXDB-RDS
- 沐融信息MuDB
- 天曦TXDB
3、PostgreSQL版本發(fā)展與特性
PostgreSQL最新正式版15.3(2023.6),2023年發(fā)布正式版16.1。
各版本發(fā)布的時(shí)間與生命周期如下:
postgresql各版本特性介紹:https://www.postgresql.org/about/featurematrix/
PostgreSQL各版本特性介紹:
-
1986年:Postgre誕生
-
1989年:Postgres 1 發(fā)布
-
1990年:Postgres 2 發(fā)布,重寫了規(guī)則系統(tǒng)
-
1991年:Postgres 3 發(fā)布,改進(jìn)了規(guī)則系統(tǒng),增加了對(duì)多種存儲(chǔ)系統(tǒng)支持的能力,并且改進(jìn)了查詢引擎。
-
1993年:Postgres 4 發(fā)布,隨便用戶與特性需求急劇增加,隨后該項(xiàng)目正式終止
-
1994年:新增SQL語(yǔ)言解釋器,建立了Postgres95。
-
1996年:Postgres改名PostgreSQL,正式社區(qū)化發(fā)展。
-
1997年:PostgreSQL 6.0 發(fā)布,第一個(gè)正式版本,后續(xù)1997年~1999年期間陸續(xù)發(fā)布了6.1/6.2/6.3/6.4/6.5,新增的功能有:
- 多列索引、序列、貨幣和時(shí)間數(shù)據(jù)類型,GEQO。
- JDBC接口、觸發(fā)器、服務(wù)端編程接口、約束,SOL92標(biāo)準(zhǔn)的子查詢
- 增加了可讀視圖、PL/pgTGL。
- MVCC、臨時(shí)表、更多的SOL語(yǔ)句支持。
-
2001年:PostgreSQL7.0發(fā)布,增加了外鍵、JOIN連接。
-
2001年:PostgreSQL7.1發(fā)布,增加了WAL預(yù)寫式日志、外連接。
-
2002年:PostgreSQL7.2發(fā)布,支持PostGlS,索引,函數(shù),增加了PL/Python。
-
2003年:PostgreSQL7.3發(fā)布,增加了模式、表函數(shù)、prepared query。
-
2004年:PostgreSQL7.4發(fā)布,優(yōu)化了JOIN和數(shù)據(jù)倉(cāng)庫(kù)函數(shù)。
-
2005年:PostgreSQL8.0發(fā)布,支持Win平臺(tái)/增加savepoints/表空間/時(shí)間點(diǎn)恢復(fù)。
-
2005年:PostgreSQL8.1發(fā)布,性能增強(qiáng)、增加了兩階段提交、表分區(qū)、位圖索引掃描、共享行鎖、角色。
-
2006年:PostgreSQL8.2發(fā)布,性能增強(qiáng),增加了在線重建索引/咨詢鎖/熱備
-
2008年:PostgreSQL8.3發(fā)布,增加全文搜索、SQL/XML、枚舉類型、UUID類型等
-
2009年:PostgreSQL8.4發(fā)布,窗口查詢,數(shù)據(jù)透視,遞歸查詢,并行恢復(fù),列級(jí)權(quán)限,CTE公用表表達(dá)式。
-
2010年:PostgreSQL9.0發(fā)布,支持Windows 64位系統(tǒng),增加內(nèi)置二進(jìn)制流復(fù)制、熱備、內(nèi)置升級(jí)功能。
-
2011年:PostgreSQL9.1發(fā)布,增加同步復(fù)制、無(wú)日志表、序列快照隔離級(jí)別、SELinux集成、擴(kuò)展、外部表,可寫CTE公用表表達(dá)式。
-
2012年:PostgreSQL9.2發(fā)布,增加級(jí)聯(lián)流復(fù)制、原生JSON支持、增強(qiáng)鎖管理、range類型、索引掃描、空間分區(qū)GIST索引。
-
2013年:PostgreSQL9.3發(fā)布,增加觸發(fā)器、視圖、可寫外部表、物化視圖、復(fù)制功能增強(qiáng),橫向連接LATERAL JOIN、。
-
2014年:PostgreSQL9.4發(fā)布,Linux大頁(yè)支持,增加了JSONB、RANGE類型,ALTER SYSTEM語(yǔ)法、不阻塞讀的刷新物化視圖、動(dòng)態(tài)注冊(cè)/起停后臺(tái)進(jìn)程、邏輯API、GIN索引增強(qiáng)。
-
2016年:PostgreSQL9.5發(fā)布,新的BRIN索引,增加UPSERT插入更新、CUBE/ROLLUP/GROUPING SETS分組集合等語(yǔ)法,行級(jí)安全
-
2016年:PostgreSOL9.6發(fā)布,支持并行查詢,FDW功能增強(qiáng),多機(jī)同步standby,快速清空大表。
為了加快市場(chǎng)推廣,跟進(jìn)Oracle版本策略,平均每年發(fā)布一個(gè)大版本:
-
2017年:PostgreSQL 10發(fā)布,支持邏輯復(fù)制,內(nèi)置分區(qū)表,增強(qiáng)并行查詢機(jī)制,數(shù)據(jù)庫(kù)編程能力,并行功能增強(qiáng),全文檢索支持JSON和JSONB數(shù)據(jù)類型,估值計(jì)算,文本挖掘,物聯(lián)網(wǎng)優(yōu)化,GIS業(yè)務(wù)優(yōu)化,圖像搜索,基因測(cè)序,3D數(shù)據(jù)處理,機(jī)器學(xué)習(xí)UDF庫(kù)等。
-
2018年:PostgreSQL 11發(fā)布,分區(qū)表的改進(jìn)與增強(qiáng),存儲(chǔ)過(guò)程支持事務(wù),并行能力的增強(qiáng),增加對(duì)JIT編譯的支持,其它功能完善。
-
2019年:PostgreSQL 12發(fā)布,分區(qū)性能提升,B樹(shù)索引增強(qiáng),公用表表達(dá)式(CTE),準(zhǔn)備好的計(jì)劃控制,即時(shí)編譯,校驗(yàn)和控制,在線重建索引,支持SQL/JSONpath,支持生成列,新增 Pluggable Table Storage Interface等。
-
2020年:PostgreSQL 13發(fā)布,Btree索引優(yōu)化,支持增量排序,支持并行vacuum index,支持可信插件,支持?jǐn)U展統(tǒng)計(jì)信息,支持hash aggregation使用磁盤存儲(chǔ),邏輯復(fù)制對(duì)分區(qū)表的支持。
-
2021年:PostgreSQL 14發(fā)布,數(shù)據(jù)類型與函數(shù)更多支持,管理功能增強(qiáng),復(fù)制和恢復(fù)增強(qiáng),索引功能改進(jìn),性能提升,安全增強(qiáng)等。
-
2022年:PostgreSQL 15發(fā)布,大數(shù)據(jù)集的排序性能提升,各類查詢也進(jìn)行了優(yōu)化,支持使用LZ4、Zstandard算法進(jìn)行壓縮備份,引入了jsonlog數(shù)據(jù)格式用于日志記錄,安全性增強(qiáng),刪除public模式的創(chuàng)建權(quán)限。
-
2023年:PostgreSQL 16發(fā)布,可以實(shí)現(xiàn)級(jí)聯(lián)邏輯復(fù)制,支持更多的并行查詢,安全增強(qiáng),監(jiān)控管理增強(qiáng)。
4、PostgreSQL體系結(jié)構(gòu)介紹
應(yīng)用程序的訪問(wèn)架構(gòu)
PostgreSQL體系結(jié)構(gòu)
它由共享內(nèi)存、一系列后臺(tái)進(jìn)程和數(shù)據(jù)文件組成。
PostgreSQL進(jìn)程分為主進(jìn)程與輔助進(jìn)程。
主進(jìn)程:
- Postmaster進(jìn)程是整個(gè)數(shù)據(jù)庫(kù)實(shí)例的總控進(jìn)程,負(fù)責(zé)啟動(dòng)關(guān)閉該數(shù)據(jù)庫(kù)實(shí)例。
輔助進(jìn)程:
- SysLogger(系統(tǒng)日志)進(jìn)程
- BgWriter(后臺(tái)寫)進(jìn)程
- WALWrite(預(yù)寫式日志)進(jìn)程
- PgArch(歸檔)進(jìn)程
- AutoVacuum(系統(tǒng)自動(dòng)清理)進(jìn)程
- PgStat(統(tǒng)計(jì)收集)進(jìn)程
- CheckPoint(檢查點(diǎn))進(jìn)程
PostgreSQL的邏輯結(jié)構(gòu)分為實(shí)例、數(shù)據(jù)庫(kù)、schema、對(duì)象;
實(shí)例中允許創(chuàng)建多個(gè)數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)中可以創(chuàng)建多個(gè)schema,每個(gè)schema下面可以創(chuàng)建多個(gè)對(duì)象。對(duì)象包括表、索引、視圖、序列、函數(shù)等。
表空間是物理結(jié)構(gòu),同一表空間下可以有多個(gè)數(shù)據(jù)庫(kù)。
數(shù)據(jù)庫(kù)是邏輯結(jié)構(gòu),是表、索引、視圖、存儲(chǔ)過(guò)程、函數(shù)等對(duì)象的集合,一個(gè)數(shù)據(jù)庫(kù)下可以有多個(gè)schema。
模式是邏輯結(jié)構(gòu),是對(duì)數(shù)據(jù)庫(kù)的邏輯劃分。
在oracle中用戶和schema基本上可以畫上等同關(guān)系,但是pg中兩者沒(méi)有這樣嚴(yán)格的對(duì)應(yīng)關(guān)系
將數(shù)據(jù)文件中的空間從邏輯上劃分成一個(gè)個(gè)頁(yè)面(數(shù)據(jù)塊)
數(shù)據(jù)頁(yè)大小:默認(rèn)為8K
(可支持4K=16TB,8K=32TB,16K=64TB,32K=128TB)
頁(yè)面可以分成兩種:
- 數(shù)據(jù)頁(yè)面:數(shù)據(jù)頁(yè)面是用來(lái)存儲(chǔ)用戶數(shù)據(jù)的
- 控制頁(yè)面:控制頁(yè)面用來(lái)管理這些數(shù)據(jù)頁(yè)面
數(shù)據(jù)庫(kù)共享緩存中的空間劃分也是按頁(yè)為基本單位,一個(gè)頁(yè)的大小與數(shù)據(jù)文件中頁(yè)的大小一致,這樣便于整頁(yè)讀取數(shù)據(jù)文件,并放入到數(shù)據(jù)庫(kù)Buffer中,從Buffer寫入數(shù)據(jù)文件也同理,保證了緩存與數(shù)據(jù)文件結(jié)構(gòu)和內(nèi)容上的一致性。
數(shù)據(jù)庫(kù)包含的文件種類:
- 數(shù)據(jù)庫(kù)文件:數(shù)據(jù)庫(kù)對(duì)象,如:數(shù)據(jù)庫(kù)、表,索引,序列等對(duì)象。
- 控制文件:用來(lái)記錄數(shù)據(jù)庫(kù)集群的狀態(tài)信息,如:版本信息、集群所管理的各種文件信息、檢查點(diǎn)信息、事務(wù)狀態(tài)信息等
- 參數(shù)文件:存放數(shù)據(jù)庫(kù)運(yùn)行參數(shù)
- 日志文件:記錄數(shù)據(jù)修改操作的日志,用于系統(tǒng)發(fā)生故障時(shí)進(jìn)行數(shù)據(jù)恢復(fù)。
- 臨時(shí)文件:存放數(shù)據(jù)庫(kù)進(jìn)行計(jì)算的過(guò)程中,生成的各種中間對(duì)象,如排序運(yùn)算的外存歸并單元。
PostgreSQL由一系列數(shù)據(jù)庫(kù)組成。
一套PostgreSQL程序稱之為一個(gè)數(shù)據(jù)庫(kù)群集。
當(dāng)initdb()命令執(zhí)行后,template0,template1,和postgres數(shù)據(jù)庫(kù)被創(chuàng)建。
template0和template1數(shù)據(jù)庫(kù)是創(chuàng)建用戶數(shù)據(jù)庫(kù)時(shí)使用的模版數(shù)據(jù)庫(kù),他們包含系統(tǒng)元數(shù)據(jù)表。
initdb()剛完成后,template0和template1數(shù)據(jù)庫(kù)中的表是一樣的。但是template1數(shù)據(jù)庫(kù)可以根據(jù)用戶需要?jiǎng)?chuàng)建對(duì)象。用戶數(shù)據(jù)庫(kù)是通過(guò)克隆template1數(shù)據(jù)庫(kù)來(lái)創(chuàng)建的;
一個(gè)表空間可以被多個(gè)數(shù)據(jù)庫(kù)同時(shí)使用。此時(shí),每一個(gè)數(shù)據(jù)庫(kù)都會(huì)在表空間路徑下創(chuàng)建為一個(gè)新的子路徑。
創(chuàng)建一個(gè)用戶表空間會(huì)在$PGDATA\pg_tblspc目錄下面創(chuàng)建一個(gè)軟連接,連接到表空間制定的目錄位置。
PostgreSQL內(nèi)存主要為分共享內(nèi)存與本地內(nèi)存。
共享內(nèi)存
PostgreSQL啟動(dòng)后,會(huì)生成一塊共享內(nèi)存,用于做數(shù)據(jù)塊的緩沖區(qū),以便提高讀寫性能。WAL日志緩沖區(qū)和Clog緩沖區(qū)也存在共享內(nèi)存中,除此之外還有全局信息比如進(jìn)程、鎖、全局統(tǒng)計(jì)等信息也保存在共享內(nèi)存中。
其中最重要的組成部分是Shared Buffer和WAL Buffer。
本地內(nèi)存
非全局存儲(chǔ)的數(shù)據(jù)都存在本地內(nèi)存中,主要包括:
臨時(shí)緩沖區(qū):用于訪問(wèn)臨時(shí)表的緩沖區(qū)
work_mem:內(nèi)部排序操作和Hash表在使用臨時(shí)操作文件之前使用的存儲(chǔ)緩沖區(qū)。
manintance_work mem:在維護(hù)操作比如:VACUUM(收集表和索引的統(tǒng)計(jì)信息,整理表和索引)、CREATE INDEX、ALTER TABLE ADD FOREIGN Key等中使用的內(nèi)存緩沖區(qū)。
5、PostgreSQL與MySQL的區(qū)別
序號(hào) | 特性類型 | MySQL | PostgreSQL |
---|---|---|---|
1 | 實(shí)例與數(shù)據(jù)庫(kù) | 1.通過(guò)MySQL命令(mysqld)啟動(dòng)實(shí)例); 2.一個(gè)實(shí)例可以管理一個(gè)或多個(gè)數(shù)據(jù)庫(kù); 3.一臺(tái)服務(wù)器可以運(yùn)行多個(gè) mysqld 實(shí)例; 4.一個(gè)MySQL實(shí)例中的所有數(shù)據(jù)庫(kù)共享同一個(gè)系統(tǒng)編目。 | 1.通過(guò)Postmaster 進(jìn)程(pg_ctl)啟動(dòng)實(shí)例; 2.一個(gè)實(shí)例可以管理一個(gè)或多個(gè)數(shù)據(jù)庫(kù),這些數(shù)據(jù)庫(kù)組成一個(gè)集群; 3.集群是磁盤上的一個(gè)區(qū)域,這個(gè)區(qū)域在安裝時(shí)初始化并由一個(gè)目錄組成,所有數(shù)據(jù)都存儲(chǔ)在這個(gè)目錄中; 4.使用 initdb 創(chuàng)建第一個(gè)數(shù)據(jù)庫(kù)。一臺(tái)機(jī)器上可以啟動(dòng)多個(gè)實(shí)例; 5.每個(gè)數(shù)據(jù)庫(kù)有自己的系統(tǒng)編目,但所有數(shù)據(jù)庫(kù)共享pg_databases |
2 | 配置文件 | my.conf | Postgresgl.conf |
3 | 數(shù)據(jù)庫(kù)連接 | 使用 CONNECT或 USE 語(yǔ)句連接數(shù)據(jù)庫(kù),這時(shí)要指定數(shù)據(jù)庫(kù)名,還可以指定用戶id和密碼。 | 使用 connect 語(yǔ)句連接數(shù)據(jù)庫(kù),這時(shí)要指定數(shù)據(jù)庫(kù)名,還可以指定用戶 id 和密碼。 |
4 | 客戶機(jī)連接文件 | my.conf | pg_hba.conf |
5 | 數(shù)據(jù)緩沖區(qū) | 通過(guò) innodb_buffer_pool _size參數(shù)設(shè)置數(shù)據(jù)緩沖區(qū),這個(gè)參數(shù)最高可以設(shè)置為機(jī)器物理內(nèi)存量的 80%。 | 通過(guò)Shared_buffers參數(shù)設(shè)置數(shù)據(jù)緩沖區(qū)。在默認(rèn)情況下分配64個(gè)緩沖區(qū)。默認(rèn)的塊大小是 8K??梢酝ㄟ^(guò)設(shè)置postgresql.conf 文件中的 shared_buffers 參數(shù)來(lái)更新緩沖沖區(qū)緩存。 |
6 | 執(zhí)行計(jì)劃 | 使用 EXPLAIN 命令查看查詢的解釋計(jì)劃。 | 使用 EXPLAIN 命令查看查詢的解釋計(jì)劃,返回豐富的信息, |
7 | 備份恢復(fù) | InnoDB 使用重做日志記錄,支持在線和離線完全備份以及崩潰和事務(wù)恢復(fù),也支持熱備份。 | 在數(shù)據(jù)目錄的一個(gè)子目錄中維護(hù)重做日志。支持在線和離線完全備份以及崩潰、時(shí)間點(diǎn)和事務(wù)恢復(fù),可以支持熱備份。 |
8 | 表 | 取決于存儲(chǔ)引擎。例如,NDB存儲(chǔ)引擎支持分區(qū)表,內(nèi)存引擎支持內(nèi)存表。 | 支持臨時(shí)表、常規(guī)表以及范圍和列表類型的分區(qū)表,不支持哈希分區(qū)表。由于PostgreSQL的表分區(qū)是通過(guò)表繼承和規(guī)則系統(tǒng)完成了,所以可以實(shí)現(xiàn)更復(fù)雜的分區(qū)方式。 |
9 | 索引 | 1.取決存儲(chǔ)引擎。MyISAM與InnoDB都支持BTREE 2.不支持函數(shù)索引,只能在創(chuàng)建基于具體列的索引 | 1.支持 B-樹(shù)、哈希、R-樹(shù)和 Gist 索引。 2.支持函數(shù)索引,同時(shí)還支持部分?jǐn)?shù)據(jù)索引。 |
10 | 約束 | 支持主鍵、外鍵、唯一和非空約束。對(duì)檢查約束進(jìn)行解析,但是不強(qiáng)制實(shí)施。 | 支持主鍵、外鍵、唯一、非空和檢查約束。 |
11 | 存儲(chǔ)過(guò)程 | 支持 CREATE PROCEDURE 和 CREATE FUNCTION 語(yǔ)句。存儲(chǔ)過(guò)程可以用 SQL 和C++ 編寫。 | 沒(méi)有單獨(dú)的存儲(chǔ)過(guò)程,都是通過(guò)函數(shù)實(shí)現(xiàn)的。 |
12 | 函數(shù) | 用戶定義函數(shù)可以用 SQL、c 和 C++編寫 | 用戶定義函數(shù)可以用 PL/pgSQL(專用的過(guò)程語(yǔ)言)、PL/TcI、PL/Perl、PL/Python、SQL和C編寫。 |
13 | 觸發(fā)器 | 支持事前、事后觸發(fā)器和語(yǔ)句觸發(fā)器,觸發(fā)器語(yǔ)句用過(guò)程語(yǔ)言復(fù)合語(yǔ)句編寫。 | 支持事前、事后觸發(fā)器和語(yǔ)句觸發(fā)器,觸發(fā)器過(guò)程用C編寫。 |
14 | 物化視圖 | 不支持物化視圖。 | 通過(guò)規(guī)則系統(tǒng)可以實(shí)現(xiàn)物化視圖的功能。 |
15 | 事務(wù)與鎖 | 支持表級(jí)和行級(jí)鎖。 InnoDB 存儲(chǔ)引擎支持讀未提交(read-uncommitted)、不可重復(fù)讀(read-committed)、可重復(fù)讀(repeatable-read)、串行化(serializable)。 使用 SET TRANSACTION ISOLATION LEVEL語(yǔ)句在事務(wù)級(jí)設(shè)置隔離級(jí)別。 | 支持表級(jí)和行級(jí)鎖。 支持的隔離級(jí)別是Read Committed(默認(rèn)-看到查詢啟動(dòng)時(shí)數(shù)據(jù)庫(kù)的快照)和 Serialization(與 Repeatable Read 相似,只能看到在事務(wù)啟動(dòng)之前提交的結(jié)果)。 使用 SET TRANSACTION 語(yǔ)句在事務(wù)級(jí)設(shè)置隔離級(jí)別。 使用 SET SESSION 在會(huì)話級(jí)進(jìn)行設(shè)置。 |
16 | DBLINK | 不支持database link。 | 有dblink、FDW,可以連接到oracle和mysql上。 |