近日需要將PostgreSQL數據庫從Windows中遷移到Linux中,Linux CentOS 7 安裝PostgreSQL 9.5.17 安裝過程 特此記錄。
安裝環境:
數據庫:PostgreSQL 9.5.17
Linux:CentOS 7.3
數據庫源文件下載:
在postgresql的官方即可找到源碼文件目錄(地址:https://www.postgresql.org/ftp/source/),在列表中找到需要下載的 9.5.17版本

進入目錄,看到文件列表,選擇.tar.gz格式文件,點擊下載

編譯安裝:
將下載好的數據庫安裝文件,上傳至服務器的/user/local/目錄下,然后進入該目錄,解壓安裝包。
# tar -zvxf postgresql-9.5.17.tar.gz
進去解壓后的postgresql文件夾,進行編譯,並在在編譯時指定安裝目錄
# ./configure --prefix=/usr/local/postgresql
編譯出錯

沒有c編譯器,安裝gcc
# yum install gcc
安裝完成后,再次執行編譯
編譯出錯

缺少readline開發包,安裝readline-devel包:
# yum install readline-devel
安裝完成后,再次執行編譯
編譯出錯

缺少zlib開發包,安裝zlib開發包:
# yum install zlib-devel
安裝完成后,再次執行編譯
編譯成功,成功創建創建了config.status配置文件

編譯配置完成,開始執行安裝:依次執行:
# make

# make install

編譯安裝完成
設置用戶權限及環境變量
編譯安裝成功后,接下來要做的就是創建一個普通用戶,因為默認超級用戶(root)不能啟動postgresql,所以需要創建一個普通用戶來啟動數據庫,執行以下命令創建用戶:
# useradd admin
需要設置權限,將postgres的數據目錄全部賦權給admin用戶(此處我將postgres的數據目錄指定在在/usr/local/postgresql/data目錄下):
# chown -R admin:admin /usr/local/postgresql/
設置相關環境變量
此處僅僅設置admin用戶的環境變量,所以首先切換到admin用戶
切換用戶: # su - admin
然后打開.bash_profile文件並追加以下內容:
打開.bash_profile文件 : $ vi .bash_profile
追加一下內容:
PGHOME=/usr/local/postgresql export PGHOME PGDATA=/usr/local/postgresql/data export PGDATA PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin

修改完成后可以通過 $ source ./.bash_profile 使其立即生效
檢驗環境變量是否設置正確
切換任意目錄輸入$ which psql 以及 $ psql -V 即可分別查看psql客戶端的路徑以及postgresql的數據庫版本

初始化數據庫
由於配置了環境變量,所以此處我們直接執行initdb命令即可完成db初始化
$ initdb
初始化成功

進入postgresql的目錄可以看到生成的數據目錄data以及該目錄的相關數據和配置文件:

接下來修改配置文件,pg_hba.conf和postgresql.conf。一個是訪問控制配置(127.0.0.1改為信任的客戶端ip網段使其可以遠程訪問),一個是postgresql主配置文件(listen_address=localhost改為星號使其監聽整個網絡)。
進入/usr/local/postgresql/data目錄,修改文件,這里將pg_hba.conf的ip地址修改為0.0.0.0/0,而加密方式改為md5,就表示需要密碼訪問:
pg_hba.conf文件修改:

修改postgresql.conf文件
將listen_address=localhost改為星號使其監聽整個網絡:

同時需要放開機器的5432端口,這里為了方便起見,直接關閉服務器防火牆:
關閉防火牆:
$ systemctl stop firewalld

此時為普通用戶,關閉防火牆需要root賬戶權限,需要輸入root賬戶密碼獲取權限
禁止防火牆開機啟動:
$ systemctl disable firewalld

此時為普通用戶,取消防火牆開機啟動同樣需要root賬戶權限,需要輸入root賬戶密碼獲取權限
查看防火牆狀態:
$ systemctl status firewalld

防火牆已經關閉
至此配置相關的內容就全部完成了,最后就是啟動並連接數據庫了。
啟動、連接數據庫
在初始化數據庫結束時我們已經看到了啟動命令

由於之前設置了環境變量,所以已經指定了數據目錄PGDATA,-l表示日志文件目錄,通常需要指定,所以我們在/usr/local/postgresql根目錄下再創建一個log目錄用來存放日志文件並賦予可寫的權限
進入 /usr/local/postgresql目錄
創建文件夾
$ mkdir log
賦予權限
$ chown -R admin:admin /usr/local/postgresql/log/
啟動數據庫
$ pg_ctl start -l /usr/local/postgresql/log/pg_server.log
啟動成功:

通過postgresql自帶的客戶端工具psql來進行連接(在連接是需要制定連接數據庫,這里直接連接postgres數據庫):
$ psql postgres

設置admin用戶的密碼(默認為空),用psql連接成功后直接輸入 \password 即會提示輸入兩次密碼,如下圖:

修改完密碼以后,就是最重要的一點就是驗證非本地客戶端工具的連接了,畢竟我們是要做數據庫服務器的,這里我選擇的工具是Navicat Premium,在主機(Windows 10)打開Navicat與虛擬機中的postgresql服務器進行連接測試:

可以發現連接成功,同理停止數據庫可以使用命令 pg_ctl stop 來關閉postgresql服務,很簡單,至此關於源碼編譯安裝postgresql就全部結束了。
