PostgreSQL詳解_第1頁
PostgreSQL詳解_第2頁
PostgreSQL詳解_第3頁
PostgreSQL詳解_第4頁
PostgreSQL詳解_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、 PostgreSQL數(shù)據(jù)庫一:PostgreSQL介紹1.PostgreSQL是以加州大學伯克利分校計算機系開發(fā)的 POSTGRES,現(xiàn)在已經(jīng)更名為POSTGRES,版本 4.2為基礎的對象關系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS)。PostgreSQL支持大部分 SQL標準并且提供了許多其他現(xiàn)代特性:復雜查詢、外鍵、觸發(fā)器、視圖、事務完整性、MVCC。同樣,PostgreSQL 可以用許多方法擴展,比如, 通過增加新的數(shù)據(jù)類型、函數(shù)、操作符、聚集函數(shù)、索引方法、過程語言。并且,因為許可證的靈活,任何人都可以以任何目的免費使用、修改、和分發(fā) PostgreSQL,不管是私用、商用、還是學術研究使用

2、。2.PostgreSQL圖標3. PostgreSQL優(yōu)點有目前世界上最豐富的數(shù)據(jù)類型的支持支持,其中有些數(shù)據(jù)類型可以說連商業(yè)數(shù)據(jù)庫都不具備,具體類型下文會說明.PostgreSQL擁有一支非?;钴S的開發(fā)隊伍,而且在許多黑客的努力下,PostgreSQL 的質量日益提高PostgreSQL 對接口的支持也是非常豐富的,幾乎支持所有類型的數(shù)據(jù)庫客戶端接口。這一點也可以說是 PostgreSQL 一大優(yōu)點。4. PostgreSQL缺點首先,早期的 PostgreSQL 繼承了幾乎所有 Ingres, Postgres, Postgres95 的問題:過于學院味,因為首先它的目的是數(shù)據(jù)庫研究,因

3、此不論在穩(wěn)定性, 性能還是使用方方面面,長期以來一直沒有得到重視,直到 PostgreSQL 項目開始以后,情況才越來越好,PostgreSQL 已經(jīng)完全可以勝任任何中上規(guī)模范圍內(nèi)的應用范圍的業(yè)務其次,PostgreSQL 的確還欠缺一些比較高端的數(shù)據(jù)庫管理系統(tǒng)需要的特性,比如數(shù)據(jù)庫集群,更優(yōu)良的管理工具和更加自動化的系統(tǒng)優(yōu)化功能 等提高數(shù)據(jù)庫性能的機制等。5. 目前官方最新版本:9.3.2二、windows下安裝過程1、開始安裝: 2、 選擇程序安裝目錄: 注:安裝 PostgreSQL 的分區(qū)最好是 NTFS 格式的。PostgreSQL 首要任務是要保證數(shù)據(jù)的完整性,而 FAT 和 FA

4、T32 文件系統(tǒng)不能提供這樣的可靠性保障,而且 FAT 文件系統(tǒng)缺乏安全性保障,無法保證原始數(shù)據(jù)在未經(jīng)授權的情況下被更改。此外,PostgreSQL 所使用的"多分點"功能完成表空間的這一特征在FAT文件系統(tǒng)下無法實現(xiàn)。然而,在某些系統(tǒng)中,只有一種 FAT 分區(qū),這種情況下,可以正常安裝 PostgreSQL,但不要進行數(shù)據(jù)庫的初始化工作。安裝完成后,在 FAT 分區(qū)上手動執(zhí)行 initdb.exe 程序即可,但不能保證其安全性和可靠性,并且建立表空間也會失敗。 3、 選擇數(shù)據(jù)存放目錄: 4、 輸入數(shù)據(jù)庫超級用戶和創(chuàng)建的OS用戶的密碼 注:數(shù)據(jù)庫超級用戶是一個非管理員賬戶,

5、這是為了減少黑客利用在 PostgreSQL 發(fā)現(xiàn)的缺陷對系統(tǒng)造成損害,因此需要對數(shù)據(jù)庫超級用戶設置密碼,如下圖所示,安裝程序自動建立的服務用戶的用戶名默認為 postgres。 5、 設置服務監(jiān)聽端口,默認為5432 6、 選擇運行時語言環(huán)境 注:選擇數(shù)據(jù)庫存儲區(qū)域的運行時語言環(huán)境(字符編碼格式)。在選擇語言環(huán)境時,若選擇"default locale"可能會導致安裝不正確;同時,PostgreSQL 不支持 GBK 和 GB18030 作為字符集,如果選擇其它四個中文字符集:中文繁體 香港(ChineseTraditional, Hong Kong S.A.R.)、中文

6、簡體 新加坡(ChineseSimplified, Singapore)、中文繁體 臺灣(ChineseTraditional, Taiwan)和中文繁體 澳門(ChineseTraditional, Marco S.A.R.),會導致查詢結果和排序效果不正確。建議選擇"C",即不使用區(qū)域。-我選擇了default localt,安裝正確;建議選擇default localt。 7、 安裝過程(2分鐘) 8、 安裝完成注:多選框是安裝額外的驅動和工具,可以不點。在安裝目錄可以看到其中:data存放數(shù)據(jù)文件、日志文件、控制文件、配置文件等。uninstall-postgres

7、ql.exe用于卸載已安裝的數(shù)據(jù)庫管理系統(tǒng)。pg_env.bat里配置了數(shù)據(jù)庫的幾個環(huán)境變量. 3、 圖形化界面pgAdmin(大象) 對于每種數(shù)據(jù)庫管理系統(tǒng),都有相當多的設計與管理工具(可視化界面管理工具),有的是數(shù)據(jù)庫廠商自己提供的(一般都至少有一個),有的是第三方公司開發(fā)的,你甚至可以自己寫一個簡單易用的管理工具。例如Oracle的Oracle SQL Developer(自己開發(fā)的)、PLSQL Developer(第三方公司開發(fā)的)、SQL Server Management Studio(自己開發(fā)的)、PostgreSQL就有好幾款流行的管理工具,例如:pgAdmin、navica

8、t_pgsql、phppgsql等。pgAdmin是一個針對PostgreSQL數(shù)據(jù)庫的設計和管理接口,可以在大多數(shù)操作系統(tǒng)上運行。軟件用C+編寫,具有很優(yōu)秀的性能。pgadmin 是與 Postgres 分開發(fā)布的,可以從下載。目前裝個全功能的PostgreSQL數(shù)據(jù)庫,自帶該管理工具。打開pgAdmin,可以看到在第一部分安裝的本地數(shù)據(jù)庫的屬性,如下圖所示: 成功連接服務器后,如下圖所示:圖中可以看出,新安裝的PostgreSQL數(shù)據(jù)庫管理系統(tǒng)帶有一個數(shù)據(jù)庫postgres;已建好兩個表空間:pg_default、pg_global。initdb.exe初始化

9、的兩個默認表空間pg_global、pg_default。數(shù)據(jù)庫默認的表空間pg_default 是用來存儲系統(tǒng)目錄對象、用戶表、用戶表index、和臨時表、臨時表index、內(nèi)部臨時表的默認空間,他是模板數(shù)據(jù)庫template0和template1的默認表空間。initdb.exe初始化的兩個默認表空間pg_global、pg_default。數(shù)據(jù)庫默認的表空間pg_global是用來存儲共享系統(tǒng)目錄的默認空間。pg_default 為 PostgreSQL也可以理解成系統(tǒng)表空間,它對應的物理位置為 $PGDATA/base目錄。在PostgreSQL(pg_catalog)下可以看到pos

10、tgers數(shù)據(jù)庫的一些數(shù)據(jù)字典和數(shù)據(jù)字典視圖。新建一個服務器連接,連接遠程服務器上的PostgreSQL數(shù)據(jù)庫(假設已有遠程服務器上已安裝好PostgreSQL數(shù)據(jù)庫管理系統(tǒng)): 4、 Pgsql 對于每種數(shù)據(jù)庫管理系統(tǒng),都會提供一個命令行管理接口,例如Oracle的sqlplus,SQL Server的isql和osql等。凡是用圖形管理界面可以實現(xiàn)的功能原則上都可以通過命令行界面命令實現(xiàn)。兩者各有優(yōu)缺點,使用場合不同。在windows下當然常用圖形管理界面,因為在圖像管理界面中往往都嵌有命令行工具,而在unix和linux下,當然就常用命令行工具了,除了我們在類unix下主要使用字符界面的

11、原因外,還因為大部分情況下我們只能通過telnet或ssh工具遠程連接服務器進行操作,此時也只能使用命令行了。從開始目錄打開SQL shell(pgsql)輸入密碼得到如下圖界面: 5、 PostgreSQL常用數(shù)據(jù)類型一、數(shù)值類型1. 整數(shù)類型: 類型smallint、integer和bigint存儲各種范圍的全部是數(shù)字的數(shù),也就是沒有小數(shù)部分的數(shù)字。試圖存儲超出范圍以外的數(shù)值將導致一個錯誤。常用的類型是integer,因為它提供了在范圍、存儲空間和性能之間的最佳平衡。一般只有在磁盤空間緊張的時候才使用smallint。而只有在integer的范圍不夠的時候才使用bigint,因為前者(in

12、teger)絕對快得多。2. 任意精度數(shù)值: 類型numeric可以存儲最多1000位精度的數(shù)字并且準確地進行計算。因此非常適合用于貨幣金額和其它要求計算準確的數(shù)量。不過,numeric類型上的算術運算比整數(shù)類型或者浮點數(shù)類型要慢很多。 numeric字段的最大精度和最大比例都是可以配置的。要聲明一個類型為numeric的字段,你可以用下面的語法: NUMERIC(precision,scale) 比如數(shù)字23.5141的精度為6,而刻度為4。 在目前的PostgreSQL版本中,decimal和numeric是等效的。3. 浮點數(shù)類型: 數(shù)據(jù)類型real和double是不準確的、犧牲精度的數(shù)

13、字類型。不準確意味著一些數(shù)值不能準確地轉換成內(nèi)部格式并且是以近似的形式存儲的,因此存儲后再把數(shù)據(jù)打印出來可能顯示一些缺失。4. Serial(序號)類型: serial和bigserial類型不是真正的類型,只是為在表中設置唯一標識做的概念上的便利。 CREATE TABLE tablename ( colname SERIAL ); 等價于 CREATE SEQUENCE tablename_colname_seq; CREATE TABLE tablename( colname integer DEFAULT nextval('tablename_colname_seq')

14、 NOT NULL ); 這樣,我們就創(chuàng)建了一個整數(shù)字段并且把它的缺省數(shù)值安排為從一個序列發(fā)生器取值。應用了一個NOT NULL約束以確??罩挡粫徊迦?。在大多數(shù)情況下你可能還希望附加一個UNIQUE或者PRIMARY KEY約束避免意外地插入重復的數(shù)值,但這個不是自動發(fā)生的。因此,如果你希望一個序列字段有一個唯一約束或者一個主鍵,那么你現(xiàn)在必須聲明,就像其它數(shù)據(jù)類型一樣。 還需要另外說明的是,一個serial類型創(chuàng)建的序列在其所屬字段被刪除時,該序列也將被自動刪除,但是其它情況下是不會被刪除的。因此,如果你想用同一個序列發(fā)生器同時給幾個字段提供數(shù)據(jù),那么就應該以獨立對象的方式創(chuàng)建該序列發(fā)生器

15、。2、 字符類型SQL 定義了兩種基本的字符類型,varchar(n)和char(n),這里的n是一個正整數(shù)。兩種類型都可以存儲最多n個字符長的字串,試圖存儲更長的字串到這些類型的字段里會產(chǎn)生一個錯誤,除非超出長度的字符都是空白,這種情況下該字串將被截斷為最大長度。如果沒有長度聲明,char等于char(1),而varchar則可以接受任何長度的字串。這里需要注意的是,如果是將數(shù)值轉換成char(n)或者varchar(n),那么超長的數(shù)值將被截斷成n個字符,而不會拋出錯誤。最后需要提示的是,這三種類型之間沒有性能差別,只不過是在使用char類型時增加了存儲尺寸。雖然在某些其它的數(shù)據(jù)庫系統(tǒng)里,

16、char(n)有一定的性能優(yōu)勢,但在PostgreSQL里沒有。在大多數(shù)情況下,應該使用text或者varchar。3、 日期/時間類型1. 日期/時間輸入: 任何日期或者時間的文本輸入均需要由單引號包圍,就象一個文本字符串一樣。日期格式時間格式時間戳類型的有效輸入由一個日期和時間的聯(lián)接組成,后面跟著一個可選的時區(qū)。因此,1999-01-08 04:05:06和1999-01-08 04:05:06 -8:00都是有效的數(shù)值。2,示例在插入數(shù)據(jù)之前先查看datestyle系統(tǒng)變量的值:Sql: 輸出窗口5、 布爾類型:PostgreSQL支持標準的SQL boolean數(shù)據(jù)類型。boolean

17、只能有兩個狀態(tài)之一:真(True)或 假(False)。該類型占用1個字節(jié)。"真"值的有效文本值是:TRUE ,'t' ,'true', 'y' ,'yes' ,'1'而對于"假"而言,你可以使用下面這些:FALSE ,'f' ,'false' ,'n' ,'no' ,'0'6、 位串類型:位串就是一串1和0的字串。它們可以用于存儲和視覺化位掩碼。我們有兩種類型的SQL位類型:bit(n)和bit

18、 varying(n); 這里的n是一個正整數(shù)。bit類型的數(shù)據(jù)必須準確匹配長度n; 試圖存儲短些或者長一些的數(shù)據(jù)都是錯誤的。類型bit varying數(shù)據(jù)是最長n的變長類型;更長的串會被拒絕。寫一個沒有長度的bit等效于bit(1),沒有長度的bit varying相當于沒有長度限制。 針對該類型,最后需要提醒的是,如果我們明確地把一個位串值轉換成bit(n),那么它的右邊將被截斷或者在右邊補齊零,直到剛好n位,而不會拋出任何錯誤。類似地,如果我們明確地把一個位串數(shù)值轉換成bit varying(n),如果它超過n位,那么它的右邊將被截斷。 見如下具體使用方式:這句sql執(zhí)行時就會報錯,因為

19、.a的數(shù)據(jù)的長度是3,如果所插數(shù)據(jù)長度不為三則報錯.注:(:)為轉換符7、 數(shù)組類型:1. 數(shù)組類型聲明: 創(chuàng)建字段含有數(shù)組類型的表。 插入數(shù)組數(shù)據(jù)2查詢數(shù)組數(shù)據(jù)和其他語言一樣,PostgreSQL中數(shù)組也是通過下標數(shù)字(寫在方括弧內(nèi))的方式進行訪問,只是PostgreSQL中數(shù)組元素的下標是從1開始n結束。PostgreSQL中還提供了訪問數(shù)組范圍的功能,即ARRAY腳標下界:腳標上界。3. 修改數(shù)組數(shù)據(jù)代替全部數(shù)組值:更新數(shù)組中某一元素:更新數(shù)組某一范圍的元素:直接賦值擴大數(shù)組:8、 復合類型PostgreSQL中復合類型有些類似于C語言中的結構體,也可以被視為Oracle中的記錄類型,但

20、是還是感覺復合類型這個命名比較貼切。它實際上只是一個字段名和它們的數(shù)據(jù)類型的列表。PostgreSQL允許像簡單數(shù)據(jù)類型那樣使用復合類型。比如,表字段可以聲明為一個復合類型。CREATE TYPE inventory_item AS ( name text, supplier_id integer, price numeric );和聲明一個數(shù)據(jù)表相比,聲明類型時需要加AS關鍵字,同時在聲明TYPE時不能定義任何約束。下面我們看一下如何在表中指定復合類型的字段,如:CREATE TABLE on_hand ( item inventory_item, count integer);最后需要指出

21、的是,在創(chuàng)建表的時候,PostgreSQL也會自動創(chuàng)建一個與該表對應的復合類型,名字與表字相同,即表示該表的復合類型。復合類型值輸入: 我們可以使用文本常量的方式表示復合類型值,即在圓括號里包圍字段值并且用逗號分隔它們。你也可以將任何字段值用雙引號括起,如果值本身包含逗號或者圓括號,那么就用雙引號括起,對于上面的inventory_item復合類型的輸入如下:'("fuzzy dice",42,1.99)'如果希望類型中的某個字段為NULL,只需在其對應的位置不予輸入即可,如下面的輸入中price字段的值為NULL, '("fuzzy di

22、ce",42,)' 如果只是需要一個空字串,而非NULL,寫一對雙引號,如: '("",42,)'在更多的場合中PostgreSQL推薦使用ROW表達式來構建復合類型值,使用該種方式相對簡單,無需考慮更多標識字符問題,如: ROW('fuzzy dice', 42, 1.99) ROW('', 42, NULL) 注:對于ROW表達式,如果里面的字段數(shù)量超過1個,那么關鍵字ROW就可以省略,因此以上形式可以簡化為: ('fuzzy dice', 42, 1.99) ('', 4

23、2, NULL)訪問復合類型: 訪問復合類型中的字段和訪問數(shù)據(jù)表中的字段在形式上極為相似,只是為了對二者加以區(qū)分,PostgreSQL設定在訪問復合類型中的字段時,類型部分需要用圓括號括起,以避免混淆,如: SELECT (item).name FROM on_hand WHERE (item).price > 9.99; 如果在查詢中也需要用到表名,那么表名和類型名都需要被圓括號括起,如: SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;修改復合類型: 見如下幾個示例: -直接插入

24、復合類型的數(shù)據(jù),這里是通過ROW表達式來完成的。 INSERT INTO on_hand(item) VALUES(ROW("fuzzy dice",42,1.99); -在更新操作中,也是可以通過ROW表達式來完成。 UPDATE on_hand SET item = ROW("fuzzy dice",42,1.99) WHERE count = 0; -在更新復合類型中的一個字段時,我們不能在SET后面出現(xiàn)的字段名周圍加圓括號, 但是在等號右邊的表達式里引用同一個字段時卻需要圓括號。 UPDATE on_hand SET item.price = (item).price + 1 WHERE count = 0; -可以在插入中,直接插入復合類型中字段。 INSERT INTO on_hand (item.supplier_id, item.price) VALUES(100, 2.2);九 postgreS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論