Ubuntu24.04 源码安装PostgreSQL15.6+PostGIS3.4.2+pgRouting3.6.0完整方案(含systemctl+Navicat配置)
本文针对Ubuntu24.04系统,提供PostgreSQL15.6、PostGIS3.4.2、pgRouting3.6.0及LZ4压缩支持的完整源码安装方案,解决源码编译路径关联、systemctl服务配置、Navicat远程连接等核心问题,包含全程避坑指南,适用于GIS开发及数据库运维场景。
一、前置说明与环境准备
1.1 安装目标
-
安装路径:自定义目录
/data/postgresql-15.6/(便于管理和迁移) -
核心组件:PostgreSQL15.6(带LZ4压缩)、PostGIS3.4.2(空间扩展)、pgRouting3.6.0(路由扩展)
-
功能支持:systemctl服务管理、Navicat远程连接、扩展功能完整可用
1.2 环境清理(避免残留干扰)
若系统曾安装过PostgreSQL相关组件,先执行清理命令,确保环境纯净:
# 卸载系统残留包
sudo apt autoremove --purge -y postgresql* postgis*
# 删除旧安装目录和临时文件
sudo rm -rf /data/postgresql-15.6 /tmp/postgresql-15.6 /tmp/postgis-3.4.2 /tmp/pgrouting-3.6.0
1.3 依赖包全量安装
源码编译需依赖大量开发库,一次性安装避免后续编译报错:
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential libreadline-dev zlib1g-dev flex bison libxml2-dev libssl-dev \
libgdal-dev libgeos-dev libproj-dev libprotobuf-c-dev protobuf-c-compiler libjson-c-dev sqlite3 libsqlite3-dev \
cmake pkg-config liblz4-dev git libboost-all-dev libbz2-dev libzstd-dev libcurl4-openssl-dev \
python3-dev python3-pip debianutils openssl
关键依赖说明:debianutils提供config.sub工具(解决编译配置报错),libboost-all-dev为pgRouting必需依赖
二、核心组件安装步骤
2.1 自定义目录创建与授权
创建指定安装目录并配置权限,确保postgres用户可操作:
# 创建安装目录
sudo mkdir -p /data/postgresql-15.6
# 创建postgres用户组和用户(带家目录和shell)
sudo groupadd postgres
sudo useradd -m -g postgres -s /bin/bash postgres
# 设置postgres用户密码(记牢,Navicat连接用)
sudo passwd postgres
# 授权目录归属postgres用户
sudo chown -R postgres:postgres /data/postgresql-15.6/
sudo chmod -R 755 /data/postgresql-15.6/
2.2 源码下载与解压
进入/tmp临时目录下载源码,避免污染源码编译环境:
cd /tmp
# 1. 下载PostgreSQL15.6
wget https://ftp.postgresql.org/pub/source/v15.6/postgresql-15.6.tar.gz
tar -xzf postgresql-15.6.tar.gz
# 2. 下载PostGIS3.4.2
wget https://download.osgeo.org/postgis/source/postgis-3.4.2.tar.gz
tar -xzf postgis-3.4.2.tar.gz
# 3. 下载pgRouting3.6.0
wget https://github.com/pgRouting/pgrouting/archive/refs/tags/v3.6.0.tar.gz -O pgrouting-3.6.0.tar.gz
tar -xzf pgrouting-3.6.0.tar.gz
2.3 编译安装PostgreSQL15.6(带LZ4支持)
核心配置指定自定义目录和LZ4压缩,编译时利用多CPU核心加速:
cd /tmp/postgresql-15.6
# 配置编译参数(反斜杠后无空格,避免语法错误)
./configure \
--prefix=/data/postgresql-15.6 \
--with-openssl \
--with-libxml \
--with-readline \
--with-python \
--with-lz4 \
PYTHON=/usr/bin/python3
# 编译(-j$(nproc)自动识别CPU核心数)
make -j$(nproc) world
# 安装
sudo make install-world
# 初始化数据库(postgres用户执行,指定UTF8编码)
su - postgres -c "/data/postgresql-15.6/bin/initdb -U postgres -E UTF8 -D /data/postgresql-15.6/data"
避坑点:configure命令中反斜杠后不可加空格或注释,否则会出现“config.sub缺失参数”错误
2.4 编译安装PostGIS3.4.2(关联自定义PG)
通过环境变量强制关联自定义PostgreSQL目录,避免安装到系统默认路径:
cd /tmp/postgis-3.4.2
# 设置环境变量,优先使用自定义PG的pg_config
export PATH=/data/postgresql-15.6/bin:$PATH
export PG_CONFIG=/data/postgresql-15.6/bin/pg_config
# 配置编译参数(指定PG头文件和库文件路径)
./configure \
--prefix=/data/postgresql-15.6 \
--with-pgconfig=/data/postgresql-15.6/bin/pg_config \
--with-projdir=/usr \
--with-geosconfig=/usr/bin/geos-config \
--with-gdalconfig=/usr/bin/gdal-config \
CPPFLAGS="-I/data/postgresql-15.6/include" \
LDFLAGS="-L/data/postgresql-15.6/lib"
# 编译安装
make -j$(nproc)
sudo make install
# 验证安装(出现postgis相关文件即为成功)
ls /data/postgresql-15.6/share/extension | grep postgis
2.5 编译安装pgRouting3.6.0(适配PG15)
采用cmake构建,需在独立build目录执行,确保路径关联正确:
cd /tmp/pgrouting-3.6.0
# 创建build目录(规范编译流程)
mkdir build && cd build
# 配置cmake参数
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/data/postgresql-15.6 \
-DPOSTGRESQL_PG_CONFIG=/data/postgresql-15.6/bin/pg_config
# 编译安装
make -j$(nproc)
sudo make install
# 验证安装
ls /data/postgresql-15.6/share/extension | grep pgrouting
避坑点:不可在/data目录下执行cmake,需在/tmp/pgrouting-3.6.0/build目录操作,否则会出现“CMakeLists.txt缺失”错误
三、关键配置(systemctl+远程连接)
3.1 创建systemctl服务(支持服务管理)
手动创建服务文件,实现PostgreSQL的systemctl启动、停止和开机自启:
sudo tee /etc/systemd/system/postgresql-15.service > /dev/null << EOF
[Unit]
Description=PostgreSQL 15 Database Server (Custom Source Install)
Documentation=https://www.postgresql.org/docs/15/
After=network.target # 网络服务启动后再启动PG
[Service]
Type=forking # 后台运行模式
User=postgres # 以postgres用户运行
Group=postgres # 关联postgres用户组
# 启动命令(指定数据目录,-w等待启动完成)
ExecStart=/data/postgresql-15.6/bin/pg_ctl start -D /data/postgresql-15.6/data -s -w -t 60
# 停止命令(快速停止,避免数据丢失)
ExecStop=/data/postgresql-15.6/bin/pg_ctl stop -D /data/postgresql-15.6/data -s -m fast
# 重新加载配置
ExecReload=/data/postgresql-15.6/bin/pg_ctl reload -D /data/postgresql-15.6/data -s
LimitNOFILE=65535 # 提升文件描述符限制
Restart=on-failure # 故障时自动重启
[Install]
WantedBy=multi-user.target # 多用户模式下启动
EOF
服务文件创建后,执行以下命令启用并启动服务:
# 重新加载systemd配置(识别新服务)
sudo systemctl daemon-reload
# 启动PostgreSQL服务
sudo systemctl start postgresql-15
# 设置开机自启
sudo systemctl enable postgresql-15
# 验证服务状态(显示active (running)即为成功)
sudo systemctl status postgresql-15
若启动失败,查看日志排查问题:su - postgres -c “tail -f /data/postgresql-15.6/data/log/postgresql-*.log”
3.2 配置Navicat远程连接
需修改PG配置文件允许远程访问,并开放防火墙端口,确保Navicat能正常连接。
3.2.1 修改PG核心配置
# 1. 修改postgresql.conf(允许所有IP监听)
su - postgres -c "sed -i 's/^listen_addresses = .*/listen_addresses = '*'/g' /data/postgresql-15.6/data/postgresql.conf"
# 2. 修改pg_hba.conf(允许密码认证)
su - postgres -c "echo 'host all all 0.0.0.0/0 md5' >> /data/postgresql-15.6/data/pg_hba.conf"
su - postgres -c "echo 'host all all ::/0 md5' >> /data/postgresql-15.6/data/pg_hba.conf"
# 3. 重启服务使配置生效
sudo systemctl restart postgresql-15
3.2.2 开放防火墙端口
Ubuntu默认防火墙ufw开放5432端口(PG默认端口):
# 开放5432端口
sudo ufw allow 5432/tcp
# 重启防火墙
sudo ufw reload
# 验证端口开放状态
sudo ufw status
3.2.3 Navicat连接配置
打开Navicat客户端,新建“PostgreSQL连接”,输入以下信息:
-
连接名:自定义(如PG15-GIS)
-
主机:Ubuntu服务器IP地址(本地测试用127.0.0.1)
-
端口:5432(默认端口,若修改需对应调整)
-
用户名:postgres(初始化的超级用户)
-
密码:步骤2.1中设置的postgres用户密码
-
数据库:postgres(默认数据库)
点击“测试连接”,显示“连接成功”即完成配置。
四、全量功能验证
安装完成后,需验证PostgreSQL、LZ4压缩、PostGIS、pgRouting的功能是否正常。
4.1 验证LZ4压缩功能
# 切换到postgres用户,登录数据库
su - postgres
/data/postgresql-15.6/bin/psql -U postgres
# 执行SQL验证LZ4
DROP TABLE IF EXISTS test_lz4;
CREATE TABLE test_lz4 (txt text COMPRESSION lz4);
INSERT INTO test_lz4 SELECT repeat('postgresql-gis', 1000);
SELECT pg_column_compression(txt) FROM test_lz4; -- 输出lz4即为成功
4.2 验证PostGIS与pgRouting扩展
在数据库终端继续执行以下命令:
# 创建扩展(若已创建可跳过)
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE EXTENSION IF NOT EXISTS pgrouting;
CREATE EXTENSION IF NOT EXISTS postgis_topology;
# 查看已安装扩展(应显示所有组件及版本)
\dx;
# PostGIS功能测试(创建空间表)
DROP TABLE IF EXISTS test_geo;
CREATE TABLE test_geo (id int, geom geometry(Point,4326));
INSERT INTO test_geo VALUES (1, ST_GeomFromText('POINT(116.403874 39.914885)', 4326));
SELECT id, ST_AsText(geom) FROM test_geo; -- 输出空间坐标即为成功
五、运维常用命令汇总
整理日常管理常用命令,方便快速操作:
| 操作目的 | 命令 |
|---|---|
| 启动服务 | sudo systemctl start postgresql-15 |
| 停止服务 | sudo systemctl stop postgresql-15 |
| 重启服务 | sudo systemctl restart postgresql-15 |
| 查看服务状态 | sudo systemctl status postgresql-15 |
| 登录数据库 | su - postgres -c “/data/postgresql-15.6/bin/psql -U postgres” |
| 查看日志 | su - postgres -c “tail -f /data/postgresql-15.6/data/log/postgresql-*.log” |
| 备份数据库 | su - postgres -c “/data/postgresql-15.6/bin/pg_dump -U postgres 数据库名 > 备份文件.sql” |
| 恢复数据库 | su - postgres -c “/data/postgresql-15.6/bin/psql -U postgres 数据库名 < 备份文件.sql” |
六、常见问题与解决方案
6.1 编译报错“config.sub缺失参数”
原因:configure命令中反斜杠后加了空格或注释;缺少debianutils依赖。
解决:1. 确保反斜杠后无任何字符;2. 安装依赖:sudo apt install -y debianutils。
6.2 PostGIS扩展未安装到自定义目录
原因:未配置环境变量,导致PostGIS关联系统默认PG。
解决:编译前执行export PATH=/data/postgresql-15.6/bin:$PATH,或手动复制扩展文件:
sudo cp /usr/local/share/postgresql/extension/postgis* /data/postgresql-15.6/share/extension/
6.3 Navicat连接超时
原因:1. PG未允许远程访问;2. 防火墙未开放端口;3. 服务未启动。
解决:1. 检查postgresql.conf和pg_hba.conf配置;2. 开放5432端口;3. 确保服务正常运行。
6.4 启动服务提示“权限不足”
原因:/data/postgresql-15.6目录归属非postgres用户。
解决:执行sudo chown -R postgres:postgres /data/postgresql-15.6/。
七、总结
本文通过“环境准备-组件安装-配置验证”的流程,实现了Ubuntu24.04系统下PostgreSQL15.6+PostGIS3.4.2+pgRouting3.6.0的完整安装。核心关键点在于:
- 严格控制编译参数,确保组件关联自定义PG目录;
- 正确配置postgres用户权限,避免服务启动问题;
- 完善systemctl服务和远程连接配置,满足生产使用需求。
按照步骤执行可规避90%以上的源码安装问题,若遇到特殊报错,可通过日志排查或参考“常见问题”章节解决。
(注:文档部分内容可能由 AI 生成)
更多推荐
所有评论(0)