地球人

地球人的空间

世上本没有路
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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。