Chapter 2. PostGIS 安装

Table of Contents

本章介绍安装 PostGIS 所需的步骤。

2.1. 简短版本

如果所有依赖项都在路径中,请按如下方式编译:

tar -xvzf postgis-3.7.0dev.tar.gz
cd postgis-3.7.0dev
./configure
make
make install

安装 PostGIS 后,您需要使每个数据库可用(Section 3.3, “创建空间数据库”)或升级它(Section 3.4, “升级空间数据库”)。

2.2. 从源代码编译和安装

[Note]

现在许多操作系统都包含 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

[Note]

对于GEOS功能,当您安装PostgresQL时,您可能需要将PostgreSQL显式链接到标准C++库:

LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE]

这是解决与旧开发工具不正常交互的虚假C++异常的一种变通方法。如果你遇到奇怪的问题(例如,后端意外关闭或类似的问题),尝试这个技巧。当然,这将需要重新从头编译你的PostgreSQL。

下一步是概述 PostGIS 源配置和编译。 这些是为Linux用户编写的,不适用于Windows或Mac。

2.2.1. 获取源代码

从下载站点 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

2.2.2. 安装要求

要构建和使用 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.orghttps://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/ .

2.2.3. 构建配置

与大多数 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 安装位置相同。

[Caution]

此参数当前已损坏,只会安装在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-tiger

禁用 tiger geocoder 支持。

--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。

[Note]

如果要从代码存储库 获取PostGIS,请先运行以下脚本

./autogen.sh

此脚本生成配置脚本。这用于自定义 PostGIS 安装。

如果要获取 PostGIS 作为存档文件,则无需./autogen.sh,因为 配置已经生成。

2.2.4. 构建

生成Makefile后,构建PostGIS就像运行命令一样简单

make

如果在输出的最后一行看到“PostGIS was built successfully. Ready to install.”,则表示您已完成

所有函数的注释都是根据文档自动生成的。如果你之后想把这些注释安装到自己的空间数据库里,需要运行依赖 docbook 的命令来导入注释。不过,如果是从 tar.gz 包安装,doc 目录里已经包含了 postgis_comments.sql 等注释文件,就不需要再额外生成了;另外,通过 CREATE EXTENSION 安装时,这些注释也会一并包含在内。

make comments

make cheatsheets 目标会生成 HTML 格式的速查表,适合快速查阅或教学讲义使用。这一步需要 xsltproc 来构建,并会在 doc 目录下生成 4 个文件:topology_cheatsheet.htmltiger_geocoder_cheatsheet.htmlraster_cheatsheet.htmlpostgis_cheatsheet.html

预构建的HTML和PDF版本可以在PostGIS / PostgreSQL学习指南中找到

make cheatsheets

2.2.5. 构建和部署PostGIS扩展

当 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
[Note]

make check 使用 psql 来运行测试,并使用 psql 环境变量。常用的可用于覆盖的有 PGUSERPGPORTPGHOST。参考psql环境变量

扩展文件在同一版本的PostGIS中始终是相同的,无论操作系统如何。只要已经安装了PostGIS二进制文件,就可以将扩展文件从一个操作系统复制到另一个操作系统。

如果您想在与开发环境不同的另一台服务器上手动安装扩展,除了通常需要的PostGIS二进制文件之外,还需要将以下文件从 extensions 文件夹复制到 PostgreSQL 安装目录下的 PostgreSQL/share/extension 文件夹中。

  • 指定未提供时,控制文件postgis.control, postgis_topology.control 显示要安装的扩展版本等信息。

  • 请注意,针对每个扩展的 /sql 文件夹中的所有文件(例如,extensions/postgis/sql/*.sqlextensions/postgis_topology/sql/*.sql)需要复制到 PostgreSQL 的 share/extension 文件夹的最上层

完成这一步后,你应该在 PgAdmin> 中看到 postgispostgis_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_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
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
[Warning]

扩展表 spatial_ref_syslayertopology 不能单独备份。只有在备份对应的 postgispostgis_topology 扩展时才会一起备份,而这只会在你备份整个数据库时发生。备份中只会包含那些 不是 PostGIS 自带的 srid 记录,所以不要修改我们随 PostGIS 一起提供的条目并指望修改能长期保留——如果发现问题,请提交工单。扩展表的结构永远不会出现在备份里,因为它们是通过 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;

2.2.6. 测试

要测试 PostGIS,请运行以下命令

make check

此命令使用针对实际 PostgreSQL 数据库生成的库执行各种检查和回归测试。

[Note]

如果您使用非标准 PostgreSQL、GEOS 或 Proj 位置配置 PostGIS,则可能需要将它们的库位置添加到 LD_LIBRARY_PATH 环境变量中。

[Caution]

目前,make check 依赖于PATHPGPORT环境变量来执行检查。它是使用 --with-pgconfig配置参数指定的 PostgreSQL。编辑路径以匹配在配置期间检测到的 PostgreSQL。 或者为不可避免的麻烦做好准备。

[Note]

沙箱式构建账号(非 PostgreSQL 超级用户)在回归测试周期中,可以通过导出 POSTGIS_REGRESS_DB_OWNER 来委托数据库所有权。测试框架会创建一个临时的回归测试库,并将其所有者设为指定的角色,同时仍然使用权限更低的账号进行连接。如果扩展的创建角色需要与数据库所有者不同,可以再配合使用 POSTGIS_REGRESS_ROLE_EXT_CREATOR

这些变量的作用是:在目标 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

The postgis_tiger_geocoder extension, currently only supports the standard PostgreSQL installcheck. To test these use the below. Note: the make install is not necessary if you already did make install at root of PostGIS code folder.

For tiger geocoder, make sure you have postgis and fuzzystrmatch extensions available in your PostgreSQL instance.

cd extensions/postgis_tiger_geocoder
make install
make installcheck
      

输出应类似于以下内容:

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing fuzzystrmatch               ==============
CREATE EXTENSION
============== installing postgis                     ==============
CREATE EXTENSION
============== installing postgis_tiger_geocoder      ==============
CREATE EXTENSION
============== running regression test queries        ==============
test test-normalize_address   ... ok

=====================
All 2 tests passed.
=====================

2.2.7. 安装

要安装 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

[Note]

postgis_comments.sql, raster_comments.sql, topology_comments.sql成为 xsltproc 的外部依赖关系,因此它与正常的构建和安装分离。

2.3. 安装、升级 Tiger地理编码器并加载数据

像Tiger地理编码器这样的附加组件可能未包含在您的PostGIS分发中。如果您缺少tiger 地理编码器扩展或想要比您的安装提供的更新版本,那么可以使用适用于您PostgreSQL版本的share/extension/postgis_tiger_geocoder.*文件,这些文件可以从Windows未发布版本部分的软件包中获取。尽管这些软件包是为Windows准备的,但postgis_tiger_geocoder扩展文件将在任何操作系统上工作,因为该扩展只是一个SQL/plpgsql扩展。

2.3.1. 在 PostGIS 数据库中启用Tiger地理编码器

  1. 出于本主题的目的,我们假设您已经为 PostgreSQL 安装了postgis_tiger_geocoder扩展。

  2. 使用 psql、pgAdmin 或其他工具连接到数据库,然后运行以下 SQL 命令: 如果要在已有 PostGIS 的数据库上进行安装,则无需执行第一步。 如果已安装扩展,则不需要执行第二步fuzzystrmatch

    CREATE EXTENSION postgis;
    CREATE EXTENSION fuzzystrmatch;
    CREATE EXTENSION postgis_tiger_geocoder;
    

    如果已安装postgis_tiger_geocoder扩展,并且只想更新到最新版本,请运行:

    ALTER EXTENSION postgis UPDATE;
    ALTER EXTENSION postgis_tiger_geocoder UPDATE;

    如果生成自己的条目或对tiger.loader_platformtiger.loader_variables进行更改,则可能需要更新它们。

  3. 若要验证安装是否成功,请在目标数据库中运行以下 SQL:

    SELECT na.address, na.streetname,na.streettypeabbrev, na.zip
      FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na;

    输出应类似于以下内容

    address | streetname | streettypeabbrev |  zip
    ---------+------------+------------------+-------
         1 | Devonshire | Pl               | 02109
  4. tiger.loader_platform生成表的新记录,其中包含可执行文件或服务器的路径。

    sh作为在约定后生成名为 debbie 的配置文件的示例,请运行以下命令:

    INSERT INTO tiger.loader_platform(os, declare_sect, pgbin, wget, unzip_command, psql, path_sep,
           loader, environ_set_command, county_process_command)
    SELECT 'debbie', declare_sect, pgbin, wget, unzip_command, psql, path_sep,
         loader, environ_set_command, county_process_command
      FROM tiger.loader_platform
      WHERE os = 'sh';

    然后将declare_sect列中的路径编辑为适合Debbie 的pg、unzip、shp2pgsql、psql 等路径位置。

    如果您不编辑此 loader_platform 表,它将仅包含项目的常见位置,并且您必须在生成脚本后编辑生成的脚本。

  5. Zip code 5 位统计区域 zcta5 的加载步骤会使用当前的 ZCTA 数据,并且在启用的情况下会作为 Loader_Generate_Nation_Script 的一部分执行。它默认是关闭的,因为加载过程耗时较长(大约 20 到 60 分钟)、占用磁盘空间较大,而且并不是经常会用到。

    要启用它,请执行以下操作:

    UPDATE tiger.loader_lookuptables SET load = true WHERE table_name = 'zcta520';

    如果添加了边界过滤器并将其限制为边界内的 ZIP,则在存在 ZCTA5 的情况下将使用Geocode 函数。当返回的地址没有邮政编码时,将使用Reverse_Geocode函数,这通常发生在高速公路上的反向地理编码中。

  6. 如果您有到服务器的快速网络连接,请在服务器根目录或本地电脑上创建一个名为 gisdata的文件夹。该文件夹是 Tiger 文件下载和处理的位置。 如果您对该文件夹位于服务器根目录不满意,或者只是想更改为不同的文件夹进行暂存,请编辑 tiger.loader_variables表中的字段 staging_fold

  7. gisdata在该文件夹中创建一个名为 temp 的文件夹。或者,创建由staging_fold指示的文件夹。 这是加载程序提取下载的 Tiger 数据的地方。

  8. 然后运行Loader_Generate_Nation_ScriptSQL 函数,确保使用自定义配置文件的名称并将脚本复制到 .sh 或 .bat 文件。例如,如果要使用新的配置文件加载国家/地区:

    psql -c "SELECT Loader_Generate_Nation_Script('debbie')" -d geocoder -tA > /gisdata/nation_script_load.sh
  9. 运行命令行脚本以加载生成的国家/地区数据。

    cd /gisdata
    sh nation_script_load.sh
  10. 运行国家/地区脚本后,将在架构中创建三个表来存储数据。 从 psql 或 pgAdmin 运行以下查询进行验证: tiger_data

    SELECT count(*) FROM tiger_data.county_all;
    count
    -------
      3235
    (1 row)
    SELECT count(*) FROM tiger_data.state_all;
    count
    -------
        56
    (1 row)
    

    这将只包含数据,如果您标记了ZCTA5要加载

    SELECT count(*) FROM tiger_data.zcta5_all;
    count
    -------
      33933
    (1 row)
    
  11. 默认情况下,不加载bg, tract, tabblock20对应的表。这些表不被地理编码器使用,但被人们用来进行人口统计。如果您希望将它们作为状态加载的一部分进行加载,请运行以下语句来启用它们。

    UPDATE tiger.loader_lookuptables SET load = true WHERE load = false AND lookup_name IN('tract', 'bg', 'tabblock20');

    或者,可以使用Loader_Generate_Census_Script加载状态数据,然后仅加载这些表

  12. 对于要加载数据的每个状态,请使用Loader_Generate_Script创建状态脚本。

    [Warning]

    在完成加载国家/地区数据之前,请勿创建状态脚本。这是因为状态脚本使用国家/地区脚本中加载的国家/地区列表。

  13. psql -c "SELECT Loader_Generate_Script(ARRAY['MA'], 'debbie')" -d geocoder -tA > /gisdata/ma_load.sh
  14. 运行生成的命令行脚本。

    cd /gisdata
    sh ma_load.sh
  15. 在所有数据完成加载或到达断点后,最好对所有tiger表运行分析以更新其状态(包括继承的表)

    SELECT install_missing_indexes();
    vacuum (analyze, verbose) tiger.addr;
    vacuum (analyze, verbose) tiger.edges;
    vacuum (analyze, verbose) tiger.faces;
    vacuum (analyze, verbose) tiger.featnames;
    vacuum (analyze, verbose) tiger.place;
    vacuum (analyze, verbose) tiger.cousub;
    vacuum (analyze, verbose) tiger.county;
    vacuum (analyze, verbose) tiger.state;
    vacuum (analyze, verbose) tiger.zcta5;
    vacuum (analyze, verbose) tiger.zip_lookup_base;
    vacuum (analyze, verbose) tiger.zip_state;
    vacuum (analyze, verbose) tiger.zip_state_loc;

2.3.2. Tiger数据加载所需工具

加载过程从人口普查网站下载各个国家文件、所请求的州的数据,提取文件,然后将每个州加载到其自己单独的一组州表中。每个状态表都继承自 tiger模式中定义的表,因此,如果您需要重新加载状态或不需要重新加载状态,则只需查询这些表即可访问所有数据并随时使用 Drop_State_Tables_Generate_Script 删除一组状态表不再需要一个国家了。

启用数据加载需要以下工具:

  • 提取从人口普查网站获得的ZIP文件的工具。

    在类Unix系统上,它是一个可执行文件。unzip通常已经安装在大多数类Unix平台上。

    在Windows上,它是7-zip。它是一个免费的压缩解压缩工具,可以从http://www.7-zip.org/下载

  • shp2pgsql 命令。默认情况下,它在安装PostGIS时安装。

  • wget 命令。它是一个Web检索工具,通常安装在大多数Unix / Linux系统上。

    对于 Windows,您可以从http://gnuwin32.sourceforge.net/packages/wget.htm 获取编译的二进制文件

如果您要从 Tiger_2010 升级,则需要首先生成并运行 Drop_Nation_Tables_Generate_Script。在加载任何州数据之前,您需要加载使用 Loader_Generate_Nation_Script 执行的全国范围数据。这将为您生成一个加载器脚本。Loader_Generate_Nation_Script 是一个一次性步骤,应该在升级(从上一年的tiger普查数据)和新安装时完成。

要加载状态数据,请参阅Loader_Generate_Script为您的平台生成所需状态的数据加载脚本。 请注意,您可以零碎地安装这些。 您不必一次加载您想要的所有状态。 您可以根据需要加载它们。

加载所需的状态后,如

SELECT install_missing_indexes();

所示:尝试运行 Install_Missing_Indexes

要测试您是否能够执行应执行的操作,您将在使用 Geocode的州的地址上运行地理编码器

2.3.3. 升级您的 Tiger 地理编码器 安装和数据

首先postgis_tiger_geocoder按如下所示升级扩展:

ALTER EXTENSION postgis_tiger_geocoder UPDATE;

然后删除所有国家/地区表并加载新的国家/地区表。 如Drop_Nation_Tables_Generate_Script中所述,使用此 SQL 语句生成删除脚本

SELECT drop_nation_tables_generate_script();

执行生成的删除SQL语句。

Loader_Generate_Nation_Script中所述,使用此 SELECT 语句生成删除脚本

对于Windows

SELECT loader_generate_nation_script('windows'); 

对于unix/linux

SELECT loader_generate_nation_script('sh');

有关如何运行生成脚本的说明,请参见 Section 2.3.1, “在 PostGIS 数据库中启用Tiger地理编码器”。 您只需要执行此操作一次。

[Note]

您可以混合使用不同年份的状态表,并且可以单独升级每个状态。 在升级某个州之前,您首先需要使用 Drop_State_Tables_Generate_Script 删除该州前一年的州表。

2.4. 常见问题

当安装或升级未按预期进行时,需要检查一些事项。

  1. 请确保已安装 PostgreSQL14 或更新版本,并且你正在使用与正在运行的 PostgreSQL 版本相同的 PostgreSQL 源代码进行编译。当你的(Linux)发行版已经安装了 PostgreSQL,或者以其他方式安装了 PostgreSQL 但忘记了时,可能会出现混淆。PostGIS 只能与 PostgreSQL14 或更新版本一起使用,如果使用较旧版本,可能会出现奇怪且意想不到的错误消息。要检查正在运行的 PostgreSQL 版本,可以使用 psql 连接到数据库并运行以下查询:

    SELECT version();

    如果您运行的是基于 RPM 的发行版,则可以使用rpm命令检查是否存在带有 rpm -qa | grep postgresql的预安装软件包

  2. 如果升级失败,请确保还原到已安装PostGIS的数据库。

    SELECT postgis_full_version();

此外,请检查配置是否正确检测到 PostgreSQL、Proj4 库和 GEOS 库的安装位置。

  1. 配置的输出用于生成 postgis_config.h 文件。检查POSTGIS_PGSQL_VERSION, POSTGIS_PROJ_VERSIONPOSTGIS_GEOS_VERSION变量是否已正确设置。