一. PostgreSQL 簡介
PostgrepSQL 是一種物件關係型資料庫管理系統。
二. PostgreSQL 環境的安裝和配置
2.1 原始碼的下載
PostgreSQL 14.0 原始碼可以從 PostgreSQL 官網:
原始碼目錄內容,如下圖所示:
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 指令碼,執行成功,問題得到解決。