用Eclipse追PostgreSQL源碼

1、安裝編譯好的PostgreSQL(見Eclipse編譯PostgreSQL 9.2.2)。

2、在Eclipse上打開Make Target 視圖(Window->Show View->Other->Make->Make Target)。右鍵本工程,選擇New,創建一個名字install。
這裏寫圖片描述

3、安裝:
1)雙擊install。
這裏寫圖片描述
2)等待一小會兒,在控制檯窗口顯示PostgreSQL installation complete就安裝成功了。顯示如下:
這裏寫圖片描述
3)安裝的默認路徑是在Eclipse編譯PostgreSQL 9.5.2中配置的HOME路徑,這時會發現在該目錄下出現了一個project的文件夾(包含bin、include、lib、share四個文件夾),裏面就是安裝好的PG數據庫。

4、對數據庫進行初始化。
1)首先設置一下數據庫將要存放的文件夾目錄。
vim /etc/profile
添加如下幾行:
export PATH=$HOME/project/bin:$PATH
export PGDATA=$HOME/postgresql-9.5.2/DemoDir
注意:此處的$HOME等價於/home/scidb,如果你輸入“echo $HOME”出現的與你源碼包存放的位置不一樣的話,那麻煩你寫成絕對路徑,否則你會被路徑搞死在這裏···/(ㄒoㄒ)/~~
2)執行 source /etc/profile,然後輸出 echo $PGDATA看剛纔的配置是否生效,即是否能輸出/home/scidb/postgresql-9.5.2/DemoDir
3)進入/home/scidb/project/bin執行initdb
這裏寫圖片描述

5、調試PG。
1)回到Eclipse中,右鍵自己的pg工程,選擇Run as->Run Configurations->C/C++ Application->pgsql Default,並進行如下配置:
這裏寫圖片描述
這裏寫圖片描述
Main-C/C++ Application:/home/scidb/postgresql-9.5.2/src/backend/postgres
Main-Project:pgsql
Arguments-Program Arguments:-D /home/scidb/postgresql-9.5.2/DemoDir
2)配置完成後點擊run,在控制檯中會顯示如下所示:
這裏寫圖片描述
這表明你的pg數據庫已經在運行了(啓動了6個postgres的進程),在監控是否有命令的輸入,這是你可以從終端起pg客戶端進行操作。

6、Debug PostgreSQL。
1)在Debug之前先對Debug進行配置,右鍵自己的pg工程,選擇Debug As->C/DebugConfigurations->進行配置,配置的參數參照步驟5。
這裏寫圖片描述
2)右鍵自己的pg工程,選擇Debug As->C/C++ Application,選擇postgres,如下圖所示:
這裏寫圖片描述
3)點擊OK後工程會自動運行並跳轉到main函數的入口,如下圖所示,這是就可以一步一步的運行了。
這裏寫圖片描述

7、監聽客戶端的進程(子進程),看其執行步驟。
1)首先打開終端,啓動數據庫的服務器端進程。進入安裝數據庫目錄的bin目錄下,並執行下面的代碼:
./postgres -D /home/scidb/postgresql-9.5.2/DemoDir/
需要注意的是,在linux下的環境變量中不會默認有當前目錄的,如果需要的話可以自行配置一下,也可利用./尋找當前目錄下的可執行文件。執行完後即可啓動數據庫的服務器端。
這是最好記錄一下啓動的6個postgres的進程pid,方便後面對客戶端進行監聽時進程的選擇。
2)另起一個終端,還是進入到安裝數據庫目錄的bin目錄下,第一次運行時默認之後系統自帶的三個數據庫,所以先要創建一個自己的數據庫,例如我創建一個pgtest的數據庫,執行命令如下所示:
./createdb DemoDB
創建好後進入到這個數據庫中,執行命令:
./psql DemoDB
得到的結果如下圖所示:
這裏寫圖片描述
3)接下來回到Eclipse中,右鍵自己的pg工程,選擇Debug As->C/DebugConfigurations->C++ Attach to Application->pgsql Default(Attach)(這個名稱可以自行命名)。對其的配置同上。
點擊Debug會彈出一個選擇進程的窗口,查找和postgre相關的進程( ps axf | grep postgres),找到剛剛啓動的客戶端的那個postgres的進程,即帶“ _ postgres: scidb pgtest [local] idle”字樣的進程,追蹤即可。

PS:
1、postgres工程中的postgres.c文件是psql命令的入口地方。
2、在客戶端中執行命令:\dt,就會跳轉到斷點的位置,接下來就可以自行的追源碼了。
3、報錯:
1)FATAL: lock file “postmaster.pid” already exists
解決:千萬不能刪!千萬不能刪!!千萬不能刪!!!cat這個文件,第一行是一個pid號,執行”kill -9 pid號“ 就可以了
2)log: could not bind ipv4 socket:address already in use···
解決:listen_addresses 全部統一;修改一些雜七雜八的東西,比如說防火牆配置文件、selinux、pg_conf之類的,全部統一成一樣的
3)unix 2 [ ACC ] STREAM LISTENING 82011 /tmp/.s.PGSQL.5432.lock
按照這個路徑找到文件然後刪掉···完成!

參考文獻
1:http://wiki.postgresql.org/wiki/Working_with_Eclipse
2:http://blog.csdn.net/mgx289106164/article/details/51173302

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章