歡迎您光臨本站 註冊首頁

在Linux上應用PostgreSQL

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  PostgreSQL是一個在Unix世界被廣泛應用的免費資料庫管理系統(DBMS),無論是它支持的特性,還是它的性能都可以和其它的商業資料庫一比高低。由於它採用C語言編寫,在不同的Unix之間互相移植非常方便,於是PostgreSQL能夠在眾多的平台上運行,包括:Solaris、AIX、SCO Unix、HP Unix、Linux、FreeBSD等。

  PostgreSQL起源於美國加州大學伯克萊分校計算機科學系的一個資料庫研究項目——Postgres。從最初的雛形到現在,PostgreSQL已經發展15年了,新的特性、新的組織方法不斷被加進來,其中最重要的要算它對SQL-92標準的完全支持及擴展。目前,PostgreSQL已離開校園,由一個全球性的核心開發隊伍維護,並走上了開放源代碼的道路。

  我現在就介紹一下在RedHat Linux6.1上如何應用 PostgreSQL。

  Linux上的安裝

  在RedHat Linux6.1的光碟上已經帶有PostgreSQL的RPM包,安裝很方便。這些RPM包有:

  postgresql-6.5.2-1.i386.rpm ①

  postgresql-server-6.5.2-1.i386.rpm ②

  這兩個是最基本的,一定要安裝。

  postgresql-devel-6.5.2-1.i386.rpm ③

  postgresql-jdbc-6.5.2-1.i386.rpm ④

  postgresql-odbc-6.5.2-1.i386.rpm ⑤

  postgresql-perl-6.5.2-1.i386.rpm ⑥

  postgresql-python-6.5.2-1.i386.rpm ⑦

  postgresql-tcl-6.5.2-1.i386.rpm ⑧

  如果你要在Linux上開發基於PostgreSQL的應用,那麼你就還得安裝以上6項。④和⑤顧名思義是(Linux平台的)JDBC和ODBC驅動;⑥是PERL的介面;⑦和⑧是用python和tcl寫的GUI資料庫前端訪問工具,工作在X Window下,初學者肯定會喜歡用。

  postgresql-test-6.5.2-1.i386.rpm ⑨

  這是提供給用戶測試PostgreSQL運行是否正常的樣例,一般可以不安裝。

  如果沒有RPM包,我們就要先進行編譯才能繼續安裝,具體步驟請參閱有關的文檔,這裡限於篇幅不再詳細介紹。

  準備創建資料庫

  用rpm -i postgresql-xxxx-xxxx-x.i386.rpm命令安裝所有需要的文件后,我們便要為創建資料庫作準備了。檢查一下目錄:

  /usr/lib/pgsql/目錄裡面有資料庫的模板、樣例文件;

  /var/lib/pgsql/這是PostgreSQL默認存放資料庫的目錄,由於我們不用它存放數據,所以不用理會。

  接下來的這一步很重要——創建資料庫擁有者。由於資料庫監聽進程postmaster(後面將會詳細說明)不能由root用戶啟動,否則會存在安全漏洞,所以我們必須創建一個用戶(暫且稱為資料庫擁有者,以dbms表示),由它來啟動postmaster:

  #useradd dbms

  #passwd dbms

  一般我們會把同一個資料庫的文件放在一個統一的目錄下,例如/database:

  #mkdir /database

  別忘了賦予dbms對/database的全部許可權:

  #chown dbms.dbms /database

  為了更好地進行維護、備份,建議在硬碟單獨劃分一個區用來專門存放/database目錄的內容(也就是整個資料庫的數據及配置文件),我也是這樣做的。在我的硬碟里,劃分了一個500MB的分區(/dev/hda10),在賦予許可權之前修改/etc/fstab文件。仿照其它硬碟分區加入類似下面的一項:

  /dev/hda10   /database       ext2  defaults  1 2

  當然,別忘了要用mkfs命令把/dev/hda10格式化為ext2類型的分區。

  好,重啟機器,在新配置生效后(可用mount查看)再賦予dbms對/database的許可權。然後用dbms登錄。

  運行資料庫初始化程序,我們需要告訴它至少兩樣東西:一樣是原始模板的目錄(用「-l」指出,在這裡是/usr/lib/pgsql/);另一樣是存放初始化后的資料庫文件的目錄(用「-r」指出,在這裡是/database/):

  $initdb -r /database/ -l /usr/lib/pgsql/

  應用PostgreSQL





  如無意外,初始化成功后我們就可以建立自己的資料庫了。首先要知道,資料庫用戶是這樣訪問數據的:


  所以先要啟動postmaster:

  $postmaster -i -D/database&

  「-i」選項允許從網路上訪問資料庫,如果要開發和使用Client/Server模式的應用程序,一定要加這個參數。「-D」指出資料庫目錄。「&"是以後台方式運行監聽進程。

  現在,我們創建一個資料庫,假定叫「mydb」:

  $createdb mydb

  然後啟動前端訪問工具:

  $psql mydb

  這時會出現提示符:

  mydb=>

  我們便可以鍵入SQL語句構造資料庫了。例如以下命令建立一張名叫「test」的表,它由三個欄位(id、name、income)組成:

  mydb=>create table test (id int2, name varchar(10), income int4);

  以上操作如果沒問題就表明PostgreSQL資料庫已經創建成功。但還有一些問題需要解決,例如我們並不想讓任何人在任何地方都能訪問任何資料庫文件,這就需要建立授權/鑒別機制來分辨哪些是合法用戶的合法請求、哪些不是。

  剛完成安裝的PostgreSQL默認只有一個合法超級用戶——dbms,只有它才能寫伺服器上的/database目錄,但是也由於dbms一開始就存在,所以鑒別機制對它不起作用。只要它喜歡,可以訪問任何資料庫(因為dbms可以修改鑒別機制的配置文件,下面會提到)。正如Unix系統的root用戶,它可以修改任何文件的許可權、可以修改存放用戶口令的shadow文件。所以當完成安裝后,我們就要創建新的管理者,暫且稱它為dba。

  由於用字元界面的psql創建dba比較煩瑣,所以最好用GUI的pgaccess,這需要我們成功安裝RPM包⑧。完成後進入系統目錄:

  #cd /usr/lib/pgsql/pgaccess

  把可執行屬性賦予main.tcl:

  #chmod +x main.tcl

  然後便可以啟動X Window,打開一個xterm窗口,運行pgaccess:

  $./main.tcl

  我們只須鍵入資料庫名字(mydb)即可進入維護界面。我們必須創建一個新用戶dba(記得為它指定password),並賦予它創建其它用戶和資料庫的許可權,即選擇以下兩項:

  Allow user to create databases

  Allow user to create other users

  保存並退出pgaccess。

  最後要做的就是修改控制機器和用戶訪問資料庫的配置文件:

  $chmod u+w /database/pg_hba.conf

  $emacs /database/ pg_hba.conf

  裡面有詳細的說明,這裡只是簡單的介紹。文件除了註釋以外,全部由統一格式的項組成:

  entry_type DBNAME IP_ADDRESS ADDRESS_MASK USERAUTH [AUTH_ARG]

  entry_type:項的類型,分兩種,一種是「host」,另一種是「local」。host類型的項負責網路訪問(帶有IP地址的訪問)的鑒別機制,local負責本地(即伺服器自身)Unix Socket介面訪問的鑒別;

  DBNAME:資料庫名字;

  IP_ADDRESS:允許訪問的IP地址範圍(與IP_MASK一起決定);

  ADDRESS_MASK:同上;

  USERAUTH:鑒別方式;

  [AUTH_ARG]:某些鑒別方式需要的參數。

  如下例子:

  host mydb 192.168.0.0

  55.255.255.0 crypt

  這條記錄允許IP地址為192.168.0.x的機器通過加密的用戶口令文件驗證口令后訪問mydb資料庫。加密的用戶口令文件是/database/pg_shadow。這是最常用的鑒別方式。

  又如:

  local all   trust

  這條記錄允許所有用戶本地訪問(例如用遠程登錄方式訪問)任何資料庫(最好不要這樣做,雖說SQL語句本身帶有授權/鑒別機制,但小心一點還是沒有壞處的)。

  假定我們採用crypt鑒別方式控制對mydb的訪問,並且通過網路連接到IP為192.168.0.3的Linux資料庫伺服器上的mydb資料庫,這時就要提供用戶名和口令:

  $psql -d mydb -u -h 192.168.0.3

  「-d」指出資料庫名字,「-u」指出需要提供用戶名和口令,「-h」指出伺服器IP。一旦pg_hba.conf指定使用crypt機制則必須加「-u」參數,否則無法連接資料庫,即使你是dbms。所以從今以後我們便要以dba的身份來維護資料庫(dbms由於沒有加密的口令存放在pg_shadow,所以無法通過crypt驗證登錄資料庫,不過,必要時dbms還是可以修改pg_hba.conf來強行登錄)。

  心急的朋友已經忍不住了——怎樣開發PostgreSQL的客戶端應用呢?

  放心,PostgreSQL提供了基於Windows95的ODBC驅動,只要安裝了ODBC驅動,便可以用VC、Delphi等開發應用。另外,通過JDBC驅動訪問PostgreSQL也可以(例如Jbuilder里有關的資料庫訪問API或JavaBean等)。

更詳細的信息請參閱有關文檔或訪問http://www.postgresql.org。


[火星人 ] 在Linux上應用PostgreSQL已經有513次圍觀

http://coctec.com/docs/linux/show-post-74253.html