本章介绍安装 PostGIS 所需的步骤。
如果所有依赖项都在路径中,请按如下方式编译:
tar -xvzf postgis-3.7.0dev.tar.gz cd postgis-3.7.0dev ./configure make make install
安装 PostGIS 后,您需要使每个数据库可用(Section 3.3, “创建空间数据库”)或升级它(Section 3.4, “升级空间数据库”)。
|
|
|
现在许多操作系统都包含 PostgreSQL/PostGIS 的预构建包。 在许多情况下,只有当您想要最前沿的版本或者您是软件包维护者时才需要编译。 本节提供一般编译过程。 如果您正在针对Windows或其他操作系统进行编译,则可以在PostGIS 用户编译指南或PostGIS开发Wiki中找到更详细的帮助。 可以在 PostGIS 预构建包中找到许多操作系统的PostGIS 预构建包列表 如果您是 Windows 用户,您可以通过 Stackbuilder 或 PostGIS Windows下载站点获得稳定的版本。我们还有非常前沿的Windows实验性版本,通常每周构建一次,或者在有令人兴奋的新变化发生时构建。你可以使用这些版本来尝试正在进行中的PostGIS发布 |
PostGIS模块是PostgreSQL后台服务器的扩展。在PostGIS 3.7.0dev中,为了编译, 必须 提供完整的PostgreSQL服务器头文件。它可以在PostgreSQL 14 - 18版本之间构建。旧版本的PostgreSQL 不再支持。
如果您没有安装 PostgreSQL,请参阅PostgreSQL安装指南。它位于 https://www.postgresql.org 。
|
|
|
对于GEOS功能,当您安装PostgresQL时,您可能需要将PostgreSQL显式链接到标准C++库: LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE] 这是解决与旧开发工具不正常交互的虚假C++异常的一种变通方法。如果你遇到奇怪的问题(例如,后端意外关闭或类似的问题),尝试这个技巧。当然,这将需要重新从头编译你的PostgreSQL。 |
下一步是概述 PostGIS 源配置和编译。 这些是为Linux用户编写的,不适用于Windows或Mac。
从下载站点 https://postgis.net/stuff/postgis-3.7.0dev.tar.gz 获取源代码的存档
wget https://postgis.net/stuff/postgis-3.7.0dev.tar.gz tar -xvzf postgis-3.7.0dev.tar.gz cd postgis-3.7.0dev
这将在当前工作目录中创建一个名为 postgis-3.7.0dev 的目录。
或者从 git 存储库 https://git.osgeo.org/gitea/postgis/postgis/ 中查看它。
git clone https://git.osgeo.org/gitea/postgis/postgis.git postgis
cd postgis
sh autogen.sh
切换到新创建的 postgis目录以继续安装。
./configure
要构建和使用 PostGIS,您需要:
不可缺少
PostgreSQL 14 - 18. 需要完整安装 PostgreSQL(包括服务器头文件)。可从 https://www.postgresql.org 获取18。
请参阅 https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS 中完整的 PostgreSQL/PostGIS 和 PostGIS/GEOS 支持表
GNU C 编译器 (gcc)。其他一些 ANSI C 编译器也可以用来编译PostGIS,但使用gcc编译时我们发现问题要少得多。
GNU Make(gmake or make)。对于许多系统,GNU make是 make 的默认版本。通过调用make -v检查版本。 其他版本的make可能无法正确处理 PostGIS Makefile。
Proj投影转换库 。需要 Proj 6.1 及以上版本。Proj 库用于 PostGIS 中提供坐标重投影支持。Proj 可以从 https://proj.org/ 下载。
GEOS 几何库,版本需为 3.8.0 或更高,但建议使用 GEOS 3.14 及以上版本,以充分利用所有新函数和特性。可从 https://libgeos.org 下载。
LibXML2、2.5.x 或更高版本。 目前,导入函数(ST_GeomFromGML和ST_GeomFromKML)使用 LibXML2。 您可以从 https://gitlab.gnome.org/GNOME/libxml2/-/releases 下载 LibXML2。
JSON-C 0.9或更高版本。JSON-C 目前用于按 ST_GeomFromGeoJson 导入 GeoJSON。 JSON-C 可从 https://github.com/json-c/json-c/releases/ 下载。
推荐使用 GDAL 3 以上版本。此版本对于栅格功能是必需的。更多信息请参阅https://gdal.org/download.html。
要使用PostgreSQL+JIT进行编译,需要LLVM版本6或更高版本。请参阅 https://trac.osgeo.org/postgis/ticket/4125。
可选择的
GDAL(伪可选)仅当您不需要栅格时才可以将其省略。另请确保启用您要使用的驱动程序,如Section 3.2, “配置栅格支持”中所述。
GTK(需要 GTK+2.0, 2.8+)。用于编译shp2pgsql-gui,一个shapefile loader。它位于 http://www.gtk.org/ 。
SFCGAL 需要 1.4.1 或更高版本,若要完整使用全部功能则需要 2.1+。SFCGAL 可为 PostGIS 提供额外的 2D / 3D 高级分析函数(参见 Chapter 8, SFCGAL函数参考),并且在某些 2D 函数(例如 ST_Intersection、ST_Area 等同时由两个后端提供的函数)上,可以选择使用 SFCGAL 来替代 GEOS。若已安装 SFCGAL,PostgreSQL 配置变量 postgis.backend 可用于控制使用哪个后端(默认是 GEOS)。注意:SFCGAL 1.2 至少需要 CGAL 4.3 和 Boost 1.54(参考 https://sfcgal.org 和 https://gitlab.com/sfcgal/SFCGAL/)。
要启用ST_AsMVT,您需要ProtoBuf-C库(运行时)和ProtoC-C编译器(构建时)。要检查 protobuf-c 的正确最低版本,需要 pkg-config。 参见protobuf-c。默认情况下,PostGIS 使用 Wagyu 快速评估 MVT 多边形,但需要 C++11 编译器。 使用 CXXFLAGS 使用您用于 PostgreSQL 安装的相同编译器。如果要禁用此功能并改用 GEOS,请在配置期间指定它。 --without-wagyu。
CUnit(CUnit)。 这是回归测试所需要的。 http://cunit.sourceforge.net/
DocBook (xsltproc)构建文档需要。Docbook可从 http://www.docbook.org/ 获取。
DBLatex (dblatex)需要以 PDF 格式构建文档。它位于 http://dblatex.sourceforge.net/ 。
GraphicsMagick (gm convert) is required to generate the images used in the documentation. If GraphicsMagick is unavailable, ImageMagick (convert or magick convert) provides the same command-line syntax. GraphicsMagick is available from http://www.graphicsmagick.org/ and ImageMagick from https://imagemagick.org/ .
与大多数 Linux 安装一样,第一步是生成一个将用于构建源代码的 Makefile。 这是通过 shell 脚本完成的
./configure
如果未提供任何参数,此命令将自动查找在系统上构建 PostGIS 源代码所需的组件和库。./configure 是一种常见的用法,但它接受一些参数,以防您在非标准位置拥有必要的库或程序。
以下列表显示了常用参数:有关完整列表,请使用 --help 或 --help=short参数。
--with-library-minor-version
从 PostGIS 3.0 开始,默认生成的库文件将不再将次要版本作为文件名的一部分。 这意味着所有 PostGIS 3 库都将以 postgis-3 结尾。 这样做是为了使 pg_upgrade 更容易,缺点是您只能在服务器中安装一个版本的 PostGIS 3 系列。 要获取文件的旧行为(包括次要版本):例如 postgis-3.0 将此开关添加到您的配置语句中。
--prefix=PREFIX
指定要安装 PostGIS 库和 SQL 脚本的位置。 默认情况下,它将与检测到的 PostgreSQL 安装位置相同。
|
|
|
此参数当前已损坏,只会安装在PostgreSQL的位置。有关此错误的跟踪,请参阅 http://trac.osgeo.org/postgis/ticket/635 。 |
--with-pgconfig=FILE
PostgreSQL有一个名为pg_config的实用程序,使PostGIS等扩展能够定位PostgreSQL安装目录。使用此参数 (--with-pgconfig=/path/to/pg_config)可以手动指定 PostGIS 的特定 PostgreSQL 的安装目录。
--with-gdalconfig=FILE
GDAL是必需的库,提供栅格支持 gdal-config所需的功能,以使软件安装能够找到 GDAL装目录。使用此参数 (--with-gdalconfig=/path/to/gdal-config)手动指定 PostGIS 将针对其构建的特定 GDAL的安装目录。
--with-geosconfig=FILE
作为一个基本的几何库,GEOS 有一个名为 geos-config的实用程序,它会告诉您在安装软件时在哪里安装 GEOS。使用此参数 (--with-geosconfig=/path/to/geos-config) 手动指定要用于 PostGIS 构建的特定 GEOS的安装目录。
--with-xml2config=FILE
LibXML 是执行 GeomFromKML/GML 过程所需的库。通常情况下,如果您已安装 libxml,它将被找到,但如果没有或者您想使用特定版本,您需要指定一个特定的 xml2-config 配置文件,以便让软件安装程序找到 LibXML 安装目录。使用这个参数 (>--with-xml2config=/path/to/xml2-config) 来手动指定 PostGIS 将构建的特定 LibXML 安装。
--with-projdir=DIR
Proj是PostGIS必不可少的投影库。使用此参数 (--with-projdir=/path/to/projdir)手动指定要用于 PostGIS 构建的特定 Proj 的安装目录。
--with-libiconv=DIR
iconv的安装目录。
--with-jsondir=DIR
JSON-C 是 MIT 许可的 JSON 库,是 PostGIS ST_GeomFromJSON 所必需的。使用此参数 (--with-jsondir=/path/to/jsondir) 手动指定要用于 PostGIS 构建的特定 JSON-C的安装目录。
--with-gui
编译数据导入GUI(需要 GTK+2.0)。此参数为 shp2pgsql 创建一个名为 shp2pgsql-gui 的图形用户界面。
--without-raster
在没有栅格功能的情况下进行编译。
--without-topology
不编译 topology 支持。
--with-gettext=no
默认情况下,会检测 gettext 并使用它进行编译,但如果在导致加载程序损坏的不兼容问题下运行,则此命令可以禁用它。使用此功能的配置可以解决的问题示例,请参见http://trac.osgeo.org/postgis/ticket/748。 注意:关闭此功能不会消除许多功能。 它用于 GUI 加载器中的内部帮助/标签功能,这些功能尚未记录,处于实验阶段。
--with-sfcgal=PATH
默认情况下,如果没有此开关,PostGIS 将不会安装 sfcgal 支持。 PATH 是一个可选参数,允许指定 sfcgal-config 的备用 PATH。
--without-phony-revision
禁用 postgis_revision.h 更新以匹配 Git 存储库中的当前 HEAD。
|
|
|
如果要从代码存储库 获取PostGIS,请先运行以下脚本 ./autogen.sh 此脚本生成配置脚本。这用于自定义 PostGIS 安装。 如果要获取 PostGIS 作为存档文件,则无需./autogen.sh,因为 配置已经生成。 |
生成Makefile后,构建PostGIS就像运行命令一样简单
make
如果在输出的最后一行看到“PostGIS was built successfully. Ready to install.”,则表示您已完成
所有函数的注释都是根据文档自动生成的。如果你之后想把这些注释安装到自己的空间数据库里,需要运行依赖 docbook 的命令来导入注释。不过,如果是从 tar.gz 包安装,doc 目录里已经包含了 postgis_comments.sql 等注释文件,就不需要再额外生成了;另外,通过 CREATE EXTENSION 安装时,这些注释也会一并包含在内。
make comments
The make cheatsheets target generates html cheat sheets suitable for quick reference or for student handouts. This requires xsltproc to build and will generate 4 files in doc folder topology_cheatsheet.html, raster_cheatsheet.html, postgis_cheatsheet.html
预构建的HTML和PDF版本可以在PostGIS / PostgreSQL学习指南中找到
make cheatsheets
当 PostgreSQL 提供扩展支持时,PostGIS 扩展会被自动构建并安装。
如果要从源存储库构建,则必须先构建函数描述。这些是在安装文档手册时构建的。 您也可以手动安装:
make comments
如果从存档文件构建,则其中一些注释文件已经构建,因此无需构建注释。
如果您针对 PostgreSQL 9.1 进行构建,则应在 make 安装过程中自动构建扩展。如果需要,可以从扩展文件夹生成,或者根据需要在另一台服务器上复制该文件。
cd extensions cd postgis make clean make export PGUSER=postgres #overwrite psql variables make check #to test before install make install # to test extensions make check RUNTESTFLAGS=--extension
|
|
|
|
扩展文件在同一版本的PostGIS中始终是相同的,无论操作系统如何。只要已经安装了PostGIS二进制文件,就可以将扩展文件从一个操作系统复制到另一个操作系统。
如果您想在与开发环境不同的另一台服务器上手动安装扩展,除了通常需要的PostGIS二进制文件之外,还需要将以下文件从 extensions 文件夹复制到 PostgreSQL 安装目录下的 PostgreSQL/share/extension 文件夹中。
指定未提供时,控制文件postgis.control, postgis_topology.control 显示要安装的扩展版本等信息。
请注意,针对每个扩展的 /sql 文件夹中的所有文件(例如,extensions/postgis/sql/*.sql 和 extensions/postgis_topology/sql/*.sql)需要复制到 PostgreSQL 的 share/extension 文件夹的最上层
完成这一步后,你应该在 PgAdmin> 中看到 postgis、postgis_topology 作为可用的扩展。
如果使用 psql,则可以运行以下查询来验证是否已安装扩展:
SELECT name, default_version, installed_version
FROM pg_available_extensions WHERE name LIKE 'postgis%';
name | default_version | installed_version
------------------------------+-----------------+-------------------
postgis | 3.7.0dev | 3.7.0dev
postgis_raster | 3.7.0dev | 3.7.0dev
postgis_sfcgal | 3.7.0dev |
postgis_topology | 3.7.0dev |
(6 rows)
如果您正在查询的数据库中安装了扩展程序,您将在 installed_version 列中看到提及。 如果您没有收到任何记录,则意味着您的服务器上根本没有安装 postgis 扩展。 PgAdmin III 1.14+ 还将在数据库浏览器树的扩展 部分中提供此信息,甚至允许通过右键单击进行升级或卸载。
如果您有有效的扩展,则可以使用 pgAdmin 扩展接口或通过运行以下 SQL 将 PostGIS 扩展安装到所选数据库:
CREATE EXTENSION postgis; CREATE EXTENSION postgis_raster; CREATE EXTENSION postgis_sfcgal; CREATE EXTENSION postgis_topology;
在 psql 中,你可以使用以下命令来查看你已安装的版本以及它们所在的模式。
\connect mygisdb \x \dx postgis*
List of installed extensions -[ RECORD 1 ]------------------------------------------------- Name | postgis Version | 3.7.0dev Schema | public Description | PostGIS geometry, geography, and raster spat.. -[ RECORD 2 ]------------------------------------------------- Name | postgis_raster Version | 3.0.0dev Schema | public Description | PostGIS raster types and functions -[ RECORD 3 ]------------------------------------------------- Name | postgis_topology Version | 3.7.0dev Schema | topology Description | PostGIS topology spatial types and functions
|
|
|
扩展表 |
如果你在没有使用扩展系统的情况下安装了3.7.0dev版本,你可以通过运行以下命令将其转换为基于扩展的安装方式,以将函数打包到各自的扩展中。在PostgreSQL 13中已移除了使用`unpackaged`安装方式,因此建议在升级到PostgreSQL 13之前切换到扩展构建方式。
CREATE EXTENSION postgis FROM unpackaged; CREATE EXTENSION postgis_raster FROM unpackaged; CREATE EXTENSION postgis_topology FROM unpackaged;
要测试 PostGIS,请运行以下命令
make check
此命令使用针对实际 PostgreSQL 数据库生成的库执行各种检查和回归测试。
|
|
|
如果您使用非标准 PostgreSQL、GEOS 或 Proj 位置配置 PostGIS,则可能需要将它们的库位置添加到 |
|
|
|
目前,make check 依赖于 |
|
|
|
沙箱式构建账号(非 PostgreSQL 超级用户)在回归测试周期中,可以通过导出 这些变量的作用是:在目标 PostgreSQL 实例允许这些委托角色安装扩展的前提下,让自动化环境在不把调用账号提升为超级用户的情况下,依然能够走完整的升级路径和扩展安装流程。 |
如果成功,make check 将产生近 500 个测试的输出。结果将类似于 以下(下面省略了许多行):
CUnit - A unit testing framework for C - Version 2.1-3
http://cunit.sourceforge.net/
.
.
.
Run Summary: Type Total Ran Passed Failed Inactive
suites 44 44 n/a 0 0
tests 300 300 300 0 0
asserts 4215 4215 4215 0 n/a
Elapsed time = 0.229 seconds
.
.
.
Running tests
.
.
.
Run tests: 134
Failed: 0
-- if you build with SFCGAL
.
.
.
Running tests
.
.
.
Run tests: 13
Failed: 0
-- if you built with raster support
.
.
.
Run Summary: Type Total Ran Passed Failed Inactive
suites 12 12 n/a 0 0
tests 65 65 65 0 0
asserts 45896 45896 45896 0 n/a
.
.
.
Running tests
.
.
.
Run tests: 101
Failed: 0
-- topology regress
.
.
.
Running tests
.
.
.
Run tests: 51
Failed: 0
-- if you built --with-gui, you should see this too
CUnit - A unit testing framework for C - Version 2.1-2
http://cunit.sourceforge.net/
.
.
.
Run Summary: Type Total Ran Passed Failed Inactive
suites 2 2 n/a 0 0
tests 4 4 4 0 0
asserts 4 4 4 0 n/a
输出应类似于以下内容:
============== dropping database "contrib_regression" ============== DROP DATABASE ============== creating database "contrib_regression" ============== CREATE DATABASE ALTER DATABASE ============== installing fuzzystrmatch ============== CREATE EXTENSION ============== installing postgis ============== CREATE EXTENSION ============== running regression test queries ============== test test-normalize_address ... ok ===================== All 2 tests passed. =====================
要安装 PostGIS,请运行以下命令
make install
这会将 PostGIS 安装文件复制到由--prefix参数指定的相应子目录。以下是值得注意的子目录:
加载程序和转储程序二进制文件安装在 [prefix]/bin。
SQL 文件(例如 postgis.sql)安装在 [prefix]/share/contrib 中。
PostGIS 库安装在[prefix]/lib。
如果之前生成了make 注释,请运行以下命令来安装这些 SQL 文件:postgis_comments.sql,raster_comments.sql
make comments-install
|
|
|
|
当安装或升级未按预期进行时,需要检查一些事项。
请确保已安装 PostgreSQL14 或更新版本,并且你正在使用与正在运行的 PostgreSQL 版本相同的 PostgreSQL 源代码进行编译。当你的(Linux)发行版已经安装了 PostgreSQL,或者以其他方式安装了 PostgreSQL 但忘记了时,可能会出现混淆。PostGIS 只能与 PostgreSQL14 或更新版本一起使用,如果使用较旧版本,可能会出现奇怪且意想不到的错误消息。要检查正在运行的 PostgreSQL 版本,可以使用 psql 连接到数据库并运行以下查询:
SELECT version();
如果您运行的是基于 RPM 的发行版,则可以使用rpm命令检查是否存在带有 rpm -qa | grep postgresql的预安装软件包
如果升级失败,请确保还原到已安装PostGIS的数据库。
SELECT postgis_full_version();
此外,请检查配置是否正确检测到 PostgreSQL、Proj4 库和 GEOS 库的安装位置。
配置的输出用于生成 postgis_config.h 文件。检查POSTGIS_PGSQL_VERSION, POSTGIS_PROJ_VERSION和POSTGIS_GEOS_VERSION变量是否已正确设置。