因為最近組里的項目和postgresql有關,並且需要查看和調試源碼,所以專門學習了一下如何安裝和調試postgresql,此博文用來記錄自己的安裝和調試過程。安裝環境是CentOS6(CentOS7可能稍微有點不一樣,不過大體上是一樣的),調試工具是gdb。
既然是希望后期能夠調試和跟蹤源碼,我們選擇從源碼編譯安裝。我們首先從官網取Source,官網在這里:
https://www.postgresql.org/ftp/source/
在這里你可以看到發布的所有postgresql版本,我取的是postgresql9.5.4這個版本,其他版本的編譯流程也是類似的,大家隨意,這里不贅述了。
取到source后,准備開始編譯安裝。
這里需要注意的postgresql編譯需要預裝一些工具。除了make、gcc(GNU編譯器套件)這些基本必備的工具,還要有zlib、bison(一個YACC語法分析生成器的GNU實現)、readline等等。。。。太多記不住?
沒關系,我們先進去編譯,遇到缺少的包,會提示你缺少相應的包,再安裝上即可。
取到源碼 我們先解壓:tar -zxvf postgresql-9.5.4.tar.gz
cd postgresql-9.5.4 進去
這里要注意的是,由於我希望后面能跟蹤代碼的運行路徑,所以我要在編譯configure的時候加上--enable-debug的選項,並且修改src/Makefile.global文件:
CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith \ -Wdeclaration-after-statement -Wendif-labels -Wformat-security \ -fno-strict-aliasing -fwrapv
把上面的"-O2"選項刪除,然后加上"-g" 如下所示:
CFLAGS = -g -Wall -Wmissing-prototypes -Wpointer-arith \ -Wdeclaration-after-statement -Wendif-labels -Wformat-security \ -fno-strict-aliasing -fwrapv
為什么要這么做呢?因為"-O2"是編譯器的優化選項,如果打開了,代碼的執行順序會改變,使得追蹤起代碼來比較困難。當然去除了優化選項,編譯后的可執行文件會比較大,而且會比較慢,所以不太適合生產環境。所以切記這個操作僅僅是在學習的時候而設置的。
不想修改文件的話,也可以先這樣做:
export CFLAGS = "-g -Wall -Wmissing-prototypes -Wpointer-arith \ -Wdeclaration-after-statement -Wendif-labels -Wformat-security \ -fno-strict-aliasing -fwrapv"
然后輸入如下命令:
./configure --prefix=/opt/psql --with-perl --with-tcl --with-python --with-openssl
--with-pam --without-ldap --with-libxml --with-libxslt --enable-thread-safety
--with-wal-blocksize=16 --with-blocksize=16 --enable-dtrace --enable-debug
其中--prefix是指定軟件的安裝路徑,--with選項是指安裝本文件依賴的庫文件。如有不清楚可以自己學習下configure命令的相關參數。
運行之后,顯示如下錯誤:
果然 缺少了dtrace,沒關系,我們使用yum命令:
找到了,我的機器是64位的,所以果斷選擇第二個:
使用yum命令(當然其實也可以用rpm命令,但是yum命令自己就可以解決各種包之間的依賴問題,所以推薦yum命令)安裝:
yum install -y systemtap-sdt-devel.x86_64
安裝成功!
然后繼續運行configure命令,遇到其他包的問題類似上面的處理,這里就不贅述了。
當然,對於伸手黨們,下面的這個鏈接可供參考:
http://blog.csdn.net/luojinbai/article/details/44217551
運行上面的configure命令后,如果顯示如下的畫面那就是成功了。
然后再運行make命令,耐心等待一會,make會需要幾分鍾時間。
這樣之后就可以make install命令了
make install也OK了!
然后你就會發現在/opt/目錄下找到你安裝的psql了
其中:
/opt/psql/bin里面放的是可執行命令,比如createdb之類的;
/opt/psql/lib里面放的是庫文件;
/opt/psql/include里面放的是頭文件;
/opt/psql/share是相關的資源文件。
這些文件如果在configure命令中沒有指定--prefix的話,會安裝到/usr/local/目錄下,以后要刪除的時候就要一個個找了,比較麻煩。
好的 我們安裝好了postgresql程序,接下來進行配置。
為了安全考慮,postgresql不允許使用root用戶操作數據庫,我們在系統中為使用postgresql添加一個用戶postgres:
並創建密碼:
然后我們切換到postgres用戶下(切記是 su - ,“-”不可少):
編輯/home/postgres下的.bash_profile
設置以下的環境變量
export PGHOME=/opt/psql (這個就是我們的安裝目錄)
export PGDATA=~/data (數據存放的目錄,這個看你高興了,不要求一定放在這里)
export PATH=$PATH:$HOME/bin:$PGHOME/bin
然后source一下
source ~/.bash_profile
使環境變量生效。
接下來初始化數據庫,使用initdb命令(如果提示command not found,那么很有可能是你上面的PGHOME設置錯誤或者沒有source一下)
然后會有以下顯示:
數據庫的初始化完成!
然后運行
pg_ctl start
啟動postgres數據庫實例。此時你就可以使用
ps -ef | grep postgres
看到postgresql進程了。
現在我們可以進入數據庫,使用如下命令:
psql -h 127.0.0.1 -d postgres -U postgres
當然,如果是進入本機的和用戶名同名的數據庫,直接psql即可,具體解釋可查看postgresql官方手冊。
如果我們比較懶,不想每次登錄手動啟動psql,那么設置下psql開機啟動。
PostgreSQL的開機自啟動腳本位於PostgreSQL源碼目錄的contrib/start-scripts路徑下:
linux文件即為自啟動腳本。
1)修改linux文件屬性,添加X屬性(這里如果提示無權限的話,切換到root用戶進行操作)
[root@localhost start-scripts]# chmod a+x linux
2) 復制linux文件到/etc/init.d目錄下,更名為postgresql
[root@localhost start-scripts]# cp linux /etc/init.d/postgresql
3)修改/etc/init.d/postgresql文件的兩個變量
prefix設置為postgresql的安裝路徑:/opt/psql
PGDATA設置為postgresql的數據目錄路徑:/home/postgres/data
執行service postgresql start,就可以啟動PostgreSQL服務
4) 執行service postgresql start,就可以啟動PostgreSQL服務
[root@localhost start-scripts]# service postgresql start
5)設置postgresql服務開機自啟動
[root@localhost start-scripts]# chkconfig --add postgresql
執行上面的命令,就可以實現postgresql服務的開機自啟動。
這次就先寫這么多,第二部分再介紹下postgresql的代碼結構和調試方法。