第2章 PostGISインストール

目次

2.1. 簡略版
2.2. インストールに必要なもの
2.3. ソースの取得
2.4. ソースからのコンパイルとインストール: 詳細
2.4.1. コンフィギュレーション
2.4.2. ビルド
2.4.3. PostGIS EXTENSIONのビルドとデプロイ
2.4.4. テスト
2.4.5. インストール
2.5. PostgreSQL 9.1より前での空間データベースの作成
2.6. EXTENSIONを使った空間データベースの生成
2.7. Tigerジオコーダのインストールとアップグレードとデータロード
2.7.1. TigerジオコーダをPostGISデータベースで有効にする: EXTENSIONを使用
2.7.2. TigerジオコーダをPostGISデータベースで有効にする: EXTENSION不使用
2.7.3. Tigerデータのロード
2.7.4. Tigerジオコーダのアップグレード
2.8. 空間データベースをテンプレートから生成する
2.9. アップグレード
2.9.1. ソフトアップグレード
2.9.2. ハードアップグレード
2.10. 共通の問題
2.11. JDBC
2.12. ローダ/ダンパ

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

2.1. 簡略版

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

tar xvfz postgis-2.2.0dev.tar.gz
cd postgis-2.2.0dev
./configure
make
make install

PostGISをインストールした後は、利用したいデータベース個々内で利用可能にする必要があります。

[注記]

ラスタ機能は現在は選択可能ですが、デフォルトではインストールされます。PostgreSQL 9.1以上のEXTENSIONモデルを使ってインストールするには必須です。EXTENSIONを有効にする処理の方がよりよく、かつユーザフレンドリです。空間データベースを有効にするには、次のようにします。

psql -d yourdatabase -c "CREATE EXTENSION postgis;"
psql -d yourdatabase -c "CREATE EXTENSION postgis_topology;"
psql -d yourdatabase -c "CREATE EXTENSION postgis_tiger_geocoder;"

インストールされて有効になっているEXTENSIONのクエリやEXTENSIONのアップグレード、EXTENSIONを使わずにインストールした場合のEXTENSIONへの切り替えに関する詳細情報については、「PostGIS EXTENSIONのビルドとデプロイ」を参照して下さい。

PostgreSQL 9.0上で動作る場合や、なんらかの理由でラスタ機能なしでコンパイルすると決めた場合や、古いやり方でインストールする場合には、より長く、より苦痛を伴いますが、やり方はあります。

インストールされた.sqlファイルは全てPostgreSQLがインストールされているフォルダ内のshare/contrib/postgis-2.2の中にあります。

createdb yourdatabase
createlang plpgsql yourdatabase
psql -d yourdatabase -f postgis.sql
psql -d yourdatabase -f postgis_comments.sql
psql -d yourdatabase -f spatial_ref_sys.sql
psql -d yourdatabase -f rtpostgis.sql
psql -d yourdatabase -f raster_comments.sql
psql -d yourdatabase -f topology/topology.sql
psql -d yourdatabase -f topology_comments.sql

本章の残りでは、上記のインストール手順の個々の詳細を見ていきます。

2.2. インストールに必要なもの

PostGISには、ビルド、利用するために、次のものが必要です。

必須

  • PostgreSQL 9.1以上。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を完全に処理しきれないかもしれません。

  • 投影変換ライブラリ Proj4 の 4.6.0版以上。Proj4ライブラリは、PostGISの座標系投影変換機能に使われます。Proj4は、http://trac.osgeo.org/proj/からダウンロードできます。

  • ジオメトリライブラリGEOSの3.3版以上。新しい関数や機能の全てを得るために、GEOS 3.4以上を推奨します。GEOS 3.4以外では、ST_Traianglesや長時間実行関数の中断等の主要な機能拡張と、ST_ValidDetailやST_MakeValidのようなジオメトリ評価とジオメトリの正当化の改善とが使えません。トポロジ機能を使うにはGEOS 3.3.2以上が必要です。GEOSはhttp://trac.osgeo.org/geos/からダウンロード可能です。3.4以上は古い版との後方互換があり、アップグレードがかなり安全です。

  • LibXML2の2.5.x以上。LibXML2は現在取り込み関数 (ST_GeomFromGMLとST_GeomFromKML)で使っています。LibXML2はhttp://xmlsoft.org/downloads.htmlからダウンロード可能です。

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

  • GDAL 1.8以上(古い版では一部機能が働かなかったり挙動が異なるので1.9以上が望ましいです)。ラスタ機能に必要で、CREATE EXTENSION postgisでのインストールに必要となります。このため、PostgreSQL 9.1以上での動作では非常に推奨されますhttp://trac.osgeo.org/gdal/wiki/DownloadSource/からダウンロード可能です。

オプション

  • GDAL (擬似オプション)。ラスタを求めておらず、かつCREATE EXTENSION postgisによるインストールを気にしない場合に限って放置できます。他のEXTENSIONで、PostGISをEXTENSIONとしてインストールしないと、インストールできないものがあるかも知れないことを心にとどめておいて下さい。このため、GDALサポートでのコンパイルは、非常に望まれます。

  • GTK (GTK+2.0, 2.8+が必要) シェープファイルのローダであるshp2pgsql-guiのコンパイル用です。http://www.gtk.org/にあります。

  • SFCGAL 1.0版以上。追加的な2次元や3次元の高度な解析関数をPostGISで使うために使用するものです。「高度な2次元/3次元関数を持つSFCGALを使う」をご覧下さい。また、GEOSを使う2次元関数のうちいくつか(たとえばST_IntersectionやST_Area)は、GEOSでなくSFCGALを使用することができます。PostgreSQLコンフィギュレーション変数postgis.backendによって、SFCGALがインストールされている場合にはエンドユーザがバックエンドを制御することができます(デフォルトではGEOS)。SFCGAL 1.0は少なくともCGAL 4.1とBoost 1.46(http://oslandia.github.io/SFCGAL/installation.htmlをご覧下さい)が必要ですのでご注意下さい。https://github.com/Oslandia/SFCGALにあります

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

  • >Apache Ant (ant)。javaディレクトリ下のドライバのビルドに必要です。Antはhttp://ant.apache.org/にあります。

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

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

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

2.3. ソースの取得

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

wget http://postgis.net/stuff/postgis-2.2.0dev.tar.gz
tar -xvzf postgis-2.2.0dev.tar.gz

これで、カレントディレクトリの下にpostgis-2.2.0devができます。

もしくはsvnレポジトリhttp://svn.osgeo.org/postgis/trunk/からチェックアウトします。

svn checkout http://svn.osgeo.org/postgis/trunk/ postgis-2.2.0dev

新しく作られたpostgis-2.2.0devディレクトトリに移動して、インストールを続けます。

2.4. ソースからのコンパイルとインストール: 詳細

[注記]

多くの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 2.2.0devでは、コンパイルのために、完全なPostgreSQLサーバヘッダが必要です。PostgreSQL 2.2.0dev以上でビルドできます。古い版のPostgreSQLはサポートされません

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

[注記]

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

LDFLAGS=-lstdc++ ./configure [独自オプション]

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

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

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

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

./configure

パラメータを付けない場合には、このコマンドは自動で、PostGISのソースコードのビルドを行うのに必要なコンポーネントやライブラリをシステム上で探します。./configureとするのが一般的な使い方ですが、標準的でない位置に必要なライブラリやプログラムを置いてある場合のために、いくつかのパラメータを受け付けます。

次のリストで、共通して使われるパラメータを示します。 完全なリストについては、--helpまたは--help=shortパラメータを使って下さい。

--prefix=PREFIX

PostGISライブラリとSQLスクリプトのインストール先を指定します。デフォルトでは、検出されたPostgreSQLのインストール先と同じになります。

[注意]

このパラメータは現在のところ壊れていて、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

Proj4はPostGISに必須の投影変換ライブラリです。PostGISのビルドに使う特定のProj4のディレクトリを手動で指定する場合は、このパラメータ(--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-gui

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

--with-raster

ラスタ機能付きでコンパイルします。これによりrtpostgis-2.2.0devライブラリとrtpostgis.sqlファイルが生成されます。最終リリースでは、デフォルトでラスタ機能付きにする予定ですので、このパラメータ自体は不要になる可能性があります。

--with-topology

トポロジ機能付きでコンパイルします。これによりtopology.sqlファイルが生成されます。トポロジに必要なロジックは全てpostgis-2.2.0devライブラリ内に作られるので、関連ライブラリはありません。

--with-gettext=no

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

[注記]

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

./autogen.sh

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

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

2.4.2. ビルド

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フォルダにあるので、コメントを作成する必要はありません。

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.4.3. PostGIS EXTENSIONのビルドとデプロイ

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

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

make comments

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

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

cd extensions
cd postgis
make clean
make 
make install
cd ..
cd postgis_topology
make clean
make 
make install
          

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

開発用と異なる別のサーバでEXTENSIONを手動でインストールしたい場合は、サーバにない時に必要となる通常のPostGISのバイナリだけでなく、次のファイルをextensionsフォルダからPostgreSQLインストール先のPostgreSQL / share / extensionフォルダに複写します。

  • 指定されていない場合のインストールするextensionの版等の情報を示す制御ファイpostgis.control, postgis_topology.control

  • EXTENSION毎の/sqlフォルダにあるファイル全て。extensions/postgis/sql/*.sql, extensions/postgis_topology/sql/*.sqlはPostgreSQL share/extensionフォルダの最上位に複写する必要があることに注意して下さい。

以上を実行すると、PgAdmin -> extensionでpostgis, postgis_topologyが有効なEXTENSIONとして見えます。

psqlを使う場合は、次のクエリを実行してEXTENSIONがインストールされていることを確認できます。

SELECT name, default_version,installed_version 
FROM pg_available_extensions WHERE name LIKE 'postgis%' ;
      name       | default_version | installed_version
-----------------+-----------------+-------------------
postgis          | 2.2.0dev     | 2.2.0dev
postgis_topology | 2.2.0dev      | 

クエリを行ったデータベースにEXTENSIONがインストールされている場合は、installed_versionカラムに記載が見えます。レコードが返ってこない場合は、PostGIS EXTENSIONがインストールされていないことになります。PgAdmin III 1.14以上では、データベースブラウザツリーのextensionsセクションで提供されていて、右クリックでアップグレードまたアンインストールできます。

有効なEXTENSIONがある場合、pgAdmin EXTENSIONインタフェースまたは次のSQLの実行によって、選択したデータベースにPostGIS EXTENSIONをインストールできます。

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION postgis_tiger_geocoder;

psqlでは、どの版が、どのスキーマにインストールされているかを見ることができます。

\connect mygisdb
\x 
\dx postgis*
インストール済みの拡張の一覧
-[ RECORD 1 ]-------------------------------------------------
-
名前        | postgis
バージョン  | 2.2.0dev
スキーマ    | public
説明        | PostGIS geometry, geography, and raster spat..
-[ RECORD 2 ]-------------------------------------------------
-
名前        | postgis_tiger_geocoder
バージョン  | 2.2.0dev
スキーマ    | tiger
説明        | PostGIS tiger geocoder and reverse geocoder
-[ RECORD 3 ]-------------------------------------------------
-
名前        | postgis_topology
バージョン  | 2.2.0dev
スキーマ    | topology
説明        | PostGIS topology spatial types and functions
[警告]

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

この素晴らしいEXTENSION機能を使わずに2.2.0devをインストールした場合でもEXTENSIONベースに変更することができます。まずpostgis_upgrade_22_minor.sql,raster_upgrade_22_minor.sql,topology_upgrade_22_minor.sqlのアップグレードスクリプトを実行して最新版にアップグレードします

ラスタ機能無しでPostGISをインストールした場合には、最初にラスタ機能をインストールする必要があります(rtpostgis.sqlを使います)。

それから、次のコマンドを実行して、個々のEXTENSIONについて、関数をパッケージ化します。

CREATE EXTENSION postgis FROM unpackaged;
CREATE EXTENSION postgis_topology FROM unpackaged;
CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged;

2.4.4. テスト

PostGISのテストを行うには、次のコマンドを実行します。

make check

このコマンドで、実際のPostgreSQLデータベースに対して生成したライブラリを使用した、様々なチェックとレグレッションテストを行います。

[注記]

PostgreSQL, GEOS または Proj4 を標準の位置にインストールしていない場合には、環境変数LD_LIBRARY_PATHに、ライブラリの位置を追加する必要があるかも知れません。

[注意]

現在のところmake checkは、チェックを行う際に 環境変数PATHPGPORTによっています。コンフィギュレーションパラメータ--with-pgconfigを使って特定したPostgreSQLではありません。PATHを編集して、コンフィギュレーションの際に検出したPostgreSQLと一致するようにして下さい。もしくは、間もなく襲ってくる頭痛の準備をしておいて下さい。

成功した場合は、テストの出力は次のようなかんじになります。

CUnit - A Unit testing framework for C - Version 2.1-0
     http://cunit.sourceforge.net/


Suite: print_suite
  Test: test_lwprint_default_format ... passed
  Test: test_lwprint_format_orders ... passed
  Test: test_lwprint_optional_format ... passed
  Test: test_lwprint_oddball_formats ... passed
  Test: test_lwprint_bad_formats ... passed
Suite: misc
  Test: test_misc_force_2d ... passed
  Test: test_misc_simplify ... passed
  Test: test_misc_count_vertices ... passed
  Test: test_misc_area ... passed
  Test: test_misc_wkb ... passed
Suite: ptarray
  Test: test_ptarray_append_point ... passed
  Test: test_ptarray_append_ptarray ... passed
  Test: test_ptarray_locate_point ... passed
  Test: test_ptarray_isccw ... passed
  Test: test_ptarray_signed_area ... passed
  Test: test_ptarray_desegmentize ... passed
  Test: test_ptarray_insert_point ... passed
  Test: test_ptarray_contains_point ... passed
  Test: test_ptarrayarc_contains_point ... passed
Suite: PostGIS Computational Geometry Suite
  Test: test_lw_segment_side ... passed
  Test: test_lw_segment_intersects ... passed
  Test: test_lwline_crossing_short_lines ... passed
  Test: test_lwline_crossing_long_lines ... passed
  Test: test_lwline_crossing_bugs ... passed
  Test: test_lwpoint_set_ordinate ... passed
  Test: test_lwpoint_get_ordinate ... passed
  Test: test_point_interpolate ... passed
  Test: test_lwline_clip ... passed
  Test: test_lwline_clip_big ... passed
  Test: test_lwmline_clip ... passed
  Test: test_geohash_point ... passed
  Test: test_geohash_precision ... passed
  Test: test_geohash ... passed
  Test: test_geohash_point_as_int ... passed
  Test: test_isclosed ... passed
Suite: buildarea
  Test: buildarea1 ... passed
  Test: buildarea2 ... passed
  Test: buildarea3 ... passed
  Test: buildarea4 ... passed
  Test: buildarea4b ... passed
  Test: buildarea5 ... passed
  Test: buildarea6 ... passed
  Test: buildarea7 ... passed
Suite: clean
  Test: test_lwgeom_make_valid ... passed
Suite: PostGIS Measures Suite
  Test: test_mindistance2d_tolerance ... passed
  Test: test_rect_tree_contains_point ... passed
  Test: test_rect_tree_intersects_tree ... passed
  Test: test_lwgeom_segmentize2d ... passed
  Test: test_lwgeom_locate_along ... passed
  Test: test_lw_dist2d_pt_arc ... passed
  Test: test_lw_dist2d_seg_arc ... passed
  Test: test_lw_dist2d_arc_arc ... passed
  Test: test_lw_arc_length ... passed
  Test: test_lw_dist2d_pt_ptarrayarc ... passed
  Test: test_lw_dist2d_ptarray_ptarrayarc ... passed
Suite: node
  Test: test_lwgeom_node ... passed
Suite: WKT Out Suite
  Test: test_wkt_out_point ... passed
  Test: test_wkt_out_linestring ... passed
  Test: test_wkt_out_polygon ... passed
  Test: test_wkt_out_multipoint ... passed
  Test: test_wkt_out_multilinestring ... passed
  Test: test_wkt_out_multipolygon ... passed
  Test: test_wkt_out_collection ... passed
  Test: test_wkt_out_circularstring ... passed
  Test: test_wkt_out_compoundcurve ... passed
  Test: test_wkt_out_curvpolygon ... passed
  Test: test_wkt_out_multicurve ... passed
  Test: test_wkt_out_multisurface ... passed
Suite: WKT In Suite
  Test: test_wkt_in_point ... passed
  Test: test_wkt_in_linestring ... passed
  Test: test_wkt_in_polygon ... passed
  Test: test_wkt_in_multipoint ... passed
  Test: test_wkt_in_multilinestring ... passed
  Test: test_wkt_in_multipolygon ... passed
  Test: test_wkt_in_collection ... passed
  Test: test_wkt_in_circularstring ... passed
  Test: test_wkt_in_compoundcurve ... passed
  Test: test_wkt_in_curvpolygon ... passed
  Test: test_wkt_in_multicurve ... passed
  Test: test_wkt_in_multisurface ... passed
  Test: test_wkt_in_tin ... passed
  Test: test_wkt_in_polyhedralsurface ... passed
  Test: test_wkt_in_errlocation ... passed
Suite: WKB Out Suite
  Test: test_wkb_out_point ... passed
  Test: test_wkb_out_linestring ... passed
  Test: test_wkb_out_polygon ... passed
  Test: test_wkb_out_multipoint ... passed
  Test: test_wkb_out_multilinestring ... passed
  Test: test_wkb_out_multipolygon ... passed
  Test: test_wkb_out_collection ... passed
  Test: test_wkb_out_circularstring ... passed
  Test: test_wkb_out_compoundcurve ... passed
  Test: test_wkb_out_curvpolygon ... passed
  Test: test_wkb_out_multicurve ... passed
  Test: test_wkb_out_multisurface ... passed
  Test: test_wkb_out_polyhedralsurface ... passed
:
Suite: Geodetic Suite
  Test: test_sphere_direction ... passed
  Test: test_sphere_project ... passed
  Test: test_lwgeom_area_sphere ... passed
  Test: test_signum ... passed
  Test: test_gbox_from_spherical_coordinates ... passed
:
  Test: test_geos_noop ... passed
Suite: Internal Spatial Trees
  Test: test_tree_circ_create ... passed
  Test: test_tree_circ_pip ... passed
  Test: test_tree_circ_pip2 ... passed
  Test: test_tree_circ_distance ... passed
Suite: triangulate
  Test: test_lwgeom_delaunay_triangulation ... passed
Suite: stringbuffer
  Test: test_stringbuffer_append ... passed
  Test: test_stringbuffer_aprintf ... passed
Suite: surface
  Test: triangle_parse ... passed
  Test: tin_parse ... passed
  Test: polyhedralsurface_parse ... passed
  Test: surface_dimension ... passed
Suite: homogenize
  Test: test_coll_point ... passed
  Test: test_coll_line ... passed
  Test: test_coll_poly ... passed
  Test: test_coll_coll ... passed
  Test: test_geom ... passed
  Test: test_coll_curve ... passed
Suite: force_sfs
  Test: test_sfs_11 ... passed
  Test: test_sfs_12 ... passed
  Test: test_sqlmm ... passed
Suite: out_gml
  Test: out_gml_test_precision ... passed
  Test: out_gml_test_srid ... passed
  Test: out_gml_test_dims ... passed
  Test: out_gml_test_geodetic ... passed
  Test: out_gml_test_geoms ... passed
  Test: out_gml_test_geoms_prefix ... passed
  Test: out_gml_test_geoms_nodims ... passed
  Test: out_gml2_extent ... passed
  Test: out_gml3_extent ... passed
Suite: KML Out Suite
  Test: out_kml_test_precision ... passed
  Test: out_kml_test_dims ... passed
  Test: out_kml_test_geoms ... passed
  Test: out_kml_test_prefix ... passed
Suite: GeoJson Out Suite
  Test: out_geojson_test_precision ... passed
  Test: out_geojson_test_dims ... passed
  Test: out_geojson_test_srid ... passed
  Test: out_geojson_test_bbox ... passed
  Test: out_geojson_test_geoms ... passed
Suite: SVG Out Suite
  Test: out_svg_test_precision ... passed
  Test: out_svg_test_dims ... passed
  Test: out_svg_test_relative ... passed
  Test: out_svg_test_geoms ... passed
  Test: out_svg_test_srid ... passed
Suite: X3D Out Suite
  Test: out_x3d3_test_precision ... passed
  Test: out_x3d3_test_geoms ... passed

--Run Summary: Type      Total     Ran  Passed  Failed
               suites       27      27     n/a       0
               tests       198     198     198       0
               asserts    1728    1728    1728       0

Creating database 'postgis_reg' 
Loading PostGIS into 'postgis_reg' 
PostgreSQL 9.3beta1 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.4.5-8) 4.4.5, 64-bit
  Postgis 2.1.0SVN - r11415 - 2013-05-11 02:48:21
  GEOS: 3.4.0dev-CAPI-1.8.0 r3797
  PROJ: Rel. 4.7.1, 23 September 2009

Running tests

 loader/Point .............. ok 
 loader/PointM .............. ok 
 loader/PointZ .............. ok 
 loader/MultiPoint .............. ok 
 loader/MultiPointM .............. ok 
 loader/MultiPointZ .............. ok 
 loader/Arc .............. ok 
 loader/ArcM .............. ok 
 loader/ArcZ .............. ok 
 loader/Polygon .............. ok 
 loader/PolygonM .............. ok 
 loader/PolygonZ .............. ok 
 loader/TSTPolygon ......... ok 
 loader/TSIPolygon ......... ok 
 loader/TSTIPolygon ......... ok 
 loader/PointWithSchema ..... ok 
 loader/NoTransPoint ......... ok 
 loader/NotReallyMultiPoint ......... ok 
 loader/MultiToSinglePoint ......... ok 
 loader/ReprojectPts ........ ok 
 loader/ReprojectPtsGeog ........ ok 
 loader/Latin1 .... ok 
 binary .. ok 
 regress .. ok 
 regress_index .. ok 
 regress_index_nulls .. ok 
 regress_selectivity .. ok 
 lwgeom_regress .. ok 
 regress_lrs .. ok 
 removepoint .. ok 
 setpoint .. ok 
 simplify .. ok 
 snaptogrid .. ok 
 summary .. ok 
 affine .. ok 
 empty .. ok 
 measures .. ok 
 legacy .. ok 
 long_xact .. ok 
 ctors .. ok 
 sql-mm-serialize .. ok 
 sql-mm-circularstring .. ok 
 sql-mm-compoundcurve .. ok 
 sql-mm-curvepoly .. ok 
 sql-mm-general .. ok 
 sql-mm-multicurve .. ok 
 sql-mm-multisurface .. ok 
 polyhedralsurface .. ok 
 polygonize .. ok 
 postgis_type_name .. ok 
 geography .. ok 
 out_geometry .. ok 
 out_geography .. ok 
 in_geohash .. ok 
 in_gml .. ok 
 in_kml .. ok 
 iscollection .. ok 
 regress_ogc .. ok 
 regress_ogc_cover .. ok 
 regress_ogc_prep .. ok 
 regress_bdpoly .. ok 
 regress_proj .. ok 
 regress_management .. ok 
 dump .. ok 
 dumppoints .. ok 
 boundary .. ok 
 wmsservers .. ok 
 wkt .. ok 
 wkb .. ok 
 tickets .. ok 
 typmod .. ok 
 remove_repeated_points .. ok 
 split .. ok 
 relate .. ok 
 bestsrid .. ok 
 concave_hull .. ok 
 hausdorff .. ok 
 regress_buffer_params .. ok 
 offsetcurve .. ok 
 relatematch .. ok 
 isvaliddetail .. ok 
 sharedpaths .. ok 
 snap .. ok 
 node .. ok 
 unaryunion .. ok 
 clean .. ok 
 relate_bnr .. ok 
 delaunaytriangles .. ok 
 in_geojson .. ok 
 uninstall .. ok (4112)

Run tests: 90

2.4.5. インストール

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

[注記]

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

2.5. PostgreSQL 9.1より前での空間データベースの作成

PostGISデータベースを作る最初のステップは、単純なPostgreSQLデータベースの作成です。

createdb [データベース名]

多くのPostGIS関数は、PL/pgSQL手続き言語で書かれています。次のステップは、PL/pgSQL言語を新たに作成したデータベースで有効にすることです。次のコマンドを実行します。PostgreSQL 8.4以上では、通常は既にインストールされています。

createlang plpgsql [データベース名]

次に、PostGISオブジェクトと関数定義をデータベースにロードします。定義ファイルpostgis.sql(コンフィギュレーション段階で指定した[prefix]/share/contribにあります)をロードします。

psql -d [データベース名] -f postgis.sql

完全なEPSG座標系定義IDセットについては、spatial_ref_sys.sql定義ファイルをロードしてspatial_ref_sysテーブルを生成して下さい。これによりジオメトリ関数ST_Transform()が実行できるようになります。

psql -d [データベース名] -f spatial_ref_sys.sql

PostGISが持つ関数についての助けとなるコメントを求めるなら、postgis_comments.sqlを、データベースにロードします。コメントは、psqlターミナルウィンドウで単に\dd [function_name]とすれば見ることができます。ロードは次のようにします。

psql -d [データベース名] -f postgis_comments.sql

ラスタ機能をインストールします。

psql -d [データベース名] -f rtpostgis.sql

ラスタ機能のコメントをインストールします。ラスタ関数ごとの簡易説明が提供されます。psqlまたはPgAdmin等の関数コメントを表示できるPostgreSQLツールで使えます。

psql -d [データベース名] -f raster_comments.sql

トポロジ機能をインストールします。

psql -d [データベース名] -f topology/topology.sql

トポロジ機能のコメントをインストールします。トポロジ関数/型ごとの簡易説明が提供されます。psqlまたはPgAdmin等の関数コメントを表示できるPostgreSQLツールで使えます。

psql -d [データベース名] -f topology/topology_comments.sql

以前の版の古いバックアップを新しいデータベースにリストアする予定の場合には、次を実行します。

psql -d [データベース名] -f legacy.sql

[注記]

テーブルを回復し、MapServerやGeoServerのようなアプリケーションで動作させるのに必要な最低限をインストールするにはlegacy_minimal.sqlという選択肢があります。distance/length等のようなものを使うビューがあるなら、完全なlegacy.sqlが必要になります。

リストアとクリーンアップを行った後で非推奨関数を消すためにuninstall_legacy.sqlを実行できます。

2.6. EXTENSIONを使った空間データベースの生成

PostgreSQL 9.1以上を使っていて、extensions/のPostGISモジュールをコンパイルとインストールを行っている場合は、新しい方法で空間データベースを生成できます。

createdb [データベース名]

PostGIS EXTENSIONの中核によって、ジオメトリ、ジオグラフィ、ラスタ、spatial_ref_sysおよび全ての関数とコメントがインストールされます。次のコマンドを実行するだけです。

CREATE EXTENSION postgis;

psql -d [データベース名] -c "CREATE EXTENSION postgis;"

トポロジは別のEXTENSIONとして用意されています。次のコマンドでインストールします。

psql -d [データベース名] -c "CREATE EXTENSION postgis_topology;"

以前の版の古いバックアップを新しいデータベースにリストアする予定の場合には、次を実行します。

psql -d [データベース名] -f legacy.sql

リストアとクリーンアップを行った後で非推奨関数を消すためにuninstall_legacy.sqlを実行できます。

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

Tigerジオコーダのような追加機能は、PostGISディストリビューションに含まれていないことがありますが、postgis-2.2.0dev.tar.gzファイルには常に入っています。ここで提供する説明はextras/tiger_geocoder/tiger_2011/READMEにもあります。

indows上でtarの展開ができない場合は、http://www.7-zip.org/でPostGISのアーカイブファイルを展開できます。

2.7.1. TigerジオコーダをPostGISデータベースで有効にする: EXTENSIONを使用

PostgreSQL 9.1以上とPostGIS 2.1.0を使用している場合は、Tigerジオコーダのインストールで、新しいEXTENSIONモデルの利点を得ることができます。次のようにします。

  1. まず、通常の方法で、PostGIS 2.1.0のバイナリを取得するか、コンパイルしてインストールします。これにより重要なEXTENSIONファイルとTigerジオコーダのファイルがインストールされます。

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

    CREATE EXTENSION postgis;                
    CREATE EXTENSION fuzzystrmatch;
    CREATE EXTENSION postgis_tiger_geocoder;
  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テーブルの、実行ファイルやサーバのパスを持つ新しいレコードを生成します。

    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. それから、カスタムプロファイルの名前を使用するために、SQL関数Loader_Generate_Nation_ScriptLoader_Generate_Scriptを実行します。新しいプロファイルを使用して国のロードを行う例として、次を実行します。

    SELECT Loader_Generate_Nation_Script('debbie');

2.7.1.1. Tigerジオコーダ通常インストールのEXTENSIONモデルへの変換

EXTENSIONモデルを使わずにTigerジオコーダをインストールしている場合に、次のようにして、EXTENSIONモデルに変換できます。

  1. 「Tigerジオコーダのアップグレード」の指示に従って非EXTENSIONモデルのアップグレードを行います。

  2. psqlまたはpgAdminでデータベースに接続して、次のコマンドを実行します。

    CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged;

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

人々の多数の不平のひとつは、ジオコーディング前の準備に使用する住所正規化関数Normalize_Addressです。正規化関数は完璧には程遠く、不完全性の穴をふさぐ試みに、膨大なリソースが取られています。そこで、はるかに良い住所標準化エンジンを持つ他のプロジェクトと統合しました。このプロジェクトは、現在は、別個のPAGCサブプロジェクトです。PostgreSQL住所標準化EXTENSIONのソースコードはPAGC PostgreSQL Address Standardizerからダウンロードできます。この新しい正規化機能を使用するには、PAGC EXTENSIONをコンパイルして、対象データベースにEXTENSIONとしてインストールします。

PAGCプロジェクトと、とりわけ住所標準化機能の特別の一部とは、ほとんどのNixシステム上に通常インストールされているPCREに依存しますが、最新版をhttp://www.pcre.org/からダウンロードできます。また、PerlとRegexp::Assembleがインストールされている必要があります。

Windowsユーザは、PostGIS 2.1以上のバンドルが、address_standardizerを既に含んでいますので、コンパイルの必要が無く、CREATE EXTENSIONに進めます。

Regex::Assembleをインストールします。

cpan Regexp::Assemble

Ubuntu / Debianを使用している場合は、次のようにする必要があるかも知れません。

sudo perl -MCPAN -e "install Regexp::Assemble"

コンパイルします。

svn co svn://svn.code.sf.net/p/pagc/code/branches/sew-refactor/postgresql address_standardizer
cd address_standardizer
make
# 標準の位置にPCREが無い場合は、次を実行してみて下さい。
# make SHLIB_LINK="-L/path/pcre/lib -lpostgres -lpgport -lpcre" CPPFLAGS="-I.  -I/path/pcre/include" 
make install

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

CREATE EXTENSION address_standardizer;

このEXTENSIONを、postgis_tiger_geocoderをインストールしたデータベースと同じところにインストールしたら、Normalize_AddressのかわりにPagc_Normalize_Addressを使えるようになります。このEXTENSIONは、すばらしいことにTiger非依存ですので、国際的な住所といった他のデータソースで使えます。

2.7.2. TigerジオコーダをPostGISデータベースで有効にする: EXTENSION不使用

まず、上述の手順でPostGISをインストールします。

extrasフォルダが無い場合、http://postgis.net/stuff/postgis-2.2.0dev.tar.gzをダウンロードします。

tar xvfz postgis-2.2.0dev.tar.gz

cd postgis-2.2.0dev/extras/tiger_geocoder/tiger_2011

tiger_loader_2012.sqlを編集して、実行ファイル等のパスを変更します。または、インストール後にloader_platformテーブルを更新することもできます。このファイルもloader_platformテーブルも編集しない場合には、一般的なアイテム位置になります。SQL関数Loader_Generate_Nation_ScriptLoader_Generate_Scriptを実行した後で、生成されたスクリプトを編集しなければならなくなります。

初めてTigerジオコーダをインストールする場合は、Windowsではcreate_geocode.batを、またLinux/Unix/MacOS Xではcreate_geocode.shを、使用するPostgreSQLにとって独自の設定に変更したうえで、コマンドラインから対応するスクリプトを実行します。

データベースにtigerスキーマがあることを確認します。もし無い場合は、次の行を参考に、コマンドを実行します。

ALTER DATABASE geocoder SET search_path=public, tiger;

住所正規化機能は、トリッキーな住所を除いて、大体データなしで動作します。テストを実行して次のように見えることを確認して下さい。

SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, Nevada 89101')) As pretty_address;
pretty_address
---------------------------------------
202 E Fremont St, Las Vegas, NV 89101
                        

2.7.3. Tigerデータのロード

データロードの説明の詳細はextras/tiger_geocoder/tiger_2011/READMEにあります。これは一般的な手順を示しています。

ロードプロセスによって、米センサスウェブサイトから個々の国ファイル、リクエストされた州のデータをダウンロードし、ファイルを展開し、個別の州をそれぞれの州テーブルの集合にロードします。各州のテーブルは、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で国データをロードする必要があります。これによって、環境に合ったローダスクリプトが生成されます。Loader_Generate_Nation_Scriptは、一度の操作で、(2010からの)アップグレードと、新しいインストールが行われます。

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

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

SELECT install_missing_indexes();

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

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

2.7.4. Tigerジオコーダのアップグレード

2.0以上に含まれるTigerジオコーダがインストールされている場合には、どうしても必要な訂正がある際の臨時のアーカイブファイルからでも機能のアップグレードができます。 これは、EXTENSIONでインストールされていないTigerジオコーダで動作します。

extrasフォルダが無い場合、http://postgis.net/stuff/postgis-2.2.0dev.tar.gzをダウンロードします。

tar xvfz postgis-2.2.0dev.tar.gz

cd postgis-2.2.0dev/extras/tiger_geocoder/tiger_2011

Windowsの場合はupgrade_geocoder.batスクリプト、Linux/Unix/MacOS Xの場合はupgrade_geocoder.shスクリプトの位置を特定します。 PostGISデータベースの資格情報を持つように編集します。

2010または2011からアップグレードする場合には、確実にローダスクリプトのコメントアウトを消すと、2012データのロードのための最新のスクリプトを得ます。

対応するスクリプトをコマンドラインから実行します。

次に、全ての国テーブルを削除し、新しい区にテーブルをロードします。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');

生成したスクリプトの実行方法に関する説明は、「Tigerデータのロード」を参照して下さい。これは一度実行する必要があります。

[注記]

2010/2011州テーブルを混在させることができ、それぞれの州について個別にアップグレードできます。2011にアップグレードする前に、まず、Drop_State_Tables_Generate_Scriptを使って、2010州テーブルを削除します。

2.8. 空間データベースをテンプレートから生成する

PostGISのディストリビューション(特にPostGIS >= 1.1.5のWin32インストーラ)の中には、template_postgisというテンプレートにPostGIS関数をロードしていることがあります。PostgreSQLにtemplate_postgisデータベースが存在するなら、ユーザやアプリケーションは、空間データベースの生成をコマンドひとつで済ませられます。この二種類のやり方のどちらを使うににしても、データベースユーザは、新しいデータベースを作成する権限を与えられている必要があります。

シェルからの実行は次の通りです。

# createdb -T template_postgis my_spatial_db

SQLからの実行は次の通りです。

postgres=# CREATE DATABASE my_spatial_db TEMPLATE=template_postgis

2.9. アップグレード

既存の空間データベースのアップグレードは、新しいPostGISオブジェクト定義の置き換えや導入を必要とするとき、慎重を要することがあります。

不幸なことに、定義の全てが実行中のデータベース内で簡単には置き換えられるわけではないので、ダンプ/リロードが最善策となることがあります。

PostGISには、マイナーバージョンアップやバグフィクスリリースの場合に使うソフトアップグレードと、メジャーアップグレードで使うハードアップグレードが用意されています。

PostGISをアップグレードしようとする前にデータのバックアップを取ることは、常に価値のあるものです。pg_dumpで -Fc フラグを使うと、ハードアップグレードによってダンプを常にリストアすることができます。

2.9.1. ソフトアップグレード

EXTENSIONを使ってインストールした場合は、EXTENSIONモデルでアップグレードしなければなりません。 古いSQLスクリプトを使ってインストールした場合は、SQLスクリプトでアップグレードすべきです。適切な方を参照して下さい。

2.9.1.1. 9.1より前またはEXTENSIONを使わないソフトアップグレード

PostGISをEXTENSIONを使わずにインストールした人向けです。EXTENSIONを使っていてこの方法を使うと、次のようなメッセージが現れます。

can't drop ... because postgis extension depends on it

コンパイルとインストールの後にpostgis_upgrade.sqlrtpostgis_upgrade.sqlを探して下さい。たとえば/usr/share/postgresql/9.3/contrib/postgis_upgrade.sqlです。postgis_upgrade.sqlをインストールして下さい。ラスタ機能をインストールしている場合には、/usr/share/postgresql/9.3/contrib/rtpostgis_upgrade.sqlもインストールします。PostGIS 1.*から2.*に移動したり、2.*からr7409以前に落とす場合は、ハードアップグレードして下さい。

psql -f postgis_upgrade.sql -d your_spatial_database

ラスタ機能とトポロジ機能についても同じ手続きです。それぞれrtpostgis_upgrade*.sqltopology_upgrade*.sqlとになります。次のようにします。

psql -f rtpostgis_upgrade.sql -d your_spatial_database
psql -f topology_upgrade.sql -d your_spatial_database
[注記]

アップグレードのための特定の版のpostgis_upgrade*.sqlが見つからない場合は、非常に古い版を使っています。ハードアップグレードが必要です。

PostGIS_Full_Version関数の"procs need upgrade"というメッセージで、この種のアップグレードを実行する必要性についての情報が得られます。

2.9.1.2. 9.1以上でEXTENSIONを使ったソフトアップグレード

EXTENSIONを使ってPostGISをインストールした場合には、EXTENSIONを使ってアップグレードする必要があります。EXTENSIONを使ったマイナーアップグレードはかなり楽です。

ALTER EXTENSION postgis UPDATE TO "2.2.0dev";
ALTER EXTENSION postgis_topology UPDATE TO "2.2.0dev";

次のようなエラー通知が表示されることがあります。

No migration path defined for ... to 2.2.0dev

この場合は、データベースをバックアップして、「EXTENSIONを使った空間データベースの生成」に記述されているように新しいデータベースを生成し、バックアップを新しいデータベースにリストアしなければなりません。

次のようなメッセージを得ることがあります。

Version "2.2.0dev" of extension "postgis" is already installed

この場合は、全てアップデートされていて、安全に無視できます。SVN版から次版(新しい版番号を得ていないもの)にアップグレードしようとしない限り、"next"を版文字列に追加できます。ただし、次回に"next"を削除する必要があります。

ALTER EXTENSION postgis UPDATE TO "2.2.0devnext";
ALTER EXTENSION postgis_topology UPDATE TO "2.2.0devnext";
[注記]

PostGISをバージョン指定なしにインストールした場合には、 しばしばリストアの前のPostGIS EXTENSIONの再インストールをとばすことができます。 バックアップはCREATE EXTENSION postgisだけで、リストアの間に最新版になります。

2.9.2. ハードアップグレード

ハードアップグレードとは、PostGISで利用可能なデータの完全なダンプ/リロードを意味します。PostGISオブジェクトの内部格納状態が変更される場合や、ソフトアップグレードができない場合に、ハードアップグレードが必要です。付録の Release Notesに、版ごとについて、ダンプ/リロード(ハードアップグレード)の要否を記載しています。

ダンプ/リロード作業はpostgis_restore.plスクリプトが補助します。このスクリプトは、PostGIS(古いものを含む)に属する定義を全て飛ばすように注意します。また、重複シンボルエラーや非推奨オブジェクトを持越すことなく、スキーマとデータをPostGISをインストールしたデータベースにリストアできます 。

Windows用に関する追加情報はWindows Hard upgradeにあります。

手続きは次の通りです。

  1. アップグレードしたデータベース(olddbと呼ぶことにしましょう)の「カスタム書式」のダンプを、バイナリBLOBデータを含めたダンプを指定して(-b)、verboseモード(-v)で生成します。ユーザはデータベースのオーナーになることができ、PostgreSQLのスーパーアカウントである必要はありません。

    pg_dump -h localhost -p 5432 -U postgres -Fc -b -v -f "/somepath/olddb.backup" olddb
  2. 新しいデータベースにPostGISを、PostGISが無い状態からインストールします。このデータベースをnewdbと呼ぶことにします。この作業に関する説明については「PostgreSQL 9.1より前での空間データベースの作成」「EXTENSIONを使った空間データベースの生成」とを参照して下さい。

    ダンプにあるspatial_ref_sysは、リストアされますが、既にあるspatial_ref_sysを上書きしません。リストア対象のデータベースに公式データセットの訂正が確実に伝わるようにするためです。標準のエントリを上書きしたい場合は、newdbを生成する際にspaltial_ref_sys.sqlファイルをロードしないだけです。

    データベースが本当に古く、ビューや関数に、長く非推奨になっている関数があるような場合には、関数やビューを使えるようにするlegacy.sqlをロードする必要があるでしょう。ただし、本当に必要な場合に限ります。可能なら、ビューや関数をダンプせずにアップグレードすることを検討して下さい。非推奨関数uninstall_legacy.sqlで後から削除することができます。

  3. バックアップを新しいnewdbデータベースにリストアするには、postgis_restore.plを使います。psqlが予期せぬエラーを標準エラー出力に出すことがあります。これらのログを保存しておいて下さい。

    perl utils/postgis_restore.pl "/somepath/olddb.backup" | psql -h localhost -p 5432 -U postgres newdb 2> errors.txt

エラーは次の場合に起こりえます。

  1. ビューまたは関数の中に非推奨のPostGISオブジェクトを使っているものがある場合。これの訂正には、リストア前にlegacy.sqlスクリプトのロードを試してみることができます。非推奨オブジェクトをまだ持っている版のPostGISにリストアして、コードを作り替えた後に再び移動させることもできます。 legacy.sqlを利用する場合は、非推奨関数を使うのをやめたコードに訂正して、uninstall_legacy.sqlをロードするのを忘れないでください。

  2. ダンプファイル内のspatial_ref_sysにあるカスタムレコードが不正なSRIDになっている場合。妥当なSRID値は0より大きく999000より小さくなります。999000から999999の間は内部利用のための予約領域ですが、999999より大きい値は一切使用できません。全ての不正なSRIDを持つカスタムレコードは、予約領域に移動しても保持されます。しかし、spatial_ref_sysテーブルは、保持している不変値と、場合によっては主キー(複数の不正なSRIDが同じ予約領域のSRID値に変換されるとき)を保護するチェック制約を緩くできます。

    これの訂正には、カスタムSRSを妥当値(多分91000から910999の間になります)に複写して、全てのテーブルを新しいSRIDに変換して(UpdateGeometrySRIDを参照して下さい)、不正なエントリをspatial_ref_sysから削除して、次を実行してチェック制約を再構築します。

    ALTER TABLE spatial_ref_sys ADD CONSTRAINT spatial_ref_sys_srid_check check (srid > 0 AND srid < 999000 );

    ALTER TABLE spatial_ref_sys ADD PRIMARY KEY(srid));

2.10. 共通の問題

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

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

2.11. JDBC

JDBC拡張によって、JavaオブジェクトがPostGISの内部型に対応できるようになります。このオブジェクトを使って、PostGISデータベースに問い合わせを出して、PostGISにあるGISデータの描画や計算を行うJavaクライアントを作成することができます。

  1. PostGIS配布物のjava/jdbcサブディレクトリに入ります。

  2. antコマンドを実行します。postgis.jarファイルをJavaライブラリを保存しているところに複写します。

JDBC拡張は、ビルド実行中は現在のCLASSPATHにPostgreSQL JDBCドライバがあるようにしておく必要があります。PostgreSQL JDBCドライバがCLASSPATHに無い場合には、-Dパラメータを使って、個別にJDBCドライバのJARのありかを伝えます。次のようにします。

# ant -Dclasspath=/path/to/postgresql-jdbc.jar

PostgreSQL JDBCドライバはhttp://jdbc.postgresql.org/ からダウンロードできます。

2.12. ローダ/ダンパ

データのローダとダンパは、PostGISのビルドの一部として、自動的にビルド、インストールされます。手動でビルド、インストールするには、次を実行します。

# cd postgis-2.2.0dev/loader
# make
# make install

ローダはshp2pgsqlと呼ばれ、ESRIシェープファイルをPostGIS/PostgreSQLにロードするのに適したSQLに変換します。ダンパはpgsql2shpと呼ばれ、PostGISのテーブル(またはクエリ)からESRIシェープファイルに変換します。より詳しいドキュメントをご覧になるには、オンラインヘルプとマニュアルページをご覧ください。