Chapter 2. PostGISインストール

Table of Contents

本章では、PostGISのインストールに必要な手順について説明します。

2.1. 簡略版

全ての依存がパスに入っているとする場合、次のようにコンパイルします。

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

PostGISをインストールした後は、利用したいデータベース個々内で利用可能にする (Section 3.3, “空間データベースの作成”)か、アップグレード (Section 3.4, “空間データベースのアップグレード”)する必要があります。

2.2. ソースからのコンパイルとインストール

[Note]

多くのOSで、ビルドされたPostgreSQL/PostGISパッケージがあります。多くの場合、コンパイルが必要なのは、最もひどい最先端の版が欲しい場合やパッケージメンテナンスを行う人ぐらいです。

本節では、一般的なコンパイル手順を示します。Windows用や他のOS用等にコンパイルするなら、PostGIS User contributed compile guidesPostGIS Dev Wikiで、より詳細な助けが見つかるかも知れません。

多くのOS用のビルド済みパッケージの一覧はPostGIS Pre-built Packagesにあります。

Windowsユーザの場合は、スタックビルダか、PostGIS Windows download siteから安定版を得ることができます。また、週に1回か2回のビルドと刺激的なことがあった時の随時ビルドとを行っているvery bleeding-edge windows experimental buildsもあります。これらはPostGISの進行中のリリースでの試験に使用します。

PostGISモジュールは、PostgreSQLバックエンドサーバの拡張です。PostGIS 3.5.0devでは、コンパイルのために、完全なPostgreSQLサーバヘッダが必要です。PostgreSQL 12 - 17の間でビルドできます。古い版のPostgreSQLはサポートされません

PostgreSQLをインストールしていないならPostgreSQLインストールガイドを参照して下さい。http://www.postgresql.org/にあります。

[Note]

GEOS機能を有効にするために、PostgreSQLをインストール時に明示的に標準C++ライブラリに対する明示的なリンクが必要になる場合があります。

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

これは、古い開発ツールとインチキC++例外との対話のための応急処置です。怪しい問題 (望んでいないのにバックエンドが閉じたりそれに近い挙動を起こす)を経験したなら、このトリックを試してみて下さい。もちろん、これを行うにはPostgreSQLをはじめからコンパイルし直す必要があります。

次のステップでは、PostGISソースのコンフィギュレーションとコンパイルに概要を記述します。これらは、Linuxユーザ用に書いてありますので、WindowsやMacでは動作しません。

2.2.1. ソースの取得

ダウンロードサイト https://postgis.net/stuff/postgis-3.5.0dev.tar.gz からソースのアーカイブを入手します。

wget https://postgis.net/stuff/postgis-3.5.0dev.tar.gz
tar -xvzf postgis-3.5.0dev.tar.gz
cd postgis-3.5.0dev

これで、カレントディレクトリの下にpostgis-3.5.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 12 - 17。PostgreSQLの完全なインストール (サーバヘッダを含む)が必要です。PostgreSQLは http://www.postgresql.org/にあります。

    完全なPosgreSQL/PostGIS対応表とPostGIS/GEOS対応表についてはhttp://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGISをご覧ください。

  • GNU Cコンパイラ (gcc)。ANSI Cコンパイラの中には、PostGISをコンパイルできるものもありますが、gccでコンパイルするのが最も問題が少ないと見ています。

  • GNU Make (gmakeまたは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.12以上が必要です。GEOSは https://libgeos.org/からダウンロードできます。

  • LibXML2, 2.5.x以上。現在は、LibXML2はインポート関数 (ST_GeomFromGMLとST_GeomFromKML)で使われています。LibXML2はhttps://gitlab.gnome.org/GNOME/libxml2/-/releasesからダウンロードできます。

  • JSON-C 0.9以上。JSON-Cは現在、ST_GeomFromGeoJsonによるGeoJSONの取り込みに使われます。JSON-Cはhttps://github.com/json-c/json-c/releases/からダウンロード可能です。

  • GDAL, version 2以上が必要で以上が好ましいです。ラスタ機能に必要です。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のコンパイル用です。http://www.gtk.org/にあります。

  • 全ての機能を使用できるようにするためには、SFCGAL 1.3.1 (以上)、1.4.1以上が推奨であり、必要です。SFCGALは、Chapter 8, SFCGAL 関数リファレンスのような、追加の2次元、3次元の高度な解析機能をPostGISに提供するために使うことができます。また、両方のバックエンドから提供されている2次元関数 (ST_IntersectionやST_Areaなど)に、GEOSでなくSFCGALを使用することができるようになります。PostgreSQLのコンフィギュレーション変数であるpostgis.backendによって、SFCGALがインストールされている場合にエンドユーザがどのバックエンドを使いたいかを制御することができるようになります (デフォルトはGEOS)。ご注意: SFCGAL 1.2は少なくともCGAL 4.3とBoost 1.54 が必要です (https://sfcgal.org 参照) https://gitlab.com/sfcgal/SFCGAL/

  • Section 12.1, “住所標準化”をビルドするには、PCRE http://www.pcre.org (通常はnixシステムにはインストールされています)も必要です。PCREライブラリを検出したらSection 12.1, “住所標準化”は自動でビルドされます。もしくは、コンフィギュアの際に有効な--with-pcre-dir=/path/to/pcreを指定します。

  • ST_AsMVTを有効にするには、protobuf-cライブラリ (実行時)とprotoc-cコンパイラ (ビルド時)が必要です。protobuf-cの正しい最小版を確認するには、pkg-configが必要です。protobuf-cをご覧下さい。デフォルトでは、PostGISは、MVTポリゴンを高速に評価するためにWagyuを使用していますが、C++11コンパイラが必要です。CXXFLAGSを使って、PostgreSQLインストールに使ったのと同じコンパイラを使います。これを無効化してGEOSを代わりに使う場合には、コンフィギュレーション時に--without-wagyuを指定します。

  • CUnit (CUnit)。レグレッションテストに必要です。http://cunit.sourceforge.net/にあります。

  • DocBook (xsltproc)。文書のビルドに必要です。http://www.docbook.org/にあります。

  • DBLatex (dblatex)。文書をPDFでビルドするのに必要です。http://dblatex.sourcforge.net/にあります。

  • ImageMagick (convert)。文書で使う画像を生成するのに必要です。http://www.imagemagick.org/にあります。

2.2.3. コンフィギュレーション

ほとんどのLinuxのインストールと同様に、最初のステップでは、ソースコードのビルドに使われるMakefileを生成します。これは、シェルスクリプトが行います。

./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は、PostGISなどの拡張に対してPostgreSQLのインストール先ディレクトリを伝えるpg_configというユーティリティを持っています。PostGISの対象とする特定のPostgreSQLのインストール先を手動で指定する場合に、このパラメータ(--with-pgconfig=/path/to/pg_config)を使います。

--with-gdalconfig=FILE

必須ライブラリであるGDALは、ラスタ機能に必要な機能を提供します。GDALには、インストール先ディレクトリをインストールスクリプトに伝えるgdal-configがあります。PostGISのビルドに使う特定のGDALを手動で指定する場合に、このパラメータ (--with-gdalconfig=/path/to/gdal-config)を使います。

--with-geosconfig=FILE

必須のジオメトリライブラリであるGEOSには、ソフトウェアのインストール時にGEOSのインストール先ディレクトリを伝えるgeos-configというユーティリティがあります。PostGISのビルドに使う特定のGEOSを手動で指定する場合に、このパラメータ (--with-geosconfig=/path/to/geos-config)を使います。

--with-xml2config=FILE

LibXMLはGeomFromKML/GML処理を行うのに必須のライブラリです。通常はlibxmlをインストールしているなら発見されますが、発見できない場合や特定の版を使用したい場合は、xml2-configを指定してインストールスクリプトにLibXMLのインストール先ディレクトリを伝えます。PostGISのビルドに使う特定のLibXMLを手動で指定する場合に、このパラメータ (>--with-xml2config=/path/to/xml2-config)を使います。

--with-projdir=DIR

ProjはPostGISに必須の投影変換ライブラリです。PostGISのビルドに使う特定のProjのインストールディレクトリを手動で指定する場合は、このパラメータ (--with-projdir=/path/to/projdir)を使います。

--with-libiconv=DIR

iconvのインストール先ディレクトリを指定します。

--with-jsondir=DIR

JSON-Cは、MITライセンスのJSONライブラリで、PostGISのST_GeomFromJSONに必須です。PostGISのビルドに使う特定のJSON-Cを手動で指定する場合に、このパラメータ (--with-jsondir=/path/to/jsondir)を使います。

--with-pcredir=DIR

PCREは、BSDライセンスのPerl互換正規表現ライブラリです。住所標準化エクステンションに必須です。PostGISのビルド対象としている特定のPCREを手動で指定する場合に、このパラメータ (--with-pcredir=/path/to/pcredir)を使います。

--with-gui

データインポートGUI (GTK+2.0が必要)をコンパイルします。このパラメータによって、shp2pgsql-guiという、shp2pgsqlのグラフィカルユーザインタフェースが作成されます。

--without-raster

ラスタ機能なしでコンパイルします。

--without-topology

トポロジ対応を無くしてコンパイルします。トポロジに必要なロジックは全てpostgis-3.5.0devライブラリ内に作られるので、関連ライブラリはありません。

--with-gettext=no

デフォルトでは、gettextの検出とこれを用いたコンパイルを試みますが、ローダ破損を引き起こす非互換性問題のもとで実行する場合には、このコマンドで無効にできます。これを使ったコンフィギュレーションによって解決する問題の例はhttp://trac.osgeo.org/postgis/ticket/748にあります。ご注意: これを切ることで多くの機能がなくなるわけではありません。まだ文書化されていなくて試験段階であるGUIローダにおける内部のヘルプ/ラベル機能に使われています。

--with-sfcgal=PATH

デフォルトでは、このスイッチなしではSFCGAL対応でインストールされません。PATHは、sfcgal-configへのパスを指定することができる追加的な引数です。

--without-phony-revision

Gitレポジトリの現在のHEADに一致するように、postgis_revision.hの更新を無効にします。

[Note]

PostGISをコードレポジトリから得る場合には、はじめに次のスクリプトを実行します。

./autogen.sh

このスクリプトによってconfigureスクリプトが生成されます。これはPostGISのインストールに関するカスタマイズに使われます。

PostGISをアーカイブファイルで入手する場合には、configureが既に生成されているので./autogen.shは不要です。

2.2.4. ビルド

Makefileが生成されたら、PostGISのビルドは、次のコマンドを実行するだけです。

make

出力の最後の行に"PostGIS was built successfully. Ready to install."と出れば終わりです。

PostGIS 1.4.0版からは、全ての関数に文書から生成されるコメントが付きます。これらのコメントを後からインストールするには、次のコマンドを実行しますが、docbookが必要です。アーカイブファイルからインストールする場合は、postgis_comments.sql, raster_comments.sql, topology_comments.sqlは、docフォルダにあるので、コメントを作成する必要はありません。コメントはCREATE EXTENSIONによるインストールの一部として取り込まれます。

make comments

PostGIS 2.0で導入されました。早見表にも、また学習中の方のハンドアウトにも適しているHTMLチートシートを生成します。xsltprocが必要で、topology_cheatsheet.html, tiger_geocoder_cheatsheet.html, raster_cheatsheet.html, postgis_cheatsheet.htmlの4ファイルが生成されます。

HTMLとPDFのビルド済みのものはPostGIS / PostgreSQL Study Guidesにあります。

make cheatsheets

2.2.5. PostGISエクステンションのビルドとデプロイ

PostgreSQL 9.1以上を使用している場合は、PostGISエクステンションが自動的にビルド、インストールされます。

ソースレポジトリからビルドしている場合は、関数の記述を最初にビルドする必要があります。これらは、docbookがインストールされている時にビルドされます。手動でインストールするには次のようにします。

make comments

アーカイブファイルからのビルドの場合は、ビルド済みのものがあるので、コメントのビルドは必須ではありません。

PostgreSQL 9.1を対象にビルドしている場合は、エクステンションは自動的にmake install処理の一部としてビルドするべきです。必要ならextensionsフォルダからビルドできますし、他のサーバで必要ならファイルの複製ができます。

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環境変数を使用します。一般的なpsql環境変数で上書きすると便利なのが PGUSER,PGPORT, and PGHOSTです。環境変数を参照して下さい。

エクステンションファイルは、常に、OSに関係なく同じ版のPostGISでは同じです。PostGISバイナリを既にインストールしている限りは、エクステンションファイルをあるOSから別のものに複写して大丈夫です。

開発用と異なる別のサーバでエクステンションを手動でインストールしたい場合は、サーバにない時に必要となる通常の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 -> extensionで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.0dev         | 3.5.0dev
 address_standardizer_data_us | 3.5.0dev         | 3.5.0dev
 postgis                      | 3.5.0dev         | 3.5.0dev
 postgis_raster               | 3.5.0dev         | 3.5.0dev
 postgis_sfcgal               | 3.5.0dev         |
 postgis_tiger_geocoder       | 3.5.0dev         | 3.5.0dev
 postgis_topology             | 3.5.0dev         |
(6 rows)

クエリを行ったデータベースにエクステンションがインストールされている場合は、installed_versionカラムに記載が見えます。レコードが返ってこない場合は、PostGIS EXTENSIONがインストールされていないことになります。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.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.5.0dev
Schema      | tiger
Description | PostGIS tiger geocoder and reverse geocoder
-[ RECORD 4 ]-------------------------------------------------
Name        | postgis_topology
Version     | 3.5.0dev
Schema      | topology
Description | PostGIS topology spatial types and functions
[Warning]

エクステンションのテーブルspatial_ref_sys, layer, topologyは、明示的にバックアップできません。それぞれのpostgisまたはpostgis_topologyエクステンションがバックアップされる時のみバックアップできます。これは、データベース全体のバックアップの時のみ行われます。PostGIS 2.0.1の時点では、データベースがバックアップされる際に、PostGISでパッケージ化されていないsridレコードのみバックアップされます。パッケージに入っているsridの変更は巡回せず、変更はそこにあるものと期待されます。PostGIS 2.0.1の時点では、データベースがバックアップされるときにPostGISに入っていないsridのレコードだけがバックアップされます。PostGISに入っていて後に変更されたsridの変更については巡回しません。問題が見られたら、チケットを発行して下さい。エクステンションテーブルの構造はCREATE EXTENSIONで生成されるので、バックアップを行いません。エクステンションの与えられた版と同じものであると仮定されます。この挙動は現在のPostgreSQL エクステンションモデルに組み込まれているため、これについては何もできません。

素晴らしいエクステンション機構を使わずに3.5.0devをインストールした場合には、それぞれのエクステンションが持つ関数をパッケージするためのコマンドを実行して、エクステンションに基づくように変更できます。PostgreSQL 13では、パッケージしない方法でのインストールは削除されましたので、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 を標準の位置にインストールしていない場合には、環境変数LD_LIBRARY_PATHに、ライブラリの位置を追加する必要があるかも知れません。

[Caution]

現在のところmake checkは、チェックを行う際に 環境変数PATHPGPORTによっています。コンフィギュレーションパラメータ--with-pgconfigを使って特定したPostgreSQLではありません。PATHを編集して、コンフィギュレーションの際に検出した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

postgis_tiger_geocoderaddress_standardizerエクステンションは、現在は、標準的なPostgreSQLインストールチェックにのみ対応しています。これらをテストするには、次のようにします。ご注意: PostGISコードフォルダのルートでmake installを既に行っている場合には、make installは重要ではありません。

address_standardizer用:

cd extensions/address_standardizer
make install
make installcheck
          

出力は次のようなかんじになります。

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test-init-extensions     ... ok
test test-parseaddress        ... ok
test test-standardize_address_1 ... ok
test test-standardize_address_2 ... ok

=====================
 All 4 tests passed.
=====================

Tiger Geocodeを使う場合には、使用するPostgreSQLインスタンス内にPostGISとfuzzystrmatchのエクステンションが必要です。PostGISをaddress_standardizer機能付きでビルドした場合は、address_standardizerのテストも行います。

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
============== installing address_standardizer        ==============
CREATE EXTENSION
============== running regression test queries        ==============
test test-normalize_address   ... ok
test test-pagc_normalize_address ... ok

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

2.2.7. インストール

PostGISをインストールするには、次のコマンドを実行します。

make install

これにより、PostGISのインストールファイルが、--prefixパラメータで指定した、適切なサブディレクトリに複写されます。次に特筆すべきサブディレクトリを示します。

  • ローダとダンパのバイナリのインストール先は[prefix]/binです。

  • postgis.sqlなどのSQLファイルのインストール先は[prefix]/share/contribです。

  • PostGISライブラリのインストール先は[prefix]/libです。

先にmake commentsを実行してpostgis_comments.sql, raster_comments.sqlを生成していた場合は、次のコマンドを実行すると、これらのSQLファイルがインストールされます。

make comments-install

[Note]

postgis_comments.sql, raster_comments.sql, topology_comments.sqlは、xsltprocの外部依存ができたので、通常のビルドとインストールから切り離されました。

2.3. PAGC住所標準化ツールのインストールと使用

address_standardizerエクステンションは、別途ダウンロードする必要がある別パッケージとしていました。PostGIS 2.2からは同梱されています。address_standardizeの追加情報、できること、および、コンフィギュレーション方法については、Section 12.1, “住所標準化”をご覧下さい。

標準化エクステンションは、Normalize_Addressの後継で、PostGISに入っているTigerジオコーダエクステンションに使うことができます。この場合の使い方についてはSection 2.4.2, “TigerジオコーダをPostGISデータベースで有効にする: エクステンションを使用”を参照して下さい。また、ユーザ自身がつくるジオコーダの要素として使用したり、住所の比較を簡単にするために住所を標準化するために使うことができます。

住所標準化エクステンションはPCREに依存しています。PCREは多くのUNIX系システムにインストールされていますが、http://www.pcre.orgから最新版をダウンロードできます。Section 2.2.3, “コンフィギュレーション”の際にPCREを発見すると、住所標準化エクステンションが自動的にビルドされます。使用したいPCREのインストールが独自なものである場合は、configureに--with-pcredir=/path/to/pcreを渡します。/path/to/pcreは、PCREのincludeとlibのあるルートフォルダです。

Windowsでは、PostGIS 2.1以上に住所標準化エクステンションが同梱されているので、コンパイルを行わずに、すぐにCREATE EXTENSIONに行くことができます。

インストールしたら、対象データベースに接続して次のSQLが実行できます。

CREATE EXTENSION address_standardizer;

次のテストでは、rules, gaz, lexテーブルは必要ありません。

SELECT num, street, city, state, zip
 FROM parse_address('1 Devonshire Place PH301, Boston, MA 02109');

出力は次のようになります。

num |         street         |  city  | state |  zip
-----+------------------------+--------+-------+-------
 1   | Devonshire Place PH301 | Boston | MA    | 02109

2.4. Tigerジオコーダのインストールとアップグレードとデータロード

Tigerジオコーダのような拡張機能はPostGISディストリビューションに同梱されていません。Tigerジオコーダエクステンションが無かったり、インストールしているものより新しい版のものが欲しい場合には、Windows Unreleased VersionsでPostgreSQLの版に合ったパッケージにあるshare/extension/postgis_tiger_geocoder.*ファイルを使います。これらのパッケージはWindows用ですが、postgis_tige_geocoderエクステンションファイルは、SQLとPL/pgSQLだけですので、他のOSでも動作します。

2.4.1. TigerジオコーダをPostGISデータベースで有効にする

  1. ここの説明では、お手持ちのPostgreSQLにpostgis_tiger_geocoderエクステンションがインストールされていると仮定します。

  2. psql、pgAdminまたは他のツールでデータベースに接続して、次のSQLコマンドを実行します。既にPostGISを持っているデータベースにインストールする場合は、一つ目の手順は不要です。fuzzystrmatchエクステンションが既にインストールされている場合は、二つ目の手順は不要です。

    CREATE EXTENSION postgis;
    CREATE EXTENSION fuzzystrmatch;
    CREATE EXTENSION postgis_tiger_geocoder;
    --this one is optional if you want to use the rules based standardizer (pagc_normalize_address)
    CREATE EXTENSION address_standardizer;

    既に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. PostGIS 2.4.1からは、ZTCA5 (Zip Code 5 digit Tabulation Area)のロード手順が変更され、有効になった時にLoader_Generate_Nation_Scriptの一部として現在のZCTA5データをロードするようになりました。デフォルトでは切られています。ロードにかなりの時間 (20から60分)が取られ、かなりのディスクスペースを占有するのに、そんなに頻繁には使わないためです。

    有効にするには、次のようにします。

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

    境界のフィルタが追加され、ちょうど境界内のZIPに制限された場合に、Geocode関数は、ZCTA5が存在するなら使います。Reverse_Geocode関数は、返された住所にZIPコードが無い場合に (しばしば高速道路での逆ジオコーディングで発生します)、これを使います。

  6. サーバまたはローカル (サーバへのネットワーク接続が早い場合)のルートにgisdataというフォルダを作成します。このフォルダはTigerファイルがダウンロードされ、処理される場所です。サーバのルートにフォルダを作ると不幸になる場合や、単に他のフォルダに移したい場合には、tiger.loader_variablesテーブルのstaging_foldフィールドを編集します。

  7. gisdataフォルダ内にtempというフォルダを作成します。もしくは、staging_foldで示されたフォルダを作成します。ローダがダウンロードしたTigerデータを展開する場所です。

  8. そして、SQL関数Loader_Generate_Nation_Scriptを実行して、独自のプロファイルの名前を使うか確認し、.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. 国スクリプトを実行した後、tiger_dataスキーマに三つのテーブルが作られ、データが格納されています。次のクエリをpsqlかpgAdminから実行して、確認します。

    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
    -------
      33931
    (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テーブルに対してanalyzeを実行して、(継承されたものも含めて)状態を更新するのは良いことです。

    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.4.2. TigerジオコーダをPostGISデータベースで有効にする: エクステンションを使用

皆さんが問題と思われるの多くのことのひとつに、ジオコーディング前の準備に住所を正規化する関数Normalize_Addressがあります。住所正規化は万全と言うにはほど遠く、パッチをあてようとすると膨大な資源を費やします。よって、より良い住所標準化エンジンを持つ他のプロジェクトに統合しました。この新しい住所標準化を使うには、Section 2.3, “PAGC住所標準化ツールのインストールと使用”で記述するようにエクステンションをコンパイルし、使用するデータベースにインストールします。

このエクステンションをpostgis_tiger_geocoderをインストールしているデータベースにインストールすると、Pagc_Normalize_Addressを、Normalize_Addressの代わりに使うことができます。このエクステンションはTigerジオコーダからは見えないので、国際的な住所といった他のデータソースでも使えます。Tigerジオコーダエクステンションは、その版のrules table (tiger.pagc_rules), gaz table (tiger.pagc_gaz), lex table (tiger.pagc_lex)を同梱しています。これらは、必要に応じて標準化の改善のために追加や更新ができます。

2.4.3. Tigerデータのロードに必要なツール

ロードプロセスによって、米センサスウェブサイトから個々の国ファイル、リクエストされた州のデータをダウンロードし、ファイルを展開し、個別の州をそれぞれの州テーブルの集合にロードします。各州のテーブルは、tigerスキーマで定義されたテーブルを継承しているので、これらのテーブルに対して全てのデータにアクセスするためのクエリを出すことができますし、州の再読み込みが必要となったり、州が必要ない場合には、Drop_State_Tables_Generate_Scriptで、いつでも州テーブルの集合を削除するクエリを出すことができます。

データのロードを可能にするためには次のツールが必要です。

  • センサスウェブサイトから取得するZIPファイルを展開するツール。

    Unix系システムでは、unzip実行ファイルです。通常は、ほとんどのUnix系プラットフォームで既にインストールされています。

    Windowsでは7-zipです。http://www.7-zip.org/からダウンロードできる無償の圧縮解凍ツールです。

  • shp2pgsqlコマンド。PostGISインストール時にデフォルトでインストールされます。

  • wgetコマンド。通常はほとんどのUnix/Linuxシステムにインストールされている、ウェブ取得ツールです。

    Windows用については、コンパイル済みのバイナリをhttp://gnuwin32.sourceforge.net/packages/wget.htmから取得できます。

tiger_2010からアップグレードする場合には、最初にDrop_Nation_Tables_Generate_Scriptを生成、実行する必要があります。どの州データもロードする前に、Loader_Generate_Nation_Scriptで全国的なデータをロードする必要があります。これによりローダスクリプトが生成されます。(以前の年のTiger国勢調査データからの)アップグレードや新規インストールで行うLoader_Generate_Nation_Scriptの回数は1回です。

州データをロードするには、Loader_Generate_Scriptを参照して、手持ちのプラットフォームで動作する、求める州データをロードするデータロードスクリプトを生成します。州データはひとつずつダウンロードできることに注意して下さい。一度に必要な州の全てについてデータをロードする必要はありません。必要なだけダウンロードできます。

求める州データをロードした後は、Install_Missing_Indexesに示すように、

SELECT install_missing_indexes();

を実行するようにして下さい。

行うべきことができたかをテストするために、Geocodeを使用する州の中の住所についてジオコーダを実行してみます。

2.4.4. 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.4.1, “TigerジオコーダをPostGISデータベースで有効にする”を参照して下さい。これは一度だけ実行する必要があります。

[Note]

州テーブルで複数年分が混ざっていてもよく、また州ごとに分割してアップグレードできます。一つの州をアップグレードする前に、Drop_State_Tables_Generate_Scriptを使って、以前の年の州テーブルを削除する必要があります。

2.5. 共通の問題

インストールやアップグレードが思うようにいかない時にチェックすることがいくつかあります。

  1. PostgreSQL 12以上をインストールしているか、実行中のPostgreSQLと同じ版のソースでコンパイルしているか、をチェックします。(Linuxの)ディストリビューションによって既にPostgreSQLがインストールされている時や、 PostgreSQLを以前にインストールして忘れた場合に、 混乱が発生することがあります。PostGISはPostgreSQL 12以上で動作します。古い版のものを使った場合には、おかしな予想外のエラーメッセージが表示されます。実行中の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_VERSIONPOSTGIS_PROJ_VERSIONおよびPOSTGIS_GEOS_VERSION変数が正しくセットされたかをチェックして下さい。