postgresql編譯安裝與調試(一)


因為最近組里的項目和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的代碼結構和調試方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM