openeuler原始碼安裝Postgresql 16

lzc_jack發表於2024-06-02

準備條件

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目錄,命令及目錄結構如下:
image.png
base目錄是表空間目錄,global目錄是相關全域性變數目錄, pg_hba.conf是訪問控制配置檔案,postgresql.conf是postgresql主配置檔案。我們需要修改的配置檔案為pg_hba.conf和postgresql.conf檔案。
修改pg_hba.conf檔案,拉到最下面,如下圖所示修改:
image.png

pg_hba.conf檔案是PostgreSQL資料庫系統中的一個配置檔案,用於定義客戶端與伺服器之間的連線規則。pg_hba代表 “host-based authentication”,即基於主機的身份驗證。 在這個檔案中,可以規定哪些主機地址、哪些使用者、以及使用什麼方法進行連線,以及是否需要密碼等認證資訊。這是PostgreSQL資料庫管理安全連線的一個重要配置檔案。

修改postgresql.conf檔案,在展開到內容中找到“# - Connection Settings -”,如下圖所示修改:
image.png
防火牆配置,對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目錄下:
image.png
其中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

相關文章