準備條件
OpenEuler(虛擬機器):
版本:22.03-LTS-SP3
下載地址:https://www.openeuler.org/zh/download/
PostgreSQL:
版本:16.3原始碼包
下載地址:https://www.postgresql.org/ftp/source/
作業系統安裝
安裝過程與centos基本一致,此處就省略了,安裝的時候可以把需要的網路工具和開發工具包勾上,避免後續編譯需要去裝相應的包。
安裝Postgresql
安裝步驟
- 閱讀官方原始碼安裝說明;
- 下載原始碼包;
- 根據官方說明安裝必須依賴;
- 根據官方說明編譯安裝PostgreSQL;
- 配置、啟動PostgreSQL;
如無特殊說明,本說明是以root賬號登入安裝,所以特殊需要系統許可權命令不再需要sudo字首,如實際安裝過程未採用root賬號導致安裝出現錯誤,可嘗試在命令前增加sudo。
安裝說明
可以檢視原始碼包裡的INSTALL檔案,主要看前面的兩部分Requirements和Short Version。
安裝依賴
根據文件說明必要的依賴如下:
- make 需要版本3.81+
- gcc
- tar
- Readline
- zlib
其他可選依賴根據自身需要選裝。如果預設安裝作業系統的時候選擇了開發包,那麼上面的依賴基本上都有了。
也可以透過命令全部安裝
dnf install readline-devel zlib-devel lz4-devel libzstd-devel systemd-devel python3-devel make gcc
編譯安裝
解壓原始碼包
tar xvf postgresql-16.3.tar.gz
生成postgresql-16.3目錄
官方提供的簡單版本的安裝命令如下:
./configure ##配置
make ##編譯
su ##切換管理員許可權
make install ##安裝
adduser postgres ##新增postgres使用者
mkdir /usr/local/pgsql/data ##建立data存放目錄
chown postgres:postgres /usr/local/pgsql/data ##給postgres使用者授權
su - postgres ##切換到postgres使用者(資料庫的操作不允許使用root使用者)
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data ##初始化資料庫
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start ##啟動資料庫
/usr/local/pgsql/bin/createdb test ##建立test資料庫
/usr/local/pgsql/bin/psql test ##連線test資料庫
上面的配置一般只需調整路徑即可
cd postgresql-16.3
./configure --prefix=/usr/local/postgresql --with-zstd --with-python --with-systemd
make
make install
安裝好後位置資料庫路徑及日誌路徑
adduser postgres
mkdir /usr/local/postgresql/data
mkdir /usr/local/postgresql/log
chown postgres:postgres /usr/local/postgresql -R
初始化資料庫
su - postgres
/usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data
啟動資料庫
/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/log/server.log start
建立並連線資料庫
/usr/local/postgresql/bin/createdb test
/usr/local/postgresql/bin/psql test
訪問配置
上面完成後可以透過命令工具在伺服器上訪問資料庫,但是無法透過工具在外網訪問,需要進行下面的配置操作。
進入postgrelsql下的data目錄,命令及目錄結構如下:
base目錄是表空間目錄,global目錄是相關全域性變數目錄, pg_hba.conf是訪問控制配置檔案,postgresql.conf是postgresql主配置檔案。我們需要修改的配置檔案為pg_hba.conf和postgresql.conf檔案。
修改pg_hba.conf檔案,拉到最下面,如下圖所示修改:
pg_hba.conf檔案是PostgreSQL資料庫系統中的一個配置檔案,用於定義客戶端與伺服器之間的連線規則。pg_hba代表 “host-based authentication”,即基於主機的身份驗證。 在這個檔案中,可以規定哪些主機地址、哪些使用者、以及使用什麼方法進行連線,以及是否需要密碼等認證資訊。這是PostgreSQL資料庫管理安全連線的一個重要配置檔案。
修改postgresql.conf檔案,在展開到內容中找到“# - Connection Settings -”,如下圖所示修改:
防火牆配置,對firewall或iptable進行策略配置,放通資料庫訪問埠5432。firewall的配置樣例如下:
##以下命令在root賬戶下執行
firewall-cmd --zone=public --add-port=5432/tcp --permanent ##配置防火牆放行5432埠
firewall-cmd --reload ##防火牆重新載入配置檔案
重啟資料庫
su - postgres
/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/log/server.log stop
/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/log/server.log start
配置資料庫密碼
/usr/local/postgresql/bin/psql ##使用postgres使用者連線預設postgres資料庫;
ALTER USER postgres WITH PASSWORD 'postgres'; #修改資料庫使用者postgres的密碼為postgres;
環境變數
目前使用命令仍需要使用全路徑執行,為方便使用,配置環境變數。
vi /etc/profile
##將如下內容新增到檔案末尾
PATH=/usr/local/postgresql/bin:$PATH
export PATH
##儲存退出後執行重新整理配置
source /etc/profile
##切換到postgres使用者
su - postgres
##此時就可以直接執行psql命令了
psql
開機啟動
方式一
PostgreSQL的開機自動啟動指令碼位於PostgreSQL原始碼目錄下的contrib/start-scripts目錄下:
其中linux檔案為linux環境下的開機自啟動指令碼,將其複製到“/etc/init.d”目錄下,並改名為postgresql:
cp linux /etc/init.d/postgresql
切換到/etc/init.d目錄,使用vi開啟postgresql檔案修改如下內容:
#修改前:
#Installation prefix
prefix=/usr/local/pgsql
#修改後:
#Intalllation prefix[2021-10-25]
prefix=/usr/local/postgresql
#修改前:
# Data directory
#PGDATA="/usr/local/pgsql/data"
#修改後:
# Data directory[2021-10-25]
PGDATA="/usr/local/postgresql/data"
# Who to run the postmaster as, usually "postgres". (NOT "root")
# 將啟動使用者修改為實際使用者,這裡使用postgres,所以不變。
PGUSER=postgres
#修改前:
# Where to keep a log file
PGLOG="$PGDATA/serverlog"
#修改後:
# Where to keep a log flie[2021-10-25]
PGLOG="/usr/local/postgresql/log/server.log"
然後修改postgresql檔案的執行許可權:
chmod a+x postgresql
新增開機啟動:
chkconfig --add postgresql
然後重啟伺服器開機驗證即可。
方式二
編輯如下啟動檔案/lib/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
User=postgres
ExecStart=/usr/local/postgresql/bin/postgres -D /usr/local/postgresql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=infinity
[Install]
WantedBy=multi-user.target
新增開機啟動並現在啟動
systemctl enable postgresql.service --now