準備條件
OpenEuler(虛擬機):
版本:22.03-LTS-SP3
下載地址:https://www.openeuler.org/zh/download/
PostgreSQL:
版本:16.3源碼包
下載地址:https://www.postgresql.org/ftp/source/
操作系統(tǒng)安裝
安裝過程與centos基本一致,此處就省略了,安裝的時候可以把需要的網(wǎng)絡工具和開發(fā)工具包勾上,避免后續(xù)編譯需要去裝相應的包。
安裝Postgresql
安裝步驟
- 閱讀官方源碼安裝說明;
- 下載源碼包;
- 根據(jù)官方說明安裝必須依賴;
- 根據(jù)官方說明編譯安裝PostgreSQL;
- 配置、啟動PostgreSQL;
如無特殊說明,本說明是以root賬號登錄安裝,所以特殊需要系統(tǒng)權限命令不再需要sudo前綴,如實際安裝過程未采用root賬號導致安裝出現(xiàn)錯誤,可嘗試在命令前增加sudo。
安裝說明
可以查看源碼包里的INSTALL文件,主要看前面的兩部分Requirements和Short Version。
安裝依賴
根據(jù)文檔說明必要的依賴如下:
- make 需要版本3.81+
- gcc
- tar
- Readline
- zlib
其他可選依賴根據(jù)自身需要選裝。如果默認安裝操作系統(tǒng)的時候選擇了開發(fā)包,那么上面的依賴基本上都有了。
也可以通過命令全部安裝
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 ##創(chuàng)建data存放目錄
chown postgres:postgres /usr/local/pgsql/data ##給postgres用戶授權
su - postgres ##切換到postgres用戶(數(shù)據(jù)庫的操作不允許使用root用戶)
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data ##初始化數(shù)據(jù)庫
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start ##啟動數(shù)據(jù)庫
/usr/local/pgsql/bin/createdb test ##創(chuàng)建test數(shù)據(jù)庫
/usr/local/pgsql/bin/psql test ##連接test數(shù)據(jù)庫
上面的配置一般只需調(diào)整路徑即可
cd postgresql-16.3
./configure --prefix=/usr/local/postgresql --with-zstd --with-python --with-systemd
make
make install
安裝好后位置數(shù)據(jù)庫路徑及日志路徑
adduser postgres
mkdir /usr/local/postgresql/data
mkdir /usr/local/postgresql/log
chown postgres:postgres /usr/local/postgresql -R
初始化數(shù)據(jù)庫
su - postgres
/usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data
啟動數(shù)據(jù)庫
/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l /usr/local/postgresql/log/server.log start
創(chuàng)建并連接數(shù)據(jù)庫
/usr/local/postgresql/bin/createdb test
/usr/local/postgresql/bin/psql test
訪問配置
上面完成后可以通過命令工具在服務器上訪問數(shù)據(jù)庫,但是無法通過工具在外網(wǎng)訪問,需要進行下面的配置操作。
進入postgrelsql下的data目錄,命令及目錄結構如下:

base目錄是表空間目錄,global目錄是相關全局變量目錄, pg_hba.conf是訪問控制配置文件,postgresql.conf是postgresql主配置文件。我們需要修改的配置文件為pg_hba.conf和postgresql.conf文件。
修改pg_hba.conf文件,拉到最下面,如下圖所示修改:

pg_hba.conf文件是PostgreSQL數(shù)據(jù)庫系統(tǒng)中的一個配置文件,用于定義客戶端與服務器之間的連接規(guī)則。pg_hba代表 “host-based authentication”,即基于主機的身份驗證。 在這個文件中,可以規(guī)定哪些主機地址、哪些用戶、以及使用什么方法進行連接,以及是否需要密碼等認證信息。這是PostgreSQL數(shù)據(jù)庫管理安全連接的一個重要配置文件。
修改postgresql.conf文件,在展開到內(nèi)容中找到“# - Connection Settings -”,如下圖所示修改:

防火墻配置,對firewall或iptable進行策略配置,放通數(shù)據(jù)庫訪問端口5432。firewall的配置樣例如下:
##以下命令在root賬戶下執(zhí)行
firewall-cmd --zone=public --add-port=5432/tcp --permanent ##配置防火墻放行5432端口
firewall-cmd --reload ##防火墻重新加載配置文件
重啟數(shù)據(jù)庫
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
配置數(shù)據(jù)庫密碼
/usr/local/postgresql/bin/psql ##使用postgres用戶連接默認postgres數(shù)據(jù)庫;
ALTER USER postgres WITH PASSWORD 'postgres'; #修改數(shù)據(jù)庫用戶postgres的密碼為postgres;
環(huán)境變量
目前使用命令仍需要使用全路徑執(zhí)行,為方便使用,配置環(huán)境變量。
vi /etc/profile
##將如下內(nèi)容添加到文件末尾
PATH=/usr/local/postgresql/bin:$PATH
export PATH
##保存退出后執(zhí)行刷新配置
source /etc/profile
##切換到postgres用戶
su - postgres
##此時就可以直接執(zhí)行psql命令了
psql
開機啟動
方式一
PostgreSQL的開機自動啟動腳本位于PostgreSQL源碼目錄下的contrib/start-scripts目錄下:

其中l(wèi)inux文件為linux環(huán)境下的開機自啟動腳本,將其拷貝到“/etc/init.d”目錄下,并改名為postgresql:
cp linux /etc/init.d/postgresql
切換到/etc/init.d目錄,使用vi打開postgresql文件修改如下內(nèi)容:
#修改前:
#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文件的執(zhí)行權限:
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
添加開機啟動并現(xiàn)在啟動
systemctl enable postgresql.service --now
浙公網(wǎng)安備 33010602011771號