我成功在 Ubuntu ARM32 上編譯安裝了最新版 PostgreSQL ( 17.4 )。
這篇文章中的命令主要來源於 PostgreSQL 官方文檔。我已經實際測試過這篇文章中的每個命令。
可以在這裡看到能夠成功安裝的系統 PostgreSQL 构建农场
編譯安裝 PostgreSQL 17.4
1. 創建目錄並進入目錄
mkdir postgresql && cd postgresql
mkdir postgresql
:創建一個名為postgresql
的新目錄。cd postgresql
:進入剛剛創建的postgresql
目錄。
2. 下載 PostgreSQL 原始碼
wget https://ftp.postgresql.org/pub/source/v17.4/postgresql-17.4.tar.bz2
wget
:從指定的 URL 下載檔案。https://..../postgresql-17.4.tar.bz2
:PostgreSQL 17.4 版本的壓縮原始碼包的下載連結。如果連結失效,您可以自行查找新連結。
3. 解壓縮原始碼包
tar xjf postgresql-17.4.tar.bz2
-
tar
:用於處理.tar
壓縮檔案。 -
xjf
:解壓縮tar
檔案的選項:x
:解壓縮檔案。j
:使用 bzip2 壓縮格式(.bz2)。f
:指定要解壓縮的檔案。
-
postgresql-17.4.tar.bz2
:要解壓縮的檔案名。
4. 進入解壓縮後的原始碼目錄
cd postgresql-17.4
- 進入解壓縮後的 PostgreSQL 17.4 原始碼目錄。
5. 安裝依賴包
sudo apt install libssl-dev libsystemd-dev libxml2-dev libreadline-dev
sudo apt install
:使用apt
包管理器安裝軟體包。libssl-dev
、libsystemd-dev
、libxml2-dev
、libreadline-dev
:安裝 PostgreSQL 編譯所需的開發庫,分別是 SSL 庫、Systemd 庫、XML 庫和 Readline 庫。
6. 配置編譯選項
./configure --prefix=/usr/local/pgsql --with-openssl --with-libxml --with-systemd
./configure
:準備 PostgreSQL 的編譯環境。--prefix=/usr/local/pgsql
:指定 PostgreSQL 安裝目錄為/usr/local/pgsql
。--with-openssl
:啟用 OpenSSL 支援。--with-libxml
:啟用 XML 支援。--with-systemd
:啟用 Systemd 支援。
7. 編譯原始碼
make -j$(nproc)
make
:啟動編譯過程。-j$(nproc)
:使用nproc
(系統的 CPU 核心數)來並行執行編譯任務,加速編譯過程。
8. 安裝 PostgreSQL
sudo make install
sudo make install
:使用sudo
以管理員權限執行安裝,make install
將編譯好的檔案安裝到系統中,安裝到前面./configure
命令中指定的/usr/local/pgsql
目錄。
9. 設定環境變數
使用文字編輯器 1. 編輯 /etc/profile
檔案:
sudo nano /etc/profile
sudo
:表示以超級使用者(管理員)權限運行命令。因為修改/etc/profile
檔案需要管理員權限。nano
:這是一個文字編輯器,常用於終端環境中編輯檔案。/etc/profile
:這是一個全域配置文件,用於設定系統範圍內的環境變數和啟動配置。所有使用者登入系統時,都會執行這個檔案中的設定。
- 添加環境變數:
export PATH=/usr/local/pgsql/bin:$PATH
export
:用於設定一個環境變數,使其在當前和子程序中可用。PATH
:這是一個環境變數,包含了系統中可執行檔案的目錄列表。系統在執行命令時,會根據PATH
變數中列出的目錄來查找命令。/usr/local/pgsql/bin
:這是 PostgreSQL 資料庫的可執行檔案目錄,添加它意味著在該目錄下的可執行檔案(如psql
)會被系統識別。:$PATH
:這裡$PATH
代表原本已有的路徑,將新的路徑/usr/local/pgsql/bin
加入到原有PATH
的前面。這樣,系統會先檢查新的目錄,然後再檢查原有路徑。
這段命令的作用是將 PostgreSQL 的可執行檔案目錄添加到系統的環境變數 PATH
中,確保在命令行中可以直接運行 PostgreSQL 的命令(如 psql
),而不需要提供完整路徑。修改後的設定會對所有使用者生效
初始化 PostgreSQL 資料庫
這些命令主要用於在 Linux 伺服器上手動配置 PostgreSQL 資料庫伺服器,包括創建 PostgreSQL 系統使用者、初始化資料庫、啟動資料庫服務,並將其註冊為 systemd
服務,以便開機自動啟動。
1. 創建 PostgreSQL 使用者
sudo useradd -m -U -r -d /var/lib/postgresql -s /bin/bash postgres
sudo
:以超級使用者權限執行命令。useradd
:創建新使用者。-m
:創建使用者的 home 目錄。-U
:同時創建一個與使用者名相同的使用者群組。-r
:創建一個系統使用者(系統使用者 UID 低於 1000,不用於登入)。-d /var/lib/postgresql
:指定 home 目錄為/var/lib/postgresql
。-s /bin/bash
:指定 shell 為/bin/bash
。postgres
:使用者名。
該命令創建了一個 PostgreSQL 專用的系統使用者 postgres
。
2. 更改 PostgreSQL 目錄的所有者
sudo chown postgres /usr/local/pgsql
chown postgres /usr/local/pgsql
:將/usr/local/pgsql
目錄的所有者更改為postgres
使用者,使其可以讀寫該目錄。
3. 設定 PostgreSQL 使用者的密碼
sudo passwd postgres
passwd postgres
:修改postgres
使用者的密碼。
4. 切換到 PostgreSQL 使用者
su postgres
su postgres
:切換到postgres
使用者,以便使用 PostgreSQL 相關命令。
5. 初始化資料庫
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
initdb -D /usr/local/pgsql/data
:在/usr/local/pgsql/data
目錄中初始化資料庫儲存。
6. 啟動 PostgreSQL 資料庫
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
postgres -D /usr/local/pgsql/data
:以postgres
程序啟動資料庫,資料儲存在/usr/local/pgsql/data
目錄。
7. 在另一個終端會話中,進入資料庫
su postgres
/usr/local/pgsql/bin/psql
psql
:PostgreSQL 的命令行互動工具,進入資料庫 shell。
8. 設定資料庫使用者的密碼
ALTER USER postgres WITH PASSWORD 'your_new_password';
- 修改資料庫使用者
postgres
的密碼。
9. 創建 systemd
服務
sudo nano /etc/systemd/system/postgresql.service
nano /etc/systemd/system/postgresql.service
:編輯systemd
配置文件,讓 PostgreSQL 可以作為服務運行。
配置文件內容:
[Unit]
Description=PostgreSQL server
#Documentation=man:postgres(1)
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
User=postgres
ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=infinity
[Install]
WantedBy=multi-user.target
Description=PostgreSQL server
:描述該服務是 PostgreSQL 伺服器。After=network-online.target
:等待網路連接可用後再啟動 PostgreSQL。User=postgres
:以postgres
使用者運行。ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
:啟動 PostgreSQL 伺服器。ExecReload=/bin/kill -HUP $MAINPID
:重載時發送HUP
信號。KillMode=mixed
:混合終止模式。KillSignal=SIGINT
:終止 PostgreSQL 程序的信號。TimeoutSec=infinity
:超時設定為無限。
10. 啟用 systemd
服務
sudo systemctl daemon-reload
sudo systemctl start postgresql
sudo systemctl status postgresql
sudo systemctl enable postgresql
daemon-reload
:重新載入systemd
配置,使新的postgresql.service
生效。start postgresql
:啟動 PostgreSQL 服務。status postgresql
:檢查 PostgreSQL 運行狀態。enable postgresql
:開機自動啟動 PostgreSQL。
這些命令的目的是:
- 創建一個專門用於運行 PostgreSQL 的
postgres
使用者。 - 初始化資料庫儲存目錄。
- 啟動 PostgreSQL 資料庫,並進入
psql
互動式命令行。 - 配置
systemd
使 PostgreSQL 作為系統服務運行,並支持開機自啟動。
這樣 PostgreSQL 伺服器就能正常運行,並可以在系統啟動時自動啟動。
參考資料
PostgreSQL: Documentation: 17: Chapter 17. Installation from Source Code