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