一.PostgreSQL簡介
PostgrepSQL是一種對象關系型數據庫管理系統。
二.PostgreSQL環境的安裝和配置
2.1源碼的下載
PostgreSQL 14.0源碼可以從PostgreSQL官網:https://www.postgresql.org/download/ 的下載區獲取。獲取之后將其解壓。
源碼目錄內容,如下圖所示:
2.2 環境配置
安裝之前首先為系統配置環境,這個過程通過運行上圖中的configure腳本文件即可,命令如下:
./configure
注意:安裝的時候,遇到兩個問題,新環境高頻出現,可以通過最后一章中的方法進行解決。
2.3 編譯
配置好環境變量之后,對源碼進行編譯。2.1圖中,可以看到已經有完整的makefile文件,在目錄下執行下面的命令,進行編譯:
make clean all
編譯過程大約持續5~30min。
2.4 回歸測試
如果想在安裝文件前測試新編譯的服務器,那么可以在這個時候運行回歸測試。回歸測試是一個用於驗證PostgreSQL在你的系統上是否按照開發人員設想的那樣運行的測試套件。通過下面命令執行:
make check
如果執行結果如下,代表檢查通過:
注意:這個命令只能在非特權用戶下運行,不能在root權限下運行
2.5 安裝、卸載、清理文件
(1)安裝
安裝PostgreSQL,需要輸入下面的命令:
sudo make install
由於install命令需要在root權限下執行,所以需要按上面的命令執行。
(2)卸載
如果想要卸載安裝,則執行下面的命令即可,需要注意此命令不會刪除任何創建出來的目錄:
sudo make uninstall
(3)清理
編譯之前可以通過make clean命令,將之前的編譯文件進行刪除,避免對后續的編譯產生影響。
2.6 安裝后進行設置
2.6.1 創建用戶
root用戶不能啟動postgresql,所以需要創建一個普通用戶來啟動數據庫,如下圖所以,創建用戶並設置登錄口令。注意:下面兩條命令均需在root權限下執行。
命令1:$sudo useradd postgres
沒有其他輸出,代表成功。
命令2:$sudo passwd postgres
輸入類似於這樣的密碼,可以成功ht3pki2008!!
如下圖所示:
2.6.2 設定權限
在postgresql目錄下創建目錄data(數據庫存儲)和log(日志存儲),然后將postgresql的目錄權限全部賦予給postgres用戶。
命令1:$sudo mkdir /usr/local/pgsql/data
命令2:$sudo mkdir /usr/local/pgsql/log
命令3:$sudo chown -R postgres:postgres /usr/local/pgsql
2.6.3 共享庫
在一些有共享庫的系統里,需要告知本地系統如何找到新安裝的共享庫。設置共享庫的搜索路徑的方法因平台而異,本機是Linux系統,因設置命令需要root權限,故在安裝之后運行下面命令進行設置:
sudo /sbin/ldconfig /usr/local/pgsql/lib
設置后,可以在運行時,讓鏈接器更快地找到共享庫。
2.6.4 環境變量
1. 將PG添加到環境變量
本機PG安裝路徑為/usr/local/pgsql,安裝到此目錄或者其他默認不在搜索路徑中的地方,應該在本地的PATH環境變量里面增加一個/usr/local/pgsql/bin。
上面的操作非必須,但可以在使用PG更方便。
將下面的幾行加到shell啟動文件即可,如:~./bash_profile()如果想影響所有用戶就放在/etc/profile):
export PGDATA=/usr/local/pgsql/data
export PGHOME=/usr/local/pgsql
export PATH=$PGHOME/bin:$PATH
注意:/etc/profile文件需要root權限操作,所以在修改的時候可以使用sudo vim /etc/profile,打開文件修改。
2. man文檔添加到環境變量
為了讓系統找到man文檔,將下面的內容添加到shell啟動文件里:
MANPATH=/usr/local/pgsql/share/man:$MANPATH
export MANPATH
修改完成后,使用下面的命令使其生效:
命令1:sudo -s(切換到root權限)
命令2:source /etc/profile
2.6.5 初始化數據庫
切換為postgres用戶,使用initdb --help可以看到初始化數據庫的幫助信息,如下圖所示:
命令1:$initdb --help
圖中紅框中文字所示,由於之前在配置文件中已經設定了環境變量PGDATA,因此可以直接使用命令initdb來完成數據庫初始化操作。
首先,切換到postgres用戶,命令:#su - postgres
然后,初始化數據庫,命令:$initdb
如果出現下面的結果,代表初始化成功:
此時,可以發現/usr/local/pgsql/data中已經有文件了,代表已經初始化成功。
2.6.6 配置數據庫
首先,進入/usr/local/pgsql/data目錄,使用命令vim pg_hba.conf,配置對數據庫的訪問控制(設置為可以通過密碼訪問)。如下圖所示:
然后,使用命令vim postgresql.conf,配置數據庫參數(設置服務器監聽整個網絡,設置端口號為5432)。如下圖所示:
2.6.7 關閉防火牆(root用戶)
使用命令systemctl status firewalld.service查看防火牆狀態,如圖13所示:
通過上圖可知,防火牆屬於關閉狀態。
如果查看到防火牆處於開啟狀態,如下圖:
若想將其關閉,使用命令sudo systemctl stop firewalld.service關閉防火牆。(ps:使用命令systemctl disable firewalld.service,可以停用防火牆開機自啟)
2.6.8 配置系統服務(root用戶)
進入postgresql源碼包的解壓目錄(本文為/home/10318001@zte.intra/Desktop/王澤輝的工作空間/postgreSQL源碼/postgresql-14.0),執行命令
cp contrib/start-scripts/linux /etc/init.d/postgresql
然后執行vim /etc/init.d/postgresql,查看配置信息是否如下圖所示,若不同,請按下面的方式配置:
然后使用命令chmod +x /etc/init.d/postgresql(需在root權限下執行),賦予該文件執行權限。另外,還可以使用命令chkconfig --add postgresql(需在root權限下執行),設置服務開機自啟。
2.6.9 啟動及鏈接數據庫
1. 啟動數據庫服務
使用命令#service postgresql start(需要root權限),啟動數據庫服務。可以通過命令:$sudo ps -ef | grep postgres,查看postgres相關進程,如下圖所示:
3. 鏈接數據庫
通過上述方法啟動數據庫后,便可通過postgresql自帶的客戶端工具psql來進行鏈接(psql二進制文件在/usr/local/pgsql/bin,因為已經配置環境變量,所以全局也可執行)。
請按如下的步驟進行操作:
(1) 在postgresql用戶下直接輸入命令:$psql,看到版本信息則說明鏈接成功。
(2) 然后,使用”\password”,設置密碼。如下圖所示:
(3) 驗證非本地客戶端工具的鏈接。
最后也是最重要的一步,就是驗證非本地客戶端工具的連接。本文選擇的工具是Navicat Premium,在主機(Window10)打開Navicat與虛擬機中的postgresql服務器進行連接測試,如下圖所示:
(4) 停止數據庫連接服務
若想停止數據庫服務,可以在root權限下執行命令:#service postgresql stop
總結:以上就是linux環境下源碼編譯安裝PostgreSQL的全過程。
十.錯誤及解決辦法
10.1 安裝PG時,執行configure腳本報錯
問題一:
1. 安裝前,執行configure配置文件時,報下面錯誤
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isnt looking in the proper directory.
Use --without-readline to disable readline support.
2. 解決辦法
(1)根據提示是沒有安裝readline包,首先檢查是否安裝readline包
由上可知,系統中已經安裝了readline包。
(2)通過yum查詢readline包,觀察都有哪些相關的包
由上可知,readline-devel.i686和readline-devel43.i386可能未安裝,嘗試安裝readline-devel包。
(3)嘗試安裝readline-devel包
注意,執行這個安裝命令,需要在root權限下安裝,用下面命令即可。
顯示“完畢”之后,即代表安裝完成。
(3)再次執行configure腳本,即可通過。
問題二:
1. 安裝前執行configure腳本,報下面的錯誤
checking for inflate in -lz... no
configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.
2. 解決辦法
(1)首先檢查系統中是否安裝zlib包
(2)通過yum查看zlib包,查看哪些包缺失
通過上述查看可知,zlib-devel需要安裝。
(3)安裝zlib-devel
由於安裝需要root權限,采用下面的命令安裝即可,如下圖:
(4)繼續執行configure腳本,執行成功,問題得到解決。