2.2.5. 构建 PostGIS 扩展并部署它们
如果您使用的是 PostgreSQL 9.1+,则会自动构建和安装 PostGIS 扩展。
如果您是从源代码存储库构建,则需要首先构建函数描述。如果您安装了 docbook,则会构建这些描述。您也可以使用语句手动构建
make comments
如果您是从发行版 tar 包构建,则无需构建注释,因为这些注释已预先打包在 tar 包中。
这些扩展应自动构建为 make install 过程的一部分。如果需要,您可以从扩展文件夹构建,或者如果需要在不同的服务器上使用,则可以复制文件。
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
make check 使用 psql 运行测试,因此可以使用 psql 环境变量。常用的可覆盖变量包括 PGUSER、PGPORT 和 PGHOST。请参阅 psql 环境变量
扩展文件对于相同版本的 PostGIS 和 PostgreSQL 始终相同,无论操作系统是什么,因此只要您的服务器上已经安装了 PostGIS 二进制文件,就可以将扩展文件从一个操作系统复制到另一个操作系统。
如果您想在与开发环境不同的单独服务器上手动安装扩展,则需要将以下文件从 extensions 文件夹复制到 PostgreSQL 安装的 PostgreSQL / share / extension 文件夹中,以及 regular PostGIS 所需的二进制文件(如果您的服务器上还没有这些文件)。
这些是控制文件,用于表示信息,例如要安装的扩展版本(如果未指定)。 postgis.control, postgis_topology.control。
每个扩展的 /sql 文件夹中的所有文件。请注意,这些文件需要复制到 PostgreSQL share/extension 文件夹的根目录 extensions/postgis/sql/*.sql、extensions/postgis_topology/sql/*.sql
完成此操作后,您应该会在 PgAdmin -> 扩展中看到可用的 postgis 和 postgis_topology 扩展。
如果您使用的是 psql,则可以通过运行以下查询来验证是否安装了扩展
SELECT name, default_version,installed_version
FROM pg_available_extensions WHERE name LIKE 'postgis%' or name LIKE 'address%';
name | default_version | installed_version
------------------------------+-----------------+-------------------
address_standardizer | 3.5.2dev | 3.5.2dev
address_standardizer_data_us | 3.5.2dev | 3.5.2dev
postgis | 3.5.2dev | 3.5.2dev
postgis_raster | 3.5.2dev | 3.5.2dev
postgis_sfcgal | 3.5.2dev |
postgis_tiger_geocoder | 3.5.2dev | 3.5.2dev
postgis_topology | 3.5.2dev |
(6 rows)
如果您在查询的数据库中安装了该扩展,您将在 installed_version 列中看到相关信息。如果您没有收到任何记录,则表示您根本没有在服务器上安装 postgis 扩展。 PgAdmin III 1.14+ 还将在数据库浏览器树的 extensions 部分中提供此信息,甚至允许通过右键单击来升级或卸载。
如果您有可用的扩展,您可以使用 pgAdmin 扩展接口或运行以下 sql 命令在您选择的数据库中安装 postgis 扩展
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_raster;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION fuzzystrmatch; --needed for postgis_tiger_geocoder
--optional used by postgis_tiger_geocoder, or can be used standalone
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION postgis_topology;
在 psql 中,您可以使用来查看您安装的版本以及它们安装的架构。
\connect mygisdb
\x
\dx postgis*
List of installed extensions
-[ RECORD 1 ]-------------------------------------------------
Name | postgis
Version | 3.5.2dev
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_tiger_geocoder
Version | 3.5.2dev
Schema | tiger
Description | PostGIS tiger geocoder and reverse geocoder
-[ RECORD 4 ]-------------------------------------------------
Name | postgis_topology
Version | 3.5.2dev
Schema | topology
Description | PostGIS topology spatial types and functions
扩展表 spatial_ref_sys、layer、topology 不能显式备份。它们只能在备份相应的 postgis 或 postgis_topology 扩展时才能备份,而这似乎只发生在备份整个数据库时。从 PostGIS 2.0.1 开始,只有未与 PostGIS 打包的 srid 记录会在备份数据库时备份,因此不要随意更改我们打包的 srid,并期望您的更改保留在那里。如果您发现问题,请提交工单。扩展表的结构永远不会备份,因为它们是使用 CREATE EXTENSION 创建的,并且对于给定版本的扩展假定它们是相同的。这些行为已构建到当前的 PostgreSQL 扩展模型中,因此我们对此无能为力。
如果您在未利用我们出色的扩展系统的情况下安装了 3.5.2dev,则可以通过运行以下命令将其更改为基于扩展的,以将函数打包到其各自的扩展中。在 PostgreSQL 13 中删除了使用 `unpackaged` 进行安装,因此建议您在升级到 PostgreSQL 13 之前切换到扩展构建。
CREATE EXTENSION postgis FROM unpackaged;
CREATE EXTENSION postgis_raster FROM unpackaged;
CREATE EXTENSION postgis_topology FROM unpackaged;
CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged;