我成功在 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