第2章 インストール

目次

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データベースで有効にする
2.7.2. Tigerジオコーダのアップデート
2.7.3. Tigerデータのロード
2.8. 空間データベースをテンプレートから生成する
2.9. アップグレード
2.9.1. ソフトアップグレード
2.9.2. ハードアップグレード
2.10. 共通の問題
2.11. JDBC
2.12. ローダ/ダンパ

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

2.1. 簡略版

[注記]

ラスタ機能は現在は選択可能ですが、デフォルトではインストールされます。PostgreSQL 9.1以上のエクステンションモデルを使ってインストールするには必須です。PostgreSQL 9.1以上を使用する場合は「PostGIS EXTENSIONのビルドとデプロイ」を参照してください。

全ての.sqlファイルは、PostgreSQLのインストール先の share/contrib/postgis-2.0.0 フォルダにインストールされます。

postgis_comments.sql, raster_comments.sql, topology_comments.sql は、関数ごとの簡易説明を生成するもので、pgAdmin IIIまたはpsqlを介してアクセスできます。psqlでは\dd ST_SetPoint等のコマンドを使います。

tar xvfz postgis-2.0.0.tar.gz
cd postgis-2.0.0
./configure --with-raster --with-topology --with-gui
make
make install
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 doc/topology_comments.sql

[注記]

topology_comments.sqlは選択機能ですのでmake installまたはmake comments installでインストールされません。しかしmake commentsまたはmake topology_comments.sqlを実行すると、docsフォルダに生成されます。

本章の残りで、上記のステップそれぞれの説明をします。

2.2. 必要なもの

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

必須

  • PostgreSQL 8.4以上。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.2.2版以上。GEOS 3.3.2以上を推奨します。GEOS 3.3以外では、トポロジ例外処理やジオメトリ評価の改善、ST_ValidDetailやST_MakeValidといったジオメトリ評価等の主要な強化が使えません。また、GEOS 3.3.2以上はトポロジ機能に必須です。GEOSはhttp://trac.osgeo.org/geos/からダウンロードできます。3.3以上は古い版との後方互換があるのでアップグレードはかなり安全です。

  • 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はhttp://oss.metaparadigm.com/json-c/からダウンロード可能です。

  • GDAL 1.6以上 (古い版では一部機能が働かないので1.9以上が望ましいです)。ラスタ機能に必要で、PostGIS 2.0の最終リリースには必須になります。http://trac.osgeo.org/gdal/wiki/DownloadSourceからダウンロード可能です。

オプション

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

  • CUnit (CUnit)。レグレッションテスト用。http://cunit.sourceforge.net/

  • javaディレクトリ下のドライバのビルドを行うにはApache Ant (ant)が必要です。Antはhttp://ant.apache.org/からダウンロード可能です。

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

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

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

2.3. ソースの取得

ダウンロードサイトhttp://www.postgis.org/download/postgis-2.0.0.tar.gzから、ソースのアーカイブを入手します。

wget http://www.postgis.org/download/postgis-2.0.0.tar.gz
tar -xvzf postgis-2.0.0.tar.gz

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

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

svn checkout http://svn.osgeo.org/postgis/trunk/ postgis-2.0.0

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

2.4. インストール

[注記]

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

本節では、一般的なコンパイル手順を示します。Windows用や他のOS用等にコンパイルするなら、PostGIS Dev Wiki(コンパイルとインストールガイドの節)で、より詳細な助けを見つけるかも知れません。

Windowsユーザの場合、安定的なビルドをスタックビルダまたはPostGIS Windows download siteで入手できます。また、とてもひどい最先端の版のビルドもあり、週1, 2回ビルドしていますし、刺激的なことが発生した際は随時ビルドしています。PostGISの開発中の版で試験する際に使えます。

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

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

[注記]

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

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

これは、古い開発ツールとインチキ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をインストールしているなら発見されますが、発見できない場合や特定の版を使用したい場合は、PostGISに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.0.0ライブラリとrtpostgis.sqlファイルが生成されます。最終リリースでは、デフォルトでラスタ機能付きにする予定ですので、このパラメータ自体は不要になる可能性があります。

--with-topology

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

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

PostGIS EXTENSIONはPostgreSQL 9.1以上で使えます。extensionsフォルダに移動してmake installを実行するとビルドできます。この処理は将来的に、9.1を対象としてコンパイルする時に自動化され、ビルド処理の中に完全に統合されます。

ソースレポジトリからビルドしている場合は、関数の記述を最初にビルドする必要があります。

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を手動でインストールしたい場合は、次のファイルをEXTENSIONフォルダからPostgreSQLインストール先のPostgreSQL / share / extensionフォルダに複写します。通常のPostGISで、サーバに無い場合に必要になるバイナリと同じです。

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

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

実行すると、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.0.0     | 2.0.0
postgis_topology | 2.0.0      | 

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

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

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;

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

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

それから、次のコマンドを実行して、個々のEXTENSIONの関数をEXTENSION形式に更新します。

CREATE EXTENSION postgis FROM unpackaged;
CREATE EXTENSION postgis_topology 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 Suite
  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: PointArray Suite
  Test: test_ptarray_append_point ... passed
  Test: test_ptarray_append_ptarray ... 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_isclosed ... 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
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
:
:
--Run Summary: Type      Total     Ran  Passed  Failed
               suites       17      17     n/a       0
               tests       143     143     143       0
               asserts    1228    1228    1228       0


Creating spatial db postgis_reg
 Postgis 2.0.0SVN - 2011-01-11 15:33:37
   GEOS: 3.3.0-CAPI-1.7.0
   PROJ: Rel. 4.6.1, 21 August 2008

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
 regress. ok
 regress_index. ok
 regress_index_nulls. ok
 lwgeom_regress. ok
 regress_lrs. ok
 removepoint. ok
 setpoint. ok
 simplify. ok
 snaptogrid. ok
 affine. ok
 measures. 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
 out_geometry. ok
 out_geography. 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
 dump. ok
 dumppoints. ok
 wmsservers_new. ok
 tickets. ok
 remove_repeated_points. ok
 split. ok
 relatematch. ok
 regress_buffer_params. ok
 hausdorff. ok
 clean. ok
 sharedpaths. ok
 snap. ok

Run tests: 55
Failed: 0

2.4.5. インストール

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

make install

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

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

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

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

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

make comments-install

[注記]

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

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

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

createdb [yourdatabase]

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

createlang plpgsql [yourdatabase]

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

psql -d [yourdatabase] -f postgis.sql

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

psql -d [yourdatabase] -f spatial_ref_sys.sql

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

psql -d [yourdatabase] -f postgis_comments.sql

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

psql -d [yourdatabase] -f rtpostgis.sql

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

psql -d [yourdatabase] -f raster_comments.sql

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

psql -d [yourdatabase] -f topology/topology.sql

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

psql -d [yourdatabase] -f topology/topology_comments.sql

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

psql -d [yourdatabase] -f legacy.sql

[注記]

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

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

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

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

createdb [yourdatabase]

単純な

CREATE EXTENSION postgis;

によって、PostGIS EXTENSIONの中核によって、PostGISのGEOMETRY, GEOGRAPHY, RASTER, spatial_ref_sysおよび関数とコメントがインストールされます。

psql -d [yourdatabase] -c "CREATE EXTENSION postgis;"

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

psql -d [yourdatabase] -c "CREATE EXTENSION postgis_topology;"

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

psql -d [yourdatabase] -f legacy.sql

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

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

Tigerジオコーダは、地域限定なので中核のPostGISスクリプトでインストール/アップデートされません。extrasフォルダ内にあるものは正規のPostGISインストール/アップグレードの際はデフォルトではインストールされません。Tigerジオコーダのようなextrasは、PostGISディストリビューションには含まれませんが、常にpostgis-2.0.0.tar.gzには存在します。ここで提供する説明はextras/tiger_geocoder/tiger_2010/READMEにもあります。

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

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

まず前述のPostGISのインストールを行います。

extrasフォルダが無い場合はhttp://www.postgis.org/download/postgis-2.0.0.tar.gzをダウンロードして下さい。

tar xvfz postgis-2.0.0.tar.gz

cd postgis-2.0.0/extras/tiger_geocoder/tiger_2010

tiger_loader.sqlのサーバ実行ファイルへのパス等を編集して下さい。

最初のTigerジオコーダのインストールで場合は、Windowsではcreate_geocode.batを、Linux/Unix/MacOS Xではcreate_geocode.shを、それぞれPostgreSQLの設定にあわせて編集します。コマンドラインから編集したスクリプトを実行します。このファイルを編集しない場合には、アイテムの位置が一般的なものになるだけです。Loader_Generate_Script実行後に生成されたスクリプトは編集できます。

データベースにtigerスキーマがあるか確認して下さい。データベースのsearch_pathに含まれているかを確認して、含まれていない場合は、

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.2. Tigerジオコーダのアップデート

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

extrasフォルダが無い場合にはhttp://www.postgis.org/download/postgis-2.0.0.tar.gzをダウンロードします。

tar xvfz postgis-2.0.0.tar.gz

cd postgis-2.0.0/extras/tiger_geocoder/tiger_2010

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

2.7.3. Tigerデータのロード

より詳細なデータロードの説明はextras/tiger_geocoder/tiger_2010/READMEにあります。ここでは一般的な手順に触れるだけです。

ロード処理によって、センサスウェブサイトからそれぞれ求める州のデータをダウンロードし、ファイルを展開し、各州をそれぞれの州テーブルにロードします。 州テーブルはtigerスキーマで定義されているテーブルを継承しているので、全てのデータにアクセスするのは、これらのテーブルへのクエリで十分です。 また、ある州の再読み込みを行う必要がある場合や、それ以上の州が不要である場合に、 Drop_State_Tables_Generate_Scriptを使って州テーブルの集合を削除します。

必要なデータをロードできるようにするため、次のツールが必要です。

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

    Unix系システム: Unix系プラットフォームでは通常インストール済みの実行ファイルunzip

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

  • PostGISをインストールしたときにデフォルトでインストールされるコマンドラインツールshp2pgsql

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

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

データロードについては、求める州のデータをロードするスクリプトをプラットフォームに合わせて生成するLoader_Generate_Scriptを参照して下さい。小さい単位でインストールできることに注意して下さい。求める州全てを一度にロードする必要はありません。必要に応じてロードすることができます。

求める州のダウンロードが終わった後に、次を実行します。

SELECT install_missing_indexes();

as described in Install_Missing_Indexes

動作すべきように動作するかを試すために、ロードした州の住所のジオコードをGeocodeで実行してみます。

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*.sqlを探して下さい。PostGISの版にあったものをインストールします。たとえば、PostGIS 1.3から1.5に上げるには postgis_upgrade_13_to_15.sqlを使います。PostGIS 1.*から2.0に移動したり、2.*からr7409以前に落とす場合は、ハードアップグレードして下さい。

psql -f postgis_upgrade_20_minor.sql -d your_spatial_database

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

psql -f rtpostgis_upgrade_20_minor.sql -d your_spatial_database
psql -f topology_upgrade_20_minor.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.0.0";
ALTER EXTENSION postgis_topology UPDATE TO "2.0.0";

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

No migration path defined for ... to 2.0.0

この場合は、データベースをバックアップして、「EXTENSIONを使った空間データベースの生成」に記述されているように新しいデータベースを生成し、バックアップを新しいデータベースにリストアしなければなりません。 postgis extensionが既にインストールされているとのメッセージを得るかも知れませんが、無視して問題ありません。

[注記]

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

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

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

2.12. ローダ/ダンパ

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

# cd postgis-2.0.0/loader
# make
# make install

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