2.2.5. 构建和部署PostGIS扩展
如果您使用的是 PostgreSQL 9.1 或更高版本,则会自动构建并安装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
make check 使用 psql 来运行测试,并使用 psql 环境变量。常用的可用于覆盖的有 PGUSER 、PGPORT 和 PGHOST。参考psql环境变量
扩展文件在同一版本的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%' or name LIKE 'address%';
name | default_version | installed_version
------------------------------+-----------------+-------------------
address_standardizer | 3.7.0dev | 3.7.0dev
address_standardizer_data_us | 3.7.0dev | 3.7.0dev
postgis | 3.7.0dev | 3.7.0dev
postgis_raster | 3.7.0dev | 3.7.0dev
postgis_sfcgal | 3.7.0dev |
postgis_tiger_geocoder | 3.7.0dev | 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 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.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_tiger_geocoder
Version | 3.7.0dev
Schema | tiger
Description | PostGIS tiger geocoder and reverse geocoder
-[ RECORD 4 ]-------------------------------------------------
Name | postgis_topology
Version | 3.7.0dev
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.7.0dev版本,你可以通过运行以下命令将其转换为基于扩展的安装方式,以将函数打包到各自的扩展中。在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;