目次
本章では、PostGISのインストールに必要な手順について説明します。
ラスタ機能は現在は選択可能ですが、デフォルトではインストールされます。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でインストールされません。しかし |
本章の残りで、上記のステップそれぞれの説明をします。
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/にあります。
ダウンロードサイト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
ディレクトトリに移動して、インストールを続けます。
多くの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では動作しません。
ほとんどのLinuxのインストールと同様に、最初のステップでは、ソースコードのビルドに使われる Makefile を生成します。これは、シェルスクリプトで行います。
./configure
パラメータを付けない場合には、このコマンドは自動で、PostGISのソースコードのビルドを行うのに必要なコンポーネントやライブラリをシステム上で探します。./configureとするのが一般的な使い方ですが、標準的でない位置に必要なライブラリやプログラムを置いてある場合のために、いくつかのパラメータを受け付けます。
次のリストで、共通して使われるパラメータを示します。 完全なリストについては、--helpまたは--help=shortパラメータを使って下さい。
PostGISライブラリとSQLスクリプトのインストール先を指定します。 デフォルトでは、検出されたPostgreSQLのインストール先と同じになります。
このパラメータは現在のところ壊れていて、PostgreSQLのインストール先にしかインストールされません。このバグのトラックについてはhttp://trac.osgeo.org/postgis/ticket/635をご覧ください。 |
PostgreSQLは、PostGISなどの拡張に対してPostgreSQLのインストール先ディレクトリを伝えるpg_configというユーティリティを持っています。PostGISの対象とするPostgreSQLインストール先を手動で指定する場合は、このパラメータ(--with-pgconfig=/path/to/pg_config)を使います。
必須ライブラリであるGDALはラスタ機能に必要な機能を提供します。GDALインストール先ディレクトリをインストールスクリプトに伝えるgdal-configを提供しています。PostGISのビルドに使う特定のGDALを手動で指定する場合は、このパラメータ(--with-gdalconfig=/path/to/gdal-config)を使います。
必須のジオメトリライブラリであるGEOSは、ソフトウェアのインストール時にGEOSのインストール先ディレクトリを伝えるgeos-configというユーティリティを持っています。PostGISのビルドに使う特定のGEOSを手動で指定する場合は、このパラメータ(--with-geosconfig=/path/to/geos-config)を使います。
LibXMLはGeomFromKML/GML処理を行うのに必須のライブラリです。通常はlibxmlをインストールしているなら発見されますが、発見できない場合や特定の版を使用したい場合は、PostGISにxml2-config
を指定してインストールスクリプトにLibXMLのインストール先ディレクトリを伝えます。PostGISのビルドに使う特定のLibXMLを手動で指定する場合は、このパラメータ(--with-xml2config=/path/to/xml2-config)を使います。
Proj4はPostGISに必須の投影変換ライブラリです。PostGISのビルドに使う特定のProj4のディレクトリを手動で指定する場合は、このパラメータ(--with-projdir=/path/to/projdir)を使います。
iconvのインストール先ディレクトリを指定します。
JSON-Cは、MITライセンスのJSONライブラリで、PostGISのST_GeomFromJSON機能に必須です。PostGISのビルドに使う特定のJSON-Cを手動で指定する場合は、このパラメータ(--with-jsondir=/path/to/jsondir)を使います。
データインポートGUI(GTK+2.0が必要)をコンパイルします。このパラメータによって、shp2pgsql-guiという、shp2pgsqlのグラフィカルユーザインタフェースが作成されます。
ラスタ機能付きでコンパイルします。これによりrtpostgis-2.0.0ライブラリとrtpostgis.sqlファイルが生成されます。最終リリースでは、デフォルトでラスタ機能付きにする予定ですので、このパラメータ自体は不要になる可能性があります。
トポロジ機能付きでコンパイルします。これによりtopology.sqlファイルが生成されます。トポロジに必要なロジックは全てpostgis-2.0.0ライブラリ内に作られるので、関連ライブラリはありません。
デフォルトでは、gettextの検出とこれを用いたコンパイルを試みますが、ローダ破損を引き起こす非互換性問題下で実行する場合には、このコマンドで無効にできます。これを使ったコンフィギュレーションによって解決する問題の例はhttp://trac.osgeo.org/postgis/ticket/748にあります。ご注意: これを切ることで多くを逃すわけではありません。まだ文書化されていなくて試験段階であるGUIローダにおける内部のヘルプ/ラベル機能に使われています。
PostGISをSVNレポジトリから得る場合には、はじめに次のスクリプトを実行します。 ./autogen.sh このスクリプトによってconfigureスクリプトが生成されます。これはPostGISのインストールに関するカスタマイズに使われます。 PostGISをアーカイブファイルとして入手する場合には、configureが既に生成されているので./autogen.shは不要です。 |
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
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;
PostGISのテストを行うには、次のコマンドを実行します。
make check
このコマンドで、実際のPostgreSQLデータベースに対して生成したライブラリを使用した、様々なチェックとレグレッションテストを行います。
PostgreSQL, GEOS または Proj4 を標準の位置にインストールしていない場合には、環境変数LD_LIBRARY_PATHに、ライブラリの位置を追加する必要があるかも知れません。 |
現在のところmake checkは、チェックを行う際に 環境変数 |
成功した場合は、テストの出力は次のようなかんじになります。
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
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データベースを作る最初のステップは、単純な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のようなアプリケーションで動作させるのに必要な最低限をインストールするには |
リストアとクリーンアップを行った後で非推奨関数を消すためにuninstall_legacy.sql
を実行できます。
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
を実行できます。
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のアーカイブファイルを展開できます。
まず前述の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.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データベースの資格情報を持つように編集し、コマンドラインからスクリプトを実行します。
より詳細なデータロードの説明は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で実行してみます。
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
既存の空間データベースのアップグレードは、新しいPostGISオブジェクト定義の置き換えや導入を必要とするとき、慎重を要することがあります。
不幸なことに、定義の全てが実行中のデータベース内で簡単には置き換えられるわけではないので、ダンプ/リロードが最善策となることがあります。
PostGISには、マイナーバージョンアップやバグフィクスリリースの場合に使うソフトアップグレードと、メジャーアップグレードで使うハードアップグレードが用意されています。
PostGISをアップグレードしようとする前にデータのバックアップを取ることは、常に価値のあるものです。pg_dumpで -Fc フラグを使うと、ハードアップグレードによってダンプを常にリストアすることができます。
EXTENSIONを使ってインストールした場合は、EXTENSIONモデルでアップグレードしなければなりません。 古いSQLスクリプトを使ってインストールした場合は、SQLスクリプトでアップグレードすべきです。適切な方を参照して下さい。
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_Full_Version関数によって、"procs need upgrade"メッセージを使ってこの種のアップグレードを実行する必要性についての情報が得られます。
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の再インストールをとばすことができます。
バックアップは |
ハードアップグレードとは、PostGISで利用可能なデータの完全なダンプ/リロードを意味します。PostGISオブジェクトの内部格納状態が変更される場合や、ソフトアップグレードができない場合に、ハードアップグレードが必要です。付録のRelease Notesに、版ごとについて、ダンプ/リロード(ハードアップグレード)の要否を記載しています。
ダンプ/リロード作業はpostgis_restore.plスクリプトが補助します。このスクリプトは、PostGIS(古いものを含む)に属する定義を全て飛ばすように注意します。また、重複シンボルエラーや非推奨オブジェクトの持越し無く、スキーマとデータをPostGISをインストールしたデータベースにリストアできます
Windows用に関する追加情報は Windows Hard upgradeにあります。
手続きは次の通りです。
アップグレードしたデータベース(olddb
と呼ぶことにしましょう)の「カスタム書式」のダンプを、バイナリBLOBデータを含めたダンプを指定して(-b)、verboseモード(-v)で生成します。ユーザはデータベースのオーナーになることができ、PostgreSQLのスーパーアカウントである必要はありません。
pg_dump -h localhost -p 5432 -U postgres -Fc -b -v -f "/somepath/olddb.backup" olddb
新しいデータベースにPostGISを、PostGISが無い状態からインストールします。このデータベースをnewdb
と呼ぶことにします。この作業に関する説明については「PostgreSQL 9.1より前での空間データベースの作成」と「EXTENSIONを使った空間データベースの生成」を参照して下さい。
ダンプにあるspatial_ref_sysは、リストアされますが、既にあるspatial_ref_sysを上書きしません。リストア対象のデータベースに公式データセットの訂正が確実に伝わるようにするためです。標準のエントリを上書きしたい場合は、newdbを生成する際にspaltial_ref_sys.sqlファイルをロードしないだけです。
データベースが本当に古く、ビューや関数に、長く非推奨になっている関数があるような場合には、関数やビューを使えるようにするlegacy.sql
をロードする必要があるでしょう。ただし、本当に必要な場合に限ります。可能なら、ビューや関数をダンプせずにアップグレードすることを検討して下さい。非推奨関数はuninstall_legacy.sql
で後から削除することができます。
バックアップを新しいnewdb
データベースにリストアするには、postgis_restore.plを使います。psqlが予期せぬエラーを標準エラー出力に出すことがあります。これらのログを保存しておいて下さい。
perl utils/postgis_restore.pl "/somepath/olddb.backup" | psql -h localhost -p 5432 -U postgres newdb 2> errors.txt
エラーは次の場合に起こりえます。
ビューまたは関数の中に非推奨のPostGISオブジェクトを使っているものがある場合。これの訂正には、リストア前にlegacy.sql
スクリプトのロードを試してみることができます。非推奨オブジェクトをまだ持っている版のPostGISにリストアして、コードを作り替えた後に再び移動させることもできます。
legacy.sql
を利用する場合は、非推奨関数を使うのをやめたコードに訂正して、uninstall_legacy.sql
をロードするのを忘れないでください。
ダンプファイル内の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));
インストールやアップグレードが思うようにいかない時にチェックすることがいくつかあります。
PostgreSQL 8.4以上をインストールしているか、実行中のPostgreSQLと同じ版のソースでコンパイルしているか、をチェックします。(Linuxの)ディストリビューションによって既にPostgreSQLがインストールされている時や、 PostgreSQLを以前にインストールして忘れた場合に、 混乱が発生することがあります。PostGISはPostgreSQL 8.4以上で動作します。古い版のものを使った場合には、おかしな予想外のエラーメッセージが表示されます。実行中のPostgreSQLの版をチェックするには、psqlを使ってデータベースを接続して、次のクエリを実行して下さい。
SELECT version();
RPMベースのディストリビューションを実行している場合、 プリインストールされたパッケージが存在するかのチェックは、rpmコマンドを使ってrpm -qa | grep postgresqlでチェックできます。
アップグレードに失敗する場合、既にPostGISがインストールされているデータベースにリストアしているか確認して下さい。
SELECT postgis_full_version();
また、コンフィギュアが正しくPostgreSQL、Proj4ライブラリ、GEOSライブラリのインストール先を検出したかチェックして下さい。
コンフィギュアからの出力でpostgis_config.h
ファイルが作られます。POSTGIS_PGSQL_VERSION
, POSTGIS_PROJ_VERSION
, POSTGIS_GEOS_VERSION
変数が正しくセットされたかをチェックして下さい。
JDBC拡張によって、JavaオブジェクトがPostGISの内部型に対応できるようになります。このオブジェクトを使って、PostGISデータベースに問い合わせを出して、PostGISにあるGISデータの描画や計算を行うJavaクライアントを作成することができます。
PostGIS配布物のjava/jdbc
サブディレクトリに入ります。
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 からダウンロードできます。
データのローダとダンパは、PostGISのビルドの一部として、自動的にビルド、インストールされます。手動でビルド、インストールするには、次を実行します。
# cd postgis-2.0.0/loader # make # make install
ローダはshp2pgsql
と呼ばれ、ESRIシェープファイルをPostGIS/PostgreSQLにロードするのに適したSQLに変換します。ダンパはpgsql2shp
と呼ばれ、PostGISのテーブル(またはクエリ)からESRIシェープファイルに変換します。より詳しいドキュメントをご覧になるには、オンラインヘルプとマニュアルページをご覧ください。