第2章 インストール

目次

2.1. 必要なもの
2.2. PostGISをソースからコンパイルおよびインストールする
2.2.1. 組み込みテンプレートからPostGIS空間データベースを生成する
2.2.2. アップグレード
2.2.3. 共通の問題
2.3. JDBC
2.4. ローダ/ダンパ

2.1. 必要なもの

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

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

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

  • GNU Make (gmakeまたはmake)。多くのシステムで、GNU makeがデフォルトのmakeになっています。make -vを実行して版を確認して下さい。他版のmakeでは、PostGISのMakefileを完全に処理しきれないかもしれません。

  • (推奨) 投影変換ライブラリ Proj4。Proj4ライブラリはPostGISで座標投影変換をサポートするために使われます。Proj4はhttp://www.remotesensing.org/projからダウンロードできます。

  • (推奨) ジオメトリライブラリ GEOS。GEOSライブラリは、PostGISでジオメトリのチェック (ST_Touches(), ST_Contains(), ST_Intersects())および操作(ST_Buffer(), ST_Union(), ST_Difference()) を提供するために使用します。 GEOSはhttp://geos.refractions.net (訳注: 現在はhttps://trac.osgeo.org/geos/)からダウンロードできます。

2.2. PostGISをソースからコンパイルおよびインストールする

PostGISモジュールは、PostgreSQLバックエンドサーバの拡張です。PostGIS 1.3.6をコンパイルするためにPostgreSQLサーバのヘッダの完全なアクセスが必要です。PostgreSQLのソースコードはhttp://www.postgresql.orgにあります。

PostGIS 1.3.6は、PostgreSQL 7.2.0以上で構築できます。それ以前のPostgreSQLには対応しません

  1. PostGISサーバモジュールをコンパイルする前に、PostgreSQLをコンパイル、インストールする必要があります。

    注記

    GEOS機能の使用を予定しているなら、PostgreSQLを標準C++ライブラリに、明示的にリンクする必要があることもあります。

    LDFLAGS=-lstdc++ ./configure [コンフィギュアオプション]

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

  2. PostGISソースコードのアーカイブはhttp://postgis.refractions.net/download/postgis-1.3.6.tar.gzから取得できます。このアーカイブを解凍します。

    # gzip -d -c postgis-1.3.6.tar.gz | tar xvf -
  3. postgis-1.3.6ディレクトリに移動して、次を実行します。

    # ./configure
    • 投影変換対応が必要なら、Proj4ライブラリをインストールしておく必要があります。./cofigureでProj4が発見できないなら、--with-proj=PATHスイッチを使って、Proj4をインストールしたディレクトリを指定してみて下さい。

    • GEOS機能を使いたい場合は、GEOSライブラリをインストールしておく必要があります。Geos 3.0.3以上を使用した方がいいです。ST_SimplifyPreserveTopologyといった関数で求められます。./cofigureでGEOSが発見できないなら、--with-geos=PATHで、geos-configプログラムへのフルパスを指定してみて下さい。

  4. コンパイルとインストールのコマンドを実行します。

    # make # make install

    pg_configで示される情報を使って全てのファイルがインストールされます。

    • ライブラリは[pkglibdir]/lib/contribにインストールされます。

    • lwpostgis.sqlといったサポートファイルは[prefix]/share/contribにインストールされます。

    • ローダ/ダンパのバイナリは[bindir]/にインストルされます。

  5. 上に挙げたprojが発見できないか4.5以下を使っている場合は、次を実行してインストールして下さい。

    wget http://download.osgeo.org/proj/proj-4.6.0.tar.gz
    tar xvzf proj-4.6.0.tar.gz
    cd proj-4.6.0
    ./configure && make clean && make
    make install
    ldconfig
    cd ..
  6. 上に挙げたgeosが発見できないか3.0以下を使っている場合は、次を実行してインストールして下さい。

    wget http://download.osgeo.org/geos/geos-3.0.3.tar.bz2
    tar xvjf geos-3.0.3.tar.bz2
    cd geos-3.0.3
    ./configure && make clean && make
    make install
    ldconfig
    cd ..
  7. PostGISにはPL/pgSQL手続き型言語の拡張が必要です。lwpostgis.sqlファイルをロードする前に、まずPL/pgSQLを有効にする必要があります。createlangコマンドを使うべきです。なんらかの理由で手動で行いたい場合にはPostgreSQLプログラマガイドに詳細があります。

    # createlang plpgsql [データベース名]
  8. そして、lwpostgis.sql定義ファイルをロードして、PostGISオブジェクトと関数定義をデータベースにロードします。

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

    PostGISサーバ拡張はこれでロードされて、使えるようになります。

  9. 完全なEPSG座標系定義IDのセットについては、spatial_ref_sys.sql定義ファイルをロードして、SPATIAL_REF_SYSを生成して下さい。

    # psql -d [データベース名] -f spatial_ref_sys.sql
  10. PostGISが持つ関数に関する助けとなる記述が必要なら、 postgis_comments.sqlファイルをインストールして下さい。

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

2.2.1. 組み込みテンプレートからPostGIS空間データベースを生成する

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

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

# createdb -T template_postgis my_spatial_db

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

postgres=# CREATE DATABASE my_spatial_db TEMPLATE=template_postgis

2.2.2. アップグレード

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

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

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

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

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

ソフトアップグレードは、lwpostgis_upgrade.sqlスクリプトを空間データベース上で実行することで行われます。

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

ソフトアップグレードが実行できなかった場合は、スクリプトが中止されて、ハードアップグレードを実行する必要がある旨警告されますが、ソフトアップグレードを最初に実行するのをためらってはなりません。

注記

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

$ utils/postgis_proc_upgrade.pl lwpostgis.sql > lwpostgis_upgrade.sql

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

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

この目的のために、PostGISは、pg_dump -Fcコマンドによるダンプを格納するためのユーティリティスクリプトを提供しています。これは試験的なもので、出力をファイルにリダイレクトすることで問題がある場合の解決の助けになります。手続きは次の通りです。

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

$ pg_dump -Fc olddb > olddb.dump

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

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

全ての格納したダンプオブジェクトが本当にダンプから格納されたか、lwpostgis.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=> drop spatial_ref_sys; 
DROP 
newdb=> \i spatial_ref_sys.sql

2.2.3. 共通の問題

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

  1. PostGISディストリビューションをPostgreSQLソースツリーの下のcontribディレクトリに解凍するのが最も簡単です。 しかし、これが何らかの理由で展開できないなら、環境変数PGSQL_SRCにPostgreSQLソースディレクトリのパスを指定します。これで、PostGISのコンパイルができますが、make installはできないので、PostGISライブラリと実行ファイルを適切な位置に自前で複写することになります。

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

    SELECT version();

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

また、Makefile.configの先頭に行った必要な変更を全てチェックして下さい。このチェックは次の通りです。

  1. 投影変換をできるようにしたいなら、Proj4ライブラリをインストールして、Makefile.config内の、USE_PROJの値を1に設定し、PROJ_DIRをインストール先プリフィクスにします。

  2. GEOS関数を使いたい場合は、 GEOSライブラリをインストールし、Makefile.config内の、USE_GEOSを1に設定し、GEOS_DIRをインストール先プリフィクスにします。

2.3. JDBC

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

  1. PostGISディストリビューションの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.4. ローダ/ダンパ

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

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

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