1. 程式人生 > >Linux CentOS 7 編譯安裝PostgreSQL 10.1

Linux CentOS 7 編譯安裝PostgreSQL 10.1

重啟:

su postgres

cd /usr/local/postgresql/bin

./pg_ctl -D /usr/local/postgresql/data/ -l logfile restart

配置編譯安裝

先去官網下載需要的包

https://www.postgresql.org/ftp/source/v10.1/

首先進入pg壓縮包目錄通過tar -zxvf ./postgresql-9.5.5.tar.gz進行解壓,然後就可以開始編譯安裝了,進入解壓目錄,通過./configure --help可以看到編譯相關的幫助資訊,如下圖: 
這裡寫圖片描述

如上圖,--prefix=dir可以指定安裝目錄,還有比如--with-python

則可以使用python語法的PL/Python過程語言自定義函式,根據需求我們暫且用不到,所以編譯時僅指定一個安裝目錄即可:

./configure --prefix=/usr/local/postgresql
  • 1

執行編譯後發現會提示沒有c編譯器,是因為新系統的原因,所以安裝一個gcc編譯器即可:

yum install gcc
  • 1

安裝完成後再次編譯postgres,發現提示缺少readline庫,如下圖: 
這裡寫圖片描述

如上圖,但是通過rpm -qa | grep readline命令檢視可以發現系統預設是自帶readline包的,如下圖: 
這裡寫圖片描述

那麼肯定還是缺少與readline相關的包了,通過yum search readline進行搜尋可以發現一個readline-devel包,如下圖: 
這裡寫圖片描述

其實我們缺少的正是這個readline開發包(readline-devel),而不是readline包,所以接下來安裝一下readline-devel

yum install readline-devel
  • 1

安裝完成後再次編譯postgresql,還是報錯,這次提示缺少zlib庫: 
這裡寫圖片描述

同理,缺少的依然是zlib開發包(zlib-devel)而並不是zlib包,所以繼續安裝zlib-devel:

yum install zlib-devel
  • 1

安裝完成後再次編譯postgresql,並沒有再報error,可以看到提示建立了config.status配置檔案: 
這裡寫圖片描述

配置完成了,接下來就可以編譯安裝了,依次執行:

make
make install
  • 1
  • 2

看到如下提示即可說明編譯安裝成功: 
這裡寫圖片描述 
這裡寫圖片描述

使用者許可權與環境變數

編譯安裝成功後,接下來要做的就是建立一個普通使用者,因為預設超級使用者(root)不能啟動postgresql,所以需要建立一個普通使用者來啟動資料庫,執行以下命令建立使用者:

useradd postgres
  • 1

接下來需要設定許可權,將postgres的資料目錄全部賦權給postgres使用者(此處我將postgres的資料目錄指定在在/usr/local/postgresql/data目錄下):

chown -R postgres:postgres /usr/local/postgresql/
  • 1

最後為了方便起見設定一下相關的環境變數,此處僅僅設定postgres使用者的環境變數,所以首先通過su - postgres切換到postgres使用者,開啟.bash_profile檔案並追加以下內容: 
這裡寫圖片描述

修改完成後可以通過source ./.bash_profile使其立即生效,接下來檢驗一下環境變數是否設定正確,切換任意目錄輸入which psql以及psql -V即可分別檢視psql客戶端的路徑以及postgresql的資料庫版本,如下圖: 
這裡寫圖片描述

一切準備就緒之後接下來就可以初始化資料庫了。

初始化資料庫

由於配置了環境變數,所以此處我們直接執行initdb即可完成db初始化,但在這之前我們可以通過initdb --help看一下初始化相關的幫助資訊: 
這裡寫圖片描述

如上圖,可以看到在使用initdb進行初始化的同時我們可以指定引數來同時進行一些初始化工作,例如指定pgdata(postgresql資料目錄)、指定encoding(編碼)、指定資料庫超級使用者的使用者名稱和密碼等等,在最後面我標記出的這段話指出了如果data目錄沒有指定,則會預設使用環境變數中的PGDATA,由於之前我們剛剛設定了PGDATA環境變數,所以此處我們也就無需再額外指定,最後執行初始化命令即可:

initdb
  • 1

看到如下資訊就說明初始化成功了: 
這裡寫圖片描述

同時在postgresql的目錄可以看到生成的資料目錄data以及該目錄的相關資料和配置檔案: 
這裡寫圖片描述 
這裡寫圖片描述

如上圖,base目錄是表空間目錄,global目錄是相關全域性變數的目錄,pg_hba.conf和postgresql.conf在之前的部落格也都提及了,一個是訪問控制配置(127.0.0.1改為信任的客戶端ip網段使其可以遠端訪問),一個是postgresql主配置檔案(listen_address=localhost改為星號使其監聽整個網路),方便起見我這裡將pg_hba.conf的ip地址修改為0.0.0.0/0,而加密方式改為md5,就表示需要密碼訪問,算是提供一個最低階的安全防護: 
這裡寫圖片描述

而postgresql.conf就像上面說的那樣修改一下listen_address使其監聽整個網路即可: 
這裡寫圖片描述