使用PostgreSQL資料庫做PHP開發

來源:互聯網
上載者:User

說明:下面內容更多是講怎麼安裝環境的,實際開發內容幾乎沒有,你可以考慮是否閱讀本文。

PostgreSQL資料庫應該算是資料庫界的啟明星,其中一些功能甚至超過了Oracle等商務資料庫,在開源世界來講,可以說是非常不錯的,甚至MySQL都跟它差很遠。它支援包括JDBC、ODBC、DBI等等資料庫連結方式,基本上能夠目前所有流行的程式設計語言進行互動,可以說是適合任何編程開發人員。

官方的介紹內容也許更能說明問題:http://www.pgsqldb.org/pgsqldoc-8.0c/preface.html
----------------------------------
何為 PostgreSQL?
PostgreSQL是以加州大學伯克利分校電腦系開發的 POSTGRES,版本 4.2為基礎的對象關係型資料庫管理系統(ORDBMS)。 POSTGRES 領先的許多概念只是在非常遲的時候才出現在商務資料庫中。

PostgreSQL 是最初的伯克利的代碼的一個開放源碼的繼承人。 它支援大部分 SQL:2003 標準並且提供了許多其他現代特性:

複雜查詢
外鍵
觸發器
視圖
事務完整性
多版本並發控制
同樣,PostgreSQL 可以用許多方法擴充,比如, 通過增加新的:

資料類型
函數
操作符
聚集合函式
索引方法
過程語言

並且,因為許可證的靈活,任何人都可以以任何目的免費使用,修改,和分發 PostgreSQL, 不管是私用,商用,還是學術研究使用。
-------------------------------------

今天想嘗試一下PHP使用PostgreSQL做開發的感覺,於是就趕緊裝一個吧。

一開始考慮是在Windows安裝最新的8.0.3版本,但是想想,可能實際開發平台更多的是在Unix/Linux下,於是就準備在FreeBSD下做開發,剛好昨天把FreeBSD5.4升級了,趕緊ports一個回來。

cd /usr/ports/database/postgresql80-server
cat Makefile
一看,原來最新版是8.0.3,呵呵,正好呀,趕緊裝。
make install
漫長等待的過程,它要去下載什麼gmake,還要下載postgresql-8.0.3.tar.bz2等檔案,老半天才裝完。呵呵,很興奮,啟動一下看看:
/usr/local/etc/rc.d/postgresql.sh start    (這個檔案也許你的檔案名稱不是這樣)
暈,怎麼出錯了?反正死活就是啟動不了,看來還得手工安裝一下,先卸載掉吧:
cd /usr/ports/database/postgresql80-server
make deinstall
唉,把檔案拷走吧:
cd /usr/ports/distfiles
mv ./postgresql-8.0.3.tar.bz2 /usr/local/src
解壓縮:
cd /usr/local/src
bunzip2 -d ./postgresql-8.0.3.tar.gz2
tar xvf ./postgresql-8.0.3.tar
解壓縮成功:
cd ./postgresql-8.0.3
設定檔,安裝到我們的老目錄裡:
./configure --prefix=/usr/local/pgsql
gmake
等待的過程,到後來,暈,怎麼又出錯?
提示檔案系統已經滿了。。。-_-#
我的是虛擬機器,空間分配不合理,看看能不能給 /usr 加點空間。
去google狂搜資料,只找到個 tunefs 的命令能解決這個問題,看了半天也沒明白,連結:
http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/configtuning-disk.html
想想還是算了,裝到其他分區不就完了,看看空間情況:
%df
Filesystem  1K-blocks    Used  Avail Capacity  Mounted on
/dev/ad0s1a    507630   55060 411960    12%    /
devfs               1       1      0   100%    /dev
/dev/ad0s1e    507630   70072 396948    15%    /tmp
/dev/ad0s1f   2025982 1960440 -96536   105%    /usr
/dev/ad0s1d    507630   76340 390680    16%    /var
那就裝到 /var 下吧,呵呵:
./configure --prefix=/var/pgsql
gmake
gmake install
過程順利,好,添加個運行pg的使用者:

adduser
Username: postgres
Full name: PostgreSQL Server User
Uid (Leave empty for default):
Login group [postgres]:
Login group is postgres. Invite postgres into other groups? []:
Login class [default]:
Shell (sh csh tcsh bash nologin) [sh]: /bin/csh
Home directory [/home/postgres]:
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]: yes
Lock out the account after creation? [no]:
Username   : postgres
Password   : <blank>
Full Name  : PostgreSQL Server User
Uid        : 1004
Class      :
Groups     : postgres
Home       : /home/postgres
Shell      : /bin/csh
Locked     : no

建立存放資料庫的目錄:
mkdir /var/pgsql/data
把所有權給postgres使用者:
chown postgres /var/pgsql/data
切換到使用者postgres:
su - postgres
初始化資料庫:
/var/pgsql/bin/initdb -D /var/pgsql/data
開始運行:
/var/pgsql/bin/postmaster -D /var/pgsql/data >logfile 2>&1 &
暈,怎麼一堆錯誤!!!
postmaster does not know where to find the server configuration file.
You must specify the --config-file or -D invocation option or set the PGDATA environment variable.
沒有指定設定檔,趕緊看看設定檔再哪裡?
find / -name "postgresql.conf"
/var/pgsql/data/postgresql.conf
哦,原來初始化資料庫的時候就建立了設定檔,趕緊寫上:
./postmaster --config-file=/var/pgsql/data/postgresql.conf
暈,怎麼又出現新的錯誤?
哦,原來沒有配置postgresql.conf的內容,趕緊把重要的配置一下,配置過的內容如下:

#---------------------------------
# FILE LOCATIONS
#---------------------------------
 
# The default values of these variables are driven from the -D command line
# switch or PGDATA environment variable, represented here as ConfigDir.
# data_directory = 'ConfigDir'          # use data in another directory
data_directory = '/var/pgsql/data'
# hba_file = 'ConfigDir/pg_hba.conf'    # the host-based authentication file
hba_file = '/var/pgsql/data/pg_hba.conf'
# ident_file = 'ConfigDir/pg_ident.conf'  # the IDENT configuration file
ident_file = '/var/pgsql/data/pg_ident.conf'

看出來了吧,就是指定了一個資料庫檔案目錄,兩個設定檔的路徑。
再啟動:
./postmaster --config-file=/var/pgsql/data/postgresql.conf
LOG:  database system was shut down at 2005-07-15 01:20:24 CST
LOG:  checkpoint record is at 0/A38D20
LOG:  redo record is at 0/A38D20; undo record is at 0/0; shutdown TRUE
LOG:  next transaction ID: 678; next OID: 17231
LOG:  database system is ready

OK,成功。好,看看能不能從我哪兒訪問,先訪問下預設的5432連接埠:
telnet 192.168.0.215 5432
怎麼回事,無法串連?趕緊Google一下,哦,原來是預設只是允許本地連結,要修改設定檔:
vi /var/pgsql/data/postgresql.conf

修改以下內容:
#-----------------------------------
# CONNECTIONS AND AUTHENTICATION
#-----------------------------------
 
# - Connection Settings -
 
#listen_addresses = 'localhost' # what IP interface(s) to listen on;
                                # defaults to localhost, '*' = any
listen_addresses = '*'
#port = 5432
看到沒有,就是把監聽地址預設的localhost改為*,就是允許所有。再啟動後telnet,呵呵,黑乎乎螢幕出現,沒有問題。
哈哈,現在終於能用PHP來串連了吧。

開啟php裡的pgsql擴充,輸出phpinfo()看看能不能支援pgsql,一看,能了,趕緊寫代碼看看:

<?php
$link_str = "host=192.168.0.215 port=5432 dbname=test user=postgres password=postgres";
$link_id = pg_connect($link_str);
print_r($link_id);
?>

儲存為pgsql.php,開啟瀏覽器:http://localhost/pgsq.php,哈哈,等著出連結ID吧!
哦,怎麼回事?出現錯誤:

Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: FATAL: no pg_hba.conf entry for host "192.168.0.216", user "postgres", database "test" in E:\Web\www\Temp\pgsql\pg.php on line 3

仔細看,pg_hba.conf entry for host "192.168.0.216" ,哦,原來是這個設定檔裡沒有允許我這個IP地址的訪問,真是安全哪!
看來這個pg_hba.conf裡面也必須設定才行,趕緊開啟:
vi /var/pgsql/data/pg_hba.conf
添加了一段IP地址,如下內容:
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
 
# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
host    all         all         192.168.0.216        trust
# IPv6 local connections:
host    all         all         ::1/128               trust
看見沒有,我添加了:
host    all         all         192.168.0.216       trust
如果你要允許一個段的IP,就可以添加成 192.168.0.1/24 什麼的。

再啟動postgresql,我瀏覽器再次串連,瀏覽器輸出:
Resource id #1
^_^,成功了吧!

趕緊下個windows下的管理工具來,去:http://www.pgadmin.org/ 下載了一個 pgAdmin III回來,安裝完後,啟動,添加伺服器,成功。用起來不錯,跟MysqlCC有一拼,還支援中文。

基本到這裡就沒有什麼了,呵呵,另外,說一個pgsql的特徵,就是如果同一個使用者在多個IP上登陸到伺服器上,那麼就只允許一個使用者執行,操作,其他使用者無法執行,否則出現錯誤,比如我在我的XP上使用pgAdmin登陸後,我又到伺服器端去執行操作:
/var/pgsql/bin/createdb db1
createdb: database creation failed: ERROR:  source database "template1" is being accessed by other users
看見沒有,出錯了吧。

從上面種種來看,pgsql真是安全哪,把很多安全問題都扼殺在搖籃,而且配置也很豐富,雖然我安裝過程複雜了一點。其實多看看手冊就明白的很了,只怪我不看手冊。

暈,說了半天,沒怎麼說PHP怎麼做開發,呵呵,搭環境比較重要吧,至於開發和pgsql本身的特性,慢慢去研究。


附加點好東西:

官方推薦的安裝過程,但是實際中不好使:
---------------------------------------------
./configure
gmake
su
gmake install
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
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
---------------------------------------------

PostgreSQL中文手冊:http://www.pgsqldb.org/twiki/bin/view/PgSQL/PgDocList
PostgreSQL中文論壇:http://bbs.pgsqldb.com
PostgreSQL官方網站:http://www.postgresql.org

Author: heiyeluren
WriteTime: 2005-7-15 下午16:30



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.