第2章 インストール

目次

2.1. 簡略版
2.2. 必要なもの
2.3. ソースの取得
2.4. インストール
2.4.1. コンフィギュレーション
2.4.2. ビルド
2.4.3. テスト
2.4.4. インストール
2.5. 空間データベースの作成
2.6. 空間データベースをテンプレートから生成する
2.7. アップグレード
2.7.1. ソフトアップグレード
2.7.2. ハードアップグレード
2.8. 共通の問題
2.9. JDBC
2.10. ローダ/ダンパ

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

2.1. 簡略版

tar xvfz postgis-1.5.1.tar.gz
cd postgis-1.5.1
./configure
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

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

2.2. 必要なもの

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

必須

  • PostgreSQL 8.3以上.PostgreSQLの完全なインストール(サーバヘッダを含む)が必要です. PostgreSQLは http://www.postgresql.org にあります.

    完全なPostgreSQL/PostGISサポートマトリクスとPostGIS/GEOSのサポートマトリクスは http://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS にあります.

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

  • NU 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.1.1版以上.GEOS 3.2 を推奨します. GEOS 3.2 以外では,トポロジ例外の処理が強化され, ST_Bufferで接続部の面取り接合や鋭角接合が可能となり,またバッファの速度が向上しています. GEOSライブラリは,PostGISでの ジオメトリテスト (ST_Touches(), ST_Contains(), ST_Intersects()) や ジオメトリ演算 (ST_Buffer(), ST_Union(), ST_Intersection(), ST_Difference()) を行うのに使われます. GEOSは,http://trac.osgeo.org/geos/ からダウンロードできます.

オプション

  • 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://postgis.refractions.net/download/postgis-1.5.1.tar.gz から,ソースのアーカイブを入手します.

wget http://postgis.refractions.net/download/postgis-1.5.1.tar.gz
tar -xvzf postgis-1.5.1.tar.gz

これで,カレントディレクトリの下に postgis-1.5.1 ができます.

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

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

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

2.4. インストール

[注意]

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

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

PostgreSQLのインストールを済ませていない場合は,PostgreSQLインストールガイドをご覧ください. http://www.postgresql.org (訳注: 日本語版は http://www.postgresql.jp/) にあります.

[注意]

GEOS機能のために,PostgreSQLをインストールする際に,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/160 をご覧ください.

--with-pgconfig=FILE

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

--with-geosconfig=FILE

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

--with-projdir=DIR

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

--with-gui

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

[注意]

PostGISを SVN レポジトリを得た場合は,本当は最初に次のスクリプトを実行します.

./autogen.sh

このスクリプトは,PostGISのインストールのカスタマイズを行うための configure スクリプトを生成するものです.

PostGISをtarballから得た場合は, configure が既に生成されているので ./autogen.sh を実行する必要はありません.

2.4.2. ビルド

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

make

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

PostGIS 1.4.0版からは,全ての関数に文書から生成されるコメントが付きます. これらのコメントを後ほどインストールするには,次のコマンドを実行しますが,docbookが必要です. postgis_comments.sql が docフォルダに tar.gz でパッケージ化されます. tarballからインストールする場合は,postgis_comments.sql が docフォルダに入っているので,コメントを生成する必要はありません.

make comments

2.4.3. テスト

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

make check

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

[注意]

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

[注意]

現在のところ make check は,チェックを行う際に 環境変数 PATHPGPORT によっています. コンフィギュレーションパラメータ --with-pgconfig を使って特定した PostgreSQL ではありません. PATHを編集して,コンフィギュレーションの際に検出したPostgreSQLと一致するようにして下さい. もしくは,間もなく襲ってくる頭痛の準備をしておいて下さい. このバグのトラックについては http://trac.osgeo.org/postgis/ticket/186 をご覧ください.

成功したら,テストの出力は次のようなかんじになります.

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


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_lwpoint_set_ordinate() ... passed
  Test: test_lwpoint_get_ordinate() ... passed
  Test: test_lwpoint_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
Suite: PostGIS Measures Suite
  Test: test_mindistance2d_recursive_tolerance() ... passed

--Run Summary: Type      Total     Ran  Passed  Failed
			   suites        2       2     n/a       0
			   tests        14      14      14       0
			   asserts      84      84      84       0


Creating spatial db postgis_reg
TMPDIR is /tmp/pgis_reg_15328

 PostgreSQL 8.3.7 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
 Postgis 1.4.0SVN - 2009-05-25 20:21:55
   GEOS: 3.1.0-CAPI-1.5.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
 wkt. 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
 geojson. ok
 gml. ok
 svg. ok
 kml. ok
 regress_ogc. ok
 regress_bdpoly. ok
 regress_proj. ok
 regress_ogc_cover. ok
 regress_ogc_prep. ok

Run tests: 42
Failed: 0

2.4.4. インストール

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

make install

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

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

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

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

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

make comments-install

[注意]

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

2.5. 空間データベースの作成

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

createdb [yourdatabase]

多くのPostGIS関数は,PL/pgSQL手続き言語で書かれています. 次のステップは,PL/pgSQL言語を新たに作成したデータベースで有効にすることです. 次のコマンドを実行します.

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

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

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

シェルからの実行:

# createdb -T template_postgis my_spatial_db

SQLからの実行:

postgres=# CREATE DATABASE my_spatial_db TEMPLATE=template_postgis

2.7. アップグレード

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

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

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

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

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

コンパイル後に postgis_upgrade*.sql を探して下さい. PostGISの版にあったものをインストールします. たとえば,PostGIS 1.3 から 1.5 に上げるには postgis_upgrade_13_to_15.sql を使います.

$ psql -f postgis_upgrade_13_to_15.sql -d your_spatial_database

ソフトアップグレードができなかった場合に,スクリプトは強制終了されて,ハードアップグレードが必要であると警告されますので,先にソフトアップグレードを実行することをためらってはなりません.

[注意]

postgis_upgrade*.sql ファイルが見つからない場合は,1.1版より前の版のものを使っているかも知れません.この場合,次のコマンドで手動で生成する必要があります.

$ utils/postgis_proc_upgrade.pl postgis.sql > postgis_upgrade.sql

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

ハードアップグレードは,PostGISデータベースの完全なダンプ/リロードを意味します. PostGISオブジェクトの内部ストレージが変更されていたり, ソフトアップグレードができない場合には,ハードアップグレードが必要です. 付録の Release Notes に,それぞれの版でアップグレードする際にダンプ/リロード(ハードアップグレード)が必要かの報告があります.

PostGISは,pg_dump -Fc コマンドで生成されたダンプのリストアを行うユーティリティスクリプトを提供しています. 実験版ですが,このスクリプトの出力をファイルにリダイレクトすると,問題のある場合に助けになります. 手続きは次の通りです.

アップグレードしたいデータベース("olddb"と呼ぶことにしましょう)のダンプを「カスタム書式」で作成します.

$ pg_dump -Fc olddb > olddb.dump

PostGISのアップグレードを行うダンプを,新しいデータベースにリストアします. 新しいデータベースは存在している必要はありません. postgis_restore は,ダンプファイル名の後にcreatedbパラメータを指定すると,これを受けつけます. たとえば,データベースでデフォルトでない文字コードを使っているとしても,このスクリプトを使うことができます. 新しいデータベースは newdb と呼ぶことにして,このデータベースの文字コードをUNICODEにするなら,次のようになります.

$ sh utils/postgis_restore.pl postgis.sql newdb olddb.dump -E=UNICODE > restore.log

全てのリストアしたダンプオブジェクトが本当にリストアされ, postgis.sqlで定義されたオブジェクトと矛盾しないことをチェックします.

$ grep ^KEEPING restore.log | less

PostgreSQL < 8.0 から >= 8.0 にアップグレードした際は, geometry_columns テーブルにあって,もはや必要でない attrelid, varattnum, stats の各カラムを削除したくなるかも知れません. 保持していても困りません. *本当に必要な時に削除すると困ります*!

$ psql newdb -c "ALTER TABLE geometry_columns DROP attrelid"
$ psql newdb -c "ALTER TABLE geometry_columns DROP varattnum"
$ psql newdb -c "ALTER TABLE geometry_columns DROP stats"

spatial_ref_sys テーブルは,独自の追加が保持されることを保障するために,ダンプからリストアされます. しかし,ディストリビュートされた spatial_ref_sys テーブルは,変更を含んでいますので, エントリをバックアップし,テーブルを削除して,新しい spatial_ref_sys テーブルを入れるべきです. 独自の追加を作っているのでしたら, テーブルをアップグレードする前にバックアップを取る方法を知っていると仮定します. 新しいものとの入れ替えは,このように実行します.

$ psql newdb
newdb=> truncate spatial_ref_sys;
TRUNCATE
newdb=> \i spatial_ref_sys.sql

2.8. 共通の問題

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

  1. PostgreSQL 8.1 以上をインストールしているか,実行中のPostgreSQLと同じ版のソースでコンパイルしているか,をチェックします.(Linuxの)ディストリビューションによって既にPostgreSQLがインストールされている時や, PostgreSQLを以前にインストールして忘れた場合に, 混乱が発生することがあります.PostGIS は PostgreSQL 8.1 以上で動作します.古い版のものを使った場合には,おかしな予想外のエラーメッセージが表示されます.実行中のPostgreSQLの版をチェックするには,psqlを使ってデータベースを接続して,次のクエリを実行して下さい.

    SELECT version();

    RPMベースのディストリビューションを実行している場合, プリインストールされたパッケージが存在するかのチェックは,rpm コマンドを使って rpm -qa | grep postgresql でチェックできます.

また,コンフィギュアが正しくPostgreSQL,Proj4ライブラリ,GEOSライブラリの位置を検出したかチェックして下さい.

  1. コンフィギュアからの出力で postgis_config.h ファイルが作られます. POSTGIS_PGSQL_VERSIONPOSTGIS_PROJ_VERSIONPOSTGIS_GEOS_VERSION 変数が正しくセットされたかをチェックして下さい.

2.9. 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.10. ローダ/ダンパ

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

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

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