PostgreSQL下载哪个版本最适合GIS开发?Windows/Ubuntu安装配置避坑指南(附:Spatial Extension扩展包)

编程与开发
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

如果你正在纠结“PostgreSQL下载哪个版本最适合GIS开发?Windows/Ubuntu安装配置避坑指南(附:Spatial Extension扩展包)”,这篇文章直接给出面向 GIS 开发的选择建议:优先选择当前仍在官方维护周期内、并且能稳定安装 PostGIS 的 PostgreSQL 版本,不要只看“最新”,更不要随手安装系统仓库里过旧的版本。

PostgreSQL下载哪个版本最适合GIS开发 PostgreSQL安装PostGIS扩展流程图
PostgreSQL 用于 GIS 开发时,版本选择、安装路径和 PostGIS 扩展验证建议放在同一个流程里检查。

引言:GIS开发不是随便下载一个PostgreSQL就能用

普通业务系统使用 PostgreSQL,重点通常是 SQL、索引、事务和备份;而 GIS 开发使用 PostgreSQL,核心还要看 PostGIS 是否能稳定安装、空间索引是否可用、坐标系表是否完整、客户端工具是否匹配。

很多 GIS 初学者的问题不是 PostgreSQL 安装失败,而是安装完成后才发现:

  • 找不到 PostGIS 扩展;
  • pgAdmin 能连接,但 QGIS 读不到空间表;
  • Ubuntu 默认源里的 PostgreSQL 版本太旧;
  • Windows 上 Stack Builder 下载扩展失败;
  • 数据库创建成功,但执行 CREATE EXTENSION postgis; 报错;
  • 开发环境和生产环境版本不一致,后期迁移困难。

所以,本文的目标不是泛泛介绍 PostgreSQL,而是回答一个具体问题:PostgreSQL下载哪个版本最适合GIS开发,以及 Windows 和 Ubuntu 上怎样安装配置才能少踩坑。

背景:PostgreSQL、PostGIS和Spatial Extension是什么关系

在 GIS 语境里,很多人说的 “Spatial Extension 扩展包”,通常指的就是 PostGIS。PostGIS 是 PostgreSQL 的空间扩展,它让 PostgreSQL 能够存储、查询和分析点、线、面、栅格、坐标系等空间数据。

简单理解:

  • PostgreSQL:关系型数据库本体,负责存储和查询数据;
  • PostGIS:空间扩展,提供 geometry、geography、空间函数和空间索引能力;
  • pgAdmin:常用图形化管理工具,不是数据库本体;
  • psql:PostgreSQL 命令行客户端,排错时非常重要;
  • QGIS / ArcGIS Pro / GeoServer:常见 GIS 客户端或服务端,会连接 PostgreSQL/PostGIS 读取空间数据。

因此,GIS 开发选择 PostgreSQL 版本时,不能只看 PostgreSQL 自己,还要同时确认 PostGIS 是否支持该版本、操作系统是否容易安装对应扩展、团队环境是否一致。

原理:PostgreSQL下载哪个版本最适合GIS开发

对大多数 GIS 学生、初级 GIS 工程师、WebGIS 后端开发者来说,PostgreSQL 下载版本建议遵循下面的优先级。

1. 优先选择官方仍维护的稳定主版本

PostgreSQL 每个主版本都有自己的生命周期。GIS 开发环境建议选择官方仍在维护周期内的稳定版本,避免选择已经停止维护的旧版本。

原因很简单:

  • 旧版本安全补丁和兼容性支持有限;
  • 新版本 PostGIS、GDAL、GeoServer、QGIS 连接时可能遇到兼容性问题;
  • 后期数据库迁移、备份恢复和团队协作成本更高。

如果你没有被项目强制限制,通常可以选择当前主流稳定版本或上一个主流稳定版本。不要为了尝鲜在生产 GIS 项目中立即使用刚发布不久的新主版本,除非你已经验证 PostGIS、驱动、备份恢复和业务 SQL 都没问题。

2. GIS开发重点看PostGIS支持情况

判断 PostgreSQL 下载哪个版本最适合 GIS 开发,最关键的一步是确认 PostGIS 能否正常安装。PostGIS 与 PostgreSQL 主版本之间存在支持范围,不是任意组合都能工作。

建议原则:

  • 学习环境:选择安装包中能直接附带 PostGIS 的 PostgreSQL 版本;
  • Windows 环境:优先使用 PostgreSQL 官方 Windows 安装包,并通过 Stack Builder 或独立 PostGIS 安装包安装扩展;
  • Ubuntu 环境:优先使用 PostgreSQL 官方 APT 仓库,避免系统默认源版本过旧;
  • 生产环境:固定 PostgreSQL 主版本和 PostGIS 版本,不要自动滚动升级。

3. 不建议GIS新手安装过旧版本

很多旧教程还在使用 PostgreSQL 9.x、10、11 等版本。除非你在维护历史项目,否则不建议新 GIS 项目继续安装这些旧版本。

常见问题包括:

  • PostGIS 扩展包不好找;
  • 新版本 QGIS、GeoServer 连接时资料少;
  • 函数行为和性能优化与新版本存在差异;
  • 团队成员本机环境难以统一。

4. Windows和Ubuntu版本选择建议

使用场景 推荐选择 原因
GIS入门学习 选择当前主流稳定 PostgreSQL 版本,并安装对应 PostGIS 资料多,工具兼容性好,适合 QGIS 和 GeoServer 练习
Windows桌面开发 使用官方 Windows 安装包 安装流程直观,pgAdmin、psql、服务管理更容易上手
Ubuntu服务器开发 使用 PostgreSQL 官方 APT 仓库 版本可控,适合部署 WebGIS 后端和空间服务
生产环境 选择稳定主版本,锁定小版本和扩展版本 减少升级风险,便于备份、恢复和故障排查
维护老项目 沿用项目原版本,先做迁移测试 避免 PostGIS 函数、索引和数据类型兼容问题

步骤:Windows安装PostgreSQL和PostGIS避坑流程

1. 下载PostgreSQL Windows安装包

Windows 用户建议从 PostgreSQL 官方下载入口获取安装包。安装时注意以下几项:

  • 安装路径不要包含中文和特殊字符;
  • 记住超级用户 postgres 的密码;
  • 默认端口通常是 5432,如果本机已有 PostgreSQL,需要换端口;
  • 建议勾选安装 pgAdmin 和命令行工具;
  • 确认安装完成后系统服务已启动。

对 GIS 开发来说,安装 PostgreSQL 本体只是第一步。真正能否做空间数据库,要看 PostGIS 扩展是否安装成功。

2. 通过Stack Builder安装PostGIS扩展

Windows 安装完成后,通常会提示是否启动 Stack Builder。你可以在里面选择与当前 PostgreSQL 主版本匹配的 PostGIS 扩展。

操作要点:

  1. 打开 Stack Builder;
  2. 选择已经安装的 PostgreSQL 实例;
  3. 在 Spatial Extensions 或类似分类中选择 PostGIS;
  4. 下载并安装对应版本;
  5. 安装完成后重启 PostgreSQL 服务;
  6. 在 pgAdmin 或 psql 中创建数据库并启用扩展。

如果 Stack Builder 下载失败,常见原因是网络连接、镜像访问或代理问题。可以改用可信来源提供的 PostGIS Windows 安装包,但必须确认它匹配你的 PostgreSQL 主版本。

3. 创建GIS数据库并启用PostGIS

安装扩展包后,还需要在具体数据库中启用 PostGIS。PostGIS 不是安装一次所有数据库自动都有,通常需要在目标数据库中执行扩展创建语句。

CREATE DATABASE gis_demo;

连接到 gis_demo 数据库后执行:

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;

一般 GIS 开发中,postgis 是最常用扩展;postgis_topology 只有在需要拓扑模型时才会用到。初学者可以先启用 postgis,不要一开始就把所有扩展都装上。

4. 验证PostGIS是否安装成功

不要只看 pgAdmin 里有没有数据库。建议执行下面的 SQL 验证空间扩展是否真正可用:

SELECT PostGIS_Full_Version();

再测试创建一张点图层表:

CREATE TABLE test_points (
    id serial PRIMARY KEY,
    name text,
    geom geometry(Point, 4326)
);

INSERT INTO test_points (name, geom)
VALUES ('demo point', ST_SetSRID(ST_MakePoint(116.391, 39.907), 4326));

CREATE INDEX test_points_geom_idx
ON test_points
USING GIST (geom);

如果上面 SQL 能正常执行,并且 QGIS 能连接并加载 test_points,说明 PostgreSQL GIS 开发环境基本可用。

步骤:Ubuntu安装PostgreSQL和PostGIS避坑流程

1. 不要盲目使用系统默认源

Ubuntu 自带软件源中通常会提供 PostgreSQL,但版本不一定是你想要的。GIS 开发尤其要注意:如果数据库版本过旧,对应 PostGIS 包也可能偏旧。

建议先查看当前可安装版本:

apt-cache policy postgresql
apt-cache policy postgis

如果默认源版本不符合项目要求,可以使用 PostgreSQL 官方 APT 仓库。生产环境中添加仓库前,应先确认公司或项目的运维规范。

2. 安装PostgreSQL与PostGIS包

以 Ubuntu 环境为例,常见安装思路如下。具体版本号要根据你的目标 PostgreSQL 主版本调整。

sudo apt update
sudo apt install postgresql postgresql-contrib postgis

如果你使用的是指定主版本,通常需要安装对应版本的 PostGIS 包,例如类似下面的包名形式:

sudo apt install postgresql-XX postgresql-XX-postgis-3

这里的 XX 代表 PostgreSQL 主版本号。实际安装前请用下面命令确认包名:

apt-cache search postgis
apt-cache search postgresql | grep postgis

3. 配置postgres用户和数据库

Ubuntu 安装后,系统通常会创建 postgres Linux 用户和 PostgreSQL 超级用户。你可以切换到该用户执行管理命令:

sudo -i -u postgres
psql

创建 GIS 数据库和业务用户:

CREATE USER gis_user WITH PASSWORD '请替换为强密码';
CREATE DATABASE gis_demo OWNER gis_user;

连接到数据库并启用 PostGIS:

c gis_demo
CREATE EXTENSION postgis;
SELECT PostGIS_Full_Version();

4. 配置远程连接

如果 PostgreSQL 只在本机使用,默认配置通常够用。如果 QGIS、GeoServer 或 WebGIS 后端在另一台机器上,需要配置远程连接。

主要检查两个文件:

  • postgresql.conf:控制监听地址;
  • pg_hba.conf:控制哪些客户端可以用什么认证方式连接。

常见配置思路如下:

listen_addresses = '*'

pg_hba.conf 中添加允许指定网段访问的规则:

host    gis_demo    gis_user    192.168.1.0/24    scram-sha-256

修改配置后重启服务:

sudo systemctl restart postgresql

注意,开放远程连接时不要直接允许所有公网 IP 访问数据库。GIS 数据库往往包含项目范围、地块、管线、影像索引等敏感空间数据,安全配置必须谨慎。

常见坑:PostgreSQL安装GIS环境最容易出错的地方

1. PostgreSQL装好了,但CREATE EXTENSION postgis报错

这通常说明 PostGIS 扩展包没有安装,或者安装的 PostGIS 与 PostgreSQL 主版本不匹配。

排查方法:

  • 确认当前连接的是目标数据库,不是默认的 postgres 数据库;
  • Windows 检查 Stack Builder 是否安装了对应版本 PostGIS;
  • Ubuntu 检查是否安装了 postgresql-XX-postgis-3 这类包;
  • 执行 SELECT version(); 查看 PostgreSQL 主版本;
  • 执行 SELECT * FROM pg_available_extensions WHERE name LIKE 'postgis%'; 查看可用扩展。

2. QGIS连接成功,但看不到空间表

QGIS 能连接 PostgreSQL,不代表空间图层一定可见。常见原因包括:

  • 表里没有 geometry 或 geography 字段;
  • geometry 字段没有正确 SRID;
  • 表没有主键;
  • 当前数据库用户没有表权限;
  • 空间表在非 public schema 中,但 QGIS 没有展开对应 schema。

建议用下面 SQL 检查空间字段:

SELECT f_table_schema, f_table_name, f_geometry_column, srid, type
FROM geometry_columns;

3. 端口5432被占用

Windows 上经常因为之前安装过 PostgreSQL、Postgres.app、Docker 或其他软件导致 5432 端口被占用。安装时如果提示端口不可用,可以改为 5433,但要记住客户端连接也要同步修改端口。

在 Ubuntu 上可以检查监听端口:

sudo ss -lntp | grep 5432

4. 忘记postgres密码

Windows 安装时设置的 postgres 密码一定要保存。忘记后虽然可以通过修改认证方式重置,但对新手来说很容易把 pg_hba.conf 改乱。

建议做法:

  • 安装时记录密码到安全的密码管理工具;
  • 项目开发不要长期使用超级用户 postgres
  • 为每个项目创建单独数据库和普通业务用户。

5. 生产环境随意升级PostgreSQL主版本

PostgreSQL 主版本升级不是普通软件更新。GIS 数据库通常包含空间索引、扩展、函数依赖、视图和服务端连接配置,升级前必须测试。

至少要检查:

  • PostGIS 扩展是否支持目标版本;
  • 备份恢复是否成功;
  • 空间索引是否需要重建;
  • GeoServer、QGIS、ArcGIS Pro、后端程序连接是否正常;
  • 业务 SQL 中的空间函数结果是否一致。

方法比较:Windows安装、Ubuntu安装和Docker安装怎么选

方式 适合人群 优点 注意事项
Windows安装包 GIS初学者、桌面端QGIS用户 安装直观,pgAdmin友好,适合学习 PostGIS扩展要匹配版本,注意端口和服务
Ubuntu APT安装 WebGIS开发、服务器部署 适合长期运行,服务管理清晰 注意源版本、远程连接和权限配置
Docker安装 开发团队、测试环境、CI流程 环境可复现,便于快速启动和销毁 要处理数据卷、备份、网络和镜像版本固定
源码编译 高级用户、特殊环境 可定制能力强 维护成本高,不建议新手用于常规GIS开发

如果你只是学习 QGIS 连接空间数据库,Windows 安装包最省心。如果你要部署 GeoServer、矢量瓦片服务、空间分析 API,Ubuntu 更接近真实服务器环境。如果你在团队中开发 WebGIS 后端,Docker 可以帮助统一 PostgreSQL 和 PostGIS 版本。

检查清单:安装完成后必须验证这几项

PostgreSQL 下载和安装完成后,不要急着导入项目数据。建议按下面清单逐项检查。

  • 确认 PostgreSQL 服务已启动;
  • 确认能用 psql 或 pgAdmin 连接数据库;
  • 确认当前数据库已执行 CREATE EXTENSION postgis;
  • 执行 SELECT PostGIS_Full_Version(); 查看扩展版本;
  • 创建 geometry 字段并插入测试点;
  • 为空间字段创建 GiST 索引;
  • 用 QGIS 连接 PostgreSQL 并加载测试图层;
  • 检查 SRID 是否正确,例如常见经纬度坐标使用 EPSG:4326;
  • 检查业务用户权限,不要长期使用超级用户;
  • 记录 PostgreSQL 主版本、PostGIS 版本、端口、安装路径和备份策略。

一个最小可用的 GIS 数据库验证 SQL 如下:

SELECT version();
SELECT PostGIS_Full_Version();

CREATE TABLE gis_check (
    id serial PRIMARY KEY,
    name text,
    geom geometry(Point, 4326)
);

INSERT INTO gis_check (name, geom)
VALUES ('check point', ST_SetSRID(ST_Point(120.0, 30.0), 4326));

CREATE INDEX gis_check_geom_idx
ON gis_check
USING GIST (geom);

SELECT id, name, ST_AsText(geom), ST_SRID(geom)
FROM gis_check;

FAQ:PostgreSQL GIS开发版本选择常见问题

1. PostgreSQL下载哪个版本最适合GIS开发?

一般建议选择官方仍维护的主流稳定版本,并确认对应 PostGIS 能顺利安装。对新项目来说,不建议选择过旧版本;对生产项目来说,也不建议未测试就使用刚发布的新主版本。

2. PostGIS是不是PostgreSQL自带的?

不是。PostGIS 是 PostgreSQL 的空间扩展,需要额外安装扩展包,并在具体数据库中执行 CREATE EXTENSION postgis; 才能使用。

3. Windows安装PostgreSQL后为什么找不到PostGIS?

常见原因是只安装了 PostgreSQL 本体,没有通过 Stack Builder 或其他安装包安装 PostGIS。还要确认 PostGIS 版本与 PostgreSQL 主版本匹配。

4. Ubuntu默认源里的PostgreSQL能不能用于GIS开发?

可以,但要先确认版本是否符合项目要求,以及是否能安装对应 PostGIS 包。如果默认源版本过旧,建议使用 PostgreSQL 官方 APT 仓库或项目指定的软件源。

5. QGIS连接PostgreSQL需要安装PostGIS吗?

如果只是连接普通表,不一定需要 PostGIS。但如果要在 QGIS 中读取点、线、面空间图层,通常需要 PostgreSQL 数据库启用 PostGIS,并正确创建 geometry 或 geography 字段。

6. PostgreSQL和PostGIS升级时要注意什么?

升级前必须备份数据库,并在测试环境验证 PostGIS 扩展、空间索引、视图、函数、QGIS连接、GeoServer图层发布和后端程序查询。不要在生产 GIS 数据库上直接尝试主版本升级。

结论:GIS开发选PostgreSQL版本,看稳定性和PostGIS兼容性

回到最初的问题:PostgreSQL下载哪个版本最适合GIS开发?答案不是简单追最新,而是选择官方仍维护、生态稳定、PostGIS支持明确、团队容易统一的版本。

Windows 用户优先使用官方安装包加 PostGIS 扩展,适合学习和桌面 GIS 开发;Ubuntu 用户建议关注软件源版本和服务配置,适合 WebGIS 后端、GeoServer 和生产部署;团队项目则应固定 PostgreSQL 与 PostGIS 版本,避免开发、测试、生产环境不一致。

只要你完成了版本确认、PostGIS安装、扩展启用、空间表测试、QGIS连接验证这几步,PostgreSQL 就可以作为一个可靠的 GIS 空间数据库基础环境使用。