PostgreSQL 9.1 + PostGIS 2.0 でダンプが変わる

PostgreSQL 9.1でEXTENSIONというのが導入されました。http://lets.postgresql.jp/documents/technical/9.1/1 あたり参照。これまでは、拡張のための関数、データ型等の定義を直接データベースに叩き込んでいましたが、それが切り離せるというもの。

これにPostGIS 2.0は対応しています。ただし、現時点では make install してもインストールされません。
http://postgis.refractions.net/documentation/manual-svn/postgis_installation.html#make_install_postgis_extensions を参照して、EXTENSIONは別にインストールする必要があります。

PostGIS EXTENSIONを導入した後は http://postgis.refractions.net/documentation/manual-svn/postgis_installation.html#create_new_db_extensions にしたがって…

=# CREATE EXTENSION postgis;

…とかしてやると、空間データベースができあがります。

とりあえず、EXTENSIONで空間データベースを作ったあと、pg_dump を実行してみると、PostGIS関数とかデータ型とかがダンプされません。自分が作成したテーブルとデータとspatial_ref_sysまでです。spatial_ref_sysも邪魔なら -T spatial_ref_sys で切ってやればOK (のはず。試してない)。

これそのまま他の空間データベースにリストアしてもOK (のはず。試してない)。

従来なら関数とかデータ型を外せなかったので、ユーザ定義テーブルを把握し、ユーザ定義テーブルとデータをテーブルごとにダンプしてやってました。関数はネイティブコードライブラリへのリンクもあって、別環境に移設しにくい雰囲気もぷんぷんしてました。が、PostGIS関数と自分のデータとを切り離せてすっきりして、データ移設もかなり気楽にできそうです。

また、ソフトアップグレードについても http://postgis.refractions.net/documentation/manual-svn/postgis_installation.html#soft_upgrade_extensions の通り、クエリだけで済むことになりそうです。

COPY形式で丸一日かかるデータを持ってる身としては、少しでもメンテナンス性が向上するのはとてもありがたいので、これは結構注目のネタなのですが、マニアックなかんじ。