我成功在 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
本網頁的其他版本#
本文章有多種語言的版本。
如果您想發表評論,請訪問以下網頁:
這些網頁僅支持瀏覽,無法發表評論或留言,但提供了更多語言選項,並且加載時間更短:
ZH EN ZH-TW JA RU KO CS ES AR FR PT DE TR IT NL SV DA FI PL UK HE RO HU EL HR TH HI BN ID SW VI NO