国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

使用PostgreSQL數據庫做PHP開發

2024-05-04 23:04:35
字體:
來源:轉載
供稿:網友

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 周至县| 宣化县| 屯门区| 青田县| 阿图什市| 德阳市| 赫章县| 安乡县| 南开区| 长岛县| 金堂县| 拉萨市| 黄大仙区| 鹤壁市| 镇宁| 贺兰县| 富平县| 雷山县| 深圳市| 容城县| 长垣县| 武定县| 富源县| 麻阳| 松滋市| 马公市| 丹凤县| 武乡县| 启东市| 龙海市| 苍梧县| 大邑县| 年辖:市辖区| 金昌市| 曲松县| 扶沟县| 红桥区| 太谷县| 怀集县| 富宁县| 漳州市|