PostGISのビルドと利用のために、次のものが必要です。
PostgreSQLの完全なコンフィギュアとビルドが行われたコードツリー。PostGISは、ビルドを行った特定のプラットフォームに合わせるために、PostgreSQLのコンフィギュア/ビルド処理で作られた定義を使います。PostgreSQLはhttp://www.postgresql.orgにあります。
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でジオメトリのチェック (Touches(), Contains(), Intersects())および操作(Buffer(), GeomUnion(), Difference()) を提供するために使用します。 GEOSはhttp://geos.refractions.netからダウンロードできます。
PostGISモジュールは、PostgreSQLバックエンドサーバの拡張です。PostGIS 1.0.0をコンパイルするためにPostgreSQLサーバのヘッダの完全なアクセスが必要です。PostgreSQLのソースコードはhttp://www.postgresql.orgにあります。
PostGIS 1.0.0は、PostgreSQL 7.2.0から7.4.0で構築できます。それ以前のPostgreSQLには対応しません。
PostGISサーバモジュールをコンパイルする前に、PostgreSQLをコンパイル、インストールする必要があります。
GEOS機能の使用を予定しているなら、PostgreSQLを標準C++ライブラリに、明示的にリンクする必要があることもあります。
LDFLAGS=-lstdc++ ./configure [コンフィギュアオプション]
これは、古い開発ツールとインチキC++例外との対話のための応急処置です。怪しい問題 (望んでいないのにバックエンドが閉じたりそれに近い挙動を起こす)を経験したなら、このトリックを試してみて下さい。もちろん、これを行うにはPostgreSQLをはじめからコンパイルし直す必要があります。
PostGISソースコードのアーカイブをhttp://postgis.refractions.net/postgis-1.0.0.tar.gzから取得します。PostgreSQLソースツリーの "contrib"ディレクトリ内で、このアーカイブを解凍します。
# cd [PostgreSQLソースツリー]/contrib # gzip -d -c postgis-1.0.0.tar.gz | tar xvf -
PostgreSQLのインストールが更新されたら、"postgis"ディレクトリに入り、Makefile.configファイルを編集します。
座標再投影に対応したいならProj4ライブラリをインストールし、USE_PROJ変数に1を入れ、PROJ_DIR変数をProj4をインストールしたディレクトリに合わせます。
GEOS機能を使いたいならGEOSライブラリをインストールし、USE_GEOS変数に1を入れ、GEOS_DIR変数をGEOSをインストールしたディレクトリに合わせます。
コンパイルとインストールのコマンドを実行します。
# make # make install
全てのファイルが[prefix] (PostgreSQLのインストールディレクトリ)からの相対位置にインストールされます。
ライブラリは[prefix]/lib/contribにインストールされます。
lwpostgis.sqlといったサポートファイルは[prefix]/share/contribにインストールされます。
ローダとダンパのバイナリは[prefix]/binにインストールされます。
PostGISにはPL/pgSQL手続き型言語の拡張が必要です。lwpostgis.sqlファイルをロードする前に、まずPL/pgSQLを有効にする必要があります。createlangコマンドを使うべきです。なんらかの理由で手動で行いたい場合にはPostgreSQLプログラマガイドに詳細があります。
# createlang plpgsql [データベース名]
そして、lwpostgis.sql定義ファイルをロードして、PostGISオブジェクトと関数定義をデータベースにロードします。
psql -d [データベース名] -f rtpostgis.sql
PostGISサーバ拡張はこれでロードされて、使えるようになります。
完全なEPSG座標系定義IDのセットについては、spatial_ref_sys.sql定義ファイルをロードして、SPATIAL_REF_SYSを生成して下さい。
psql -d [データベース名] -f spatial_ref_sys.sql
オブジェクト型とジオメトリにに対応するためのCライブラリが版ごとに異なるため、PostGISのアップグレードは扱いにくくなっています。
この目的のために、PostGISは、pg_dump -Fcコマンドによるダンプを格納するためのユーティリティスクリプトを提供しています。これは試験的なもので、出力をファイルにリダイレクトすることで問題がある場合の解決の助けになります。手続きは次の通りです。
# Create a "custom-format" dump of the database you want
# to upgrade (let's call it "olddb")
$ pg_dump -Fc olddb olddb.dump
# Restore the dump contextually upgrading postgis into
# a new database. The new database doesn't have to exist.
# Let's call it "newdb"
$ sh utils/postgis_restore.pl lwpostgis.sql newdb olddb.dump > restore.log
# Check that all restored dump objects really had to be restored from dump
# and do not conflict with the ones defined in lwpostgis.sql
$ grep ^KEEPING restore.log | less
# If upgrading from PostgreSQL < 7.5 to >= 7.5 you might want to
# drop the attrelid, varattnum and stats columns in the geometry_columns
# table, which are no-more needed. Keeping them won't hurt.
# !!! DROPPING THEM WHEN REALLY NEEDED WILL DO HURT !!!!
$ 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 table is restore from the dump, to ensure your custom
# additions are kept, but the distributed one might contain modification
# so you should backup your entries, drop the table and source the new one.
# If you did make additions we assume you know how to backup them before
# upgrading the table. Replace of it with the new one is done like this:
$ psql newdb
newdb=> drop table spatial_ref_sys;
DROP
newdb=> \i spatial_ref_sys.sql
「古い」手続きの記述を次に示します。可能なら*避けるべき*です。データベース内に意図しない関数が多数入り込むためです。この文書内で残されているのは、postgis_restore.plが動作しない場合の「バックアップ」のためです。
pg_dump -t "*" -f dumpfile.sql yourdatabase
dropdb yourdatabase
createdb yourdatabase
createlang plpgsql yourdatabase
psql -f lwpostgis.sql -d yourdatabase
psql -f dumpfile.sql -d yourdatabase
vacuumdb -z yourdatabase
インストールやアップグレードが思うようにいかない時にチェックすることがいくつかあります。
PostGISディストリビューションをPostgreSQLソースツリーの下のcontribディレクトリに解凍するのが最も簡単です。 しかし、これが何らかの理由で展開できないなら、環境変数PGSQL_SRCにPostgreSQLソースディレクトリのパスを指定します。これで、PostGISのコンパイルができますが、make installはできないので、PostGISライブラリと実行ファイルを適切な位置に自前で複写することになります。
PostgreSQL 7.2以降をインストールしているか、実行中のPostgreSQLと同じ版のPostgreSQLソースを使ってコンパイルしているか、をチェックします。(Linuxの)ディストリビューションによって既にPostgreSQLがインストールされている時や、PostgreSQLを以前にインストールして忘れた場合に、混乱が発生することがあります。PostGISは、PostgreSQL 7.2以上でのみ動作し、 それより前の版を使うと、おかしな、予想外のエラーメッセージが表示されます。 実行中のPostgreSQLの版をチェックするには、psqlを使ってデータベースを接続して、次のクエリを実行します。
SELECT version();
RPMベースのディストリビューションを実行している場合、プリインストールされたパッケージが存在するかのチェックは、rpmコマンドを使います。rpm -qa | grep postgresqlでチェックできます。
また、Makefile.configの先頭に行った必要な変更を全てチェックして下さい。このチェックは次の通りです。
投影変換をできるようにしたいなら、Proj4ライブラリをインストールして、Makefile.config内の、USE_PROJの値を1に設定し、PROJ_DIRをインストール先プリフィクスにします。
GEOS関数を使いたい場合は、 GEOSライブラリをインストールし、Makefile.config内の、USE_GEOSを1に設定し、GEOS_DIRをインストール先プリフィクスにします。
JDBC拡張によって、JavaオブジェクトがPostGISの内部型に対応できるようになります。このオブジェクトを使って、PostGISデータベースに問い合わせを出して、PostGISにあるGISデータの描画や計算を行うJavaクライアントを作成することができます。
PostGISディストリビューションのjdbcサブディレクトリに移動します。
Makefileを編集して、Javaコンパイラ (JAVAC)とインタプリタ (JAVA)を正しいパスにします。
makeコマンドを実行します。postgis.jarファイルをJavaライブラリを保存しているところに複製します。