地球人

地球人的空间

世上本没有路
tg_channel
mastodon
pleroma

2025年最新:Ubuntu 編譯安裝 PostgreSQL 17.4

我成功在 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-devlibsystemd-devlibxml2-devlibreadline-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:這是一個全局配置文件,用於設置系統範圍內的環境變量和啟動配置。所有用戶登錄系統時,會執行這個文件中的設置。
  1. 添加環境變量
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。

這些命令的目的是:

  1. 創建一個專門用於運行 PostgreSQL 的 postgres 用戶。
  2. 初始化數據庫存儲目錄。
  3. 啟動 PostgreSQL 數據庫,並進入 psql 交互式命令行。
  4. 配置 systemd 使 PostgreSQL 作為系統服務運行,並支持開機自啟動。

這樣 PostgreSQL 伺服器就能正常運行,並可以在系統啟動時自動啟動。

參考資料#

PostgreSQL: Documentation: 17: Chapter 17. Installation from Source Code

本網頁的其他版本#

本文章有多種語言的版本。

如果您想發表評論,請訪問以下網頁:

ZH EN ZH-TW JA

這些網頁僅支持瀏覽,無法發表評論或留言,但提供了更多語言選項,並且加載時間更短:

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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。