本系列是之前應 Newzilla 邀稿而發表刊載的文章,現在在本站重新整理後發表。本篇簡單地介紹 PostgreSQL,以及 Windows 和 Linux 作業系統上的安裝步驟。
目錄
PostgreSQL 起源與發展
在大致討論完關聯式資料庫的架構後,我們接著就要來看開放源碼資料庫 PostgreSQL。1977 年加州大學柏克萊分校開始研究於 1970 年 E.F. Codd 所提出的關聯式資料庫模型。它的名字稱之為 Ingres,在 1985 年結束研究並停止發展。
1986 年時,Michael Stonebraker 教授使用 Ingres 做為 RDBMS 更進階的研究,並將其改名為 Postgres。1987 年已發展至有 Demo 版本,並在 1988 年在大會上展示。1989 年 6 月 Postgres 以 BSD 版權發表了第一個版本,許多組織和機構開始使用。1990 年 6 月釋出第二版,1991 年釋出第三版。這些改變使得它慢慢地與學術研究的目標愈來愈遠,維護程式碼的時間遠多於研究發展的時間,於是在 1993 年時,Postgres 項目停止研究,最後一個版本是 4.2 版。
在 1994 年,柏克萊研究生 Andrew Yu 及 Jolly Chen 將 1992 年發佈的國際標準 SQL92 加入了 Postgres 之中,使得原本的 Postquel 查詢語言被 SQL 語言取代,他們並將其改名為 Postgres95,也大幅修改了程式和增進其效能。1996 年在兩人相繼離開後,有一些駭客接手繼續他們的工作,而 Postgres95 改名為 PostgreSQL 並發行 6.0 版。目前的穩定版本為 7.4.5 版,而 8.0.0 已經進入到 beta 2 測試階段了。
PostgreSQL 的功能
PostgreSQL 支援 SQL92(SQL2)以及 SQL99(SQL3),其資料型態除了基本的整數、浮點數、字串和時間日期外,還包括 IP 地址和幾何型態。它同時也支援 Unicode、分散式資料庫管理等功能,擁有 Linux、FreeBSD、Windows、Solaris、HP-UX 和 AIX 等十多種平台的版本,以及 C、C++、perl、tcl 和 python 語言的連接介面及 ODBC 和 JDBC 介面。
底下列出目前最新版 PostgreSQL 所支援的部份:
- 合併查詢及子查詢(subquery)
- 觸發器(trigger)
- 規則(rule)
- 視圖(view)
- 交易處理(transaction)
- 表格繼承(inheritance)
- 多版本並行控制(multi-version concurrency control)
- 可自訂資料型態、函式、運算子、聚集函式、程序語言
- 8.0 起新增 Win32 原生伺服器
- 交易處理的儲存點(Transaction Savepoint)
- 即時回復機制(Point-In-Time Recovery)
- 表格空間(Tablespace)
下載 PostgreSQL 8.0
PostgreSQL 8.0.0 推出後,終於提供了 Windows 上的伺服器版本,這是首次 PostgreSQL Server 有 Win32 平台上的原生程式檔,而無需經由 Unix 模擬器 Cygwin 來在 Win 平台上架設資料庫伺服器。除此之外,當我們執行安裝程式並完成安裝後,也同時就裝好了 pgAdmin 3。它是一個圖形化介面的客戶端管理軟體,你可以輕鬆地使用它來執行資料處理、資料安全、資料備份等工作。為了區別,PostgreSQL 將 Windows 上的安裝程式獨立出來做為一個專案,不過它的功能和特性和其他平台上是一樣的。另外安裝程式只能裝在 Windows NT4, 2000, XP 和 2003 系統上,不能裝在 Windows 95, 98 及 ME。
首先下載安裝程式。Windows 的安裝程式位於 pgFoundry,請下載目前最新的版本 postgresql-8.0-beta1-20040809.msi。(發稿之後 PostgreSQL 又再度更新了,版本為 Beta2,檔名為 postgresql-8.0-beta2-dev3.zip。解壓縮後即可看見安裝程式,檔名為 postgresql-8.0-beta2-dev3.msi)
Linux 平台的檔案位在 PostgreSQL Download Mirrors,你可以點選任何一個接近你所在位置的映射站台,下載 beta 目錄中的 postgresql-8.0.0beta2.tar.bz2 或 postgresql-8.0.0beta2.tar.gz。
安裝 PostgreSQL
Windows 安裝
接下來開始執行 Windows 安裝程式,因為目前還處於測試階段,所以要使用它來做為正式資料庫的人要仔細考慮,如果是用在重要目的或商業目的的話,最好是等到正式版出來後再使用,測試版是正式版的前身,目的是拿來做為測試臭蟲用的。(注意:以下說明和圖片皆是採 PostgreSQL 8.0 beta 1 版本,其步驟與 beta 2 或之後的 8.0 版本之間並無差異。)
點選「Next」後是安裝需知,你可以先看一下有沒有什麼要注意的地方。看完後按「Next」:
接下來你可以選擇要安裝那些部份,包括有資料庫伺服器、使用者介面 (文字介面 psql 和圖形介面 pgAdmin)、資料庫驅動程式 (ODBC、JDBC)、說明文件和發展者工具,通常我們都是全部安裝。另外可以選擇你想安裝的目錄,選好後按「Next」:
然後是安裝為系統服務。此處要注意的是,它會在 Windows 中新增一個名為 postgres 的使用者,並且它並不具有系統管理者權限。為了保護系統,PostgreSQL 不允許擁有系統管理者權限的使用者去啟動並執行資料庫伺服器服務,因此我們依照它的說明來新增使用者,直接將密碼設定上去後按「Next」。如果它詢問是否要新增的話,點選「Ok」。如果出現密碼過於簡單的訊息,問你要不要讓它幫你產生密碼的話,選擇「No」,因為它產生的密碼超級難記。
這一步和上一步都是新增使用者,但是上一步是新增「不具系統管理者權限的一般 Windows 使用者」,而這一步新增的是「PostgreSQL 資料庫中的超級管理者」,兩個不要搞混。直接輸入密碼後點選「Next」:
接下來設定的是資料庫中預設的程序語言,點選「Next」。之後出現的準備安裝畫面,也一樣點「Next」。
經過幾分鐘的安裝後就完成了:
這時點選「控制台」/「系統管理工具」/「服務」,可以看到 PostgreSQL 已經安裝成功並且成為系統服務了,而且也已啟動完成。
Windows 上的安裝程式除了安裝資料庫系統之外,也會安裝圖形介面的管理軟體 pgAdmin3。並在 Windows 系統中新增名為 postgres 的一般權限使用者,和自動初始化資料庫系統目錄。
Linux 安裝
Linux 需使用 tar ball 形式安裝,因此如果你的作業已經已安裝過 PostgreSQL 7.4 以前的版本的話,最好先將資料庫備份並移除資料庫系統之後,再安裝新版本。切換至 root 帳號後,將目錄移到下載目錄中,輸入底下指令(本文使用 Mandrake 10.0 系統為例):
tar jxvf postgresql-8.0.0beta2.tar.bz2
在解壓縮完成後,會出現 postgresql-8.0.0beta2
目錄。進入此目錄後,即可以開始安裝程序。過程中所花的時間依照機器的不同而有所差異,建議你可以泡杯咖啡,吃個零食,避免安裝時間過久會想睡覺 :)。
cd postgresql-8.0.0beta2
./configure
make
make install
由於 Linux 安裝程式並不會如同 Windows 上的一樣會新增使用者和資料庫系統目錄,所以我們必須在安裝完成後以手動的方式來新增,並且初始化資料庫。其中 -D
選項是指定資料庫目錄的位址,-E
選項是設定編碼:
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data -E UNICODE
初始化資料庫完成後,使用下列指令啟動 PostgreSQL:
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data&
每次都要輸入長長一串 /usr/local/pgsql/bin
來下指令很麻煩,所以我們可以將路徑加到 posgres 使用者的 PATH
變數中:
vi .bash_profile
在 vi 鍵入路徑,按一下 Esc 鍵並在輸入 :wq
後按 Enter 存檔離開,並在重新登入後就會套用了。
PostgreSQL 啟動與關閉
Windows
Windows 平台會在「開始」/「所有程式」/「PostgreSQL 8.0-beta1 」中設定好啟動與關閉的項目,分別名為「Start service」和「Stop service」,只要直接執行這兩個選項就可以控制資料庫的執行了。
或者你也可以從「開始」/「控制台」/「系統管理工具」/「服務」中去啟動和關閉。
Linux
Linux 平台上可以使用文字指令 pg_ctl
來控制:
指令敘述如下:
pg_ctl start #啟動伺服器
pg_ctl stop #停止伺服器
pg_ctl restart #重新啟動伺服器
pg_ctl reload #重新載入設定
pg_ctl status #查詢伺服器狀態
pg_ctl kill #中斷伺服器
若要關閉 PostgreSQL,輸入下列指令:
pg_ctl stop -D /usr/local/pgsql/data
值得注意的是,在 Windows 平台下你也可以使用「命令提示字元」在 PostgreSQL 的執行目錄 bin 下輸入上述指令,而無需使用圖形介面去控制。