說明:下面內容更多是講怎么安裝環境的,實際開發內容幾乎沒有,你可以考慮是否閱讀本文。
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
新聞熱點
疑難解答