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
./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使其監聽整個網路即可: