QA@IT

PostgreSQLのエクステンションのhstoreをMac OS Xに入れるには?

2704 PV

PostgreSQL 9.1を使っています。hstoreというkey/valueが使えるエクステンションがあって、これはHerokuでも使えるようなのでよさげなのですが、Mac OS X(10.7.3)での導入方法がよく分かりません。

MacPortsだと、

$ port search hstore
No match for hstore found

と見当たりません。MacPortsにPostgreSQLのエクステンションがパッケージとして存在していないのかというと、どうもそうでもなくて、

$ port search postgres | grep -i extension
Class::DBI extension for Postgres
Class::DBI extension for Postgres
Class::DBI extension for Postgres
Class::DBI extension for Postgres
Class::DBI extension for Postgres
a PHP interface to PostgreSQL, including the pgsql and pdo_pgsql extensions
PostgreSQL extension that provides a function to remove accents from characters
$

と、かすかにあります。いちばん下のヤツなんかはエクステンションぽいので、やっぱり単にhstoreがMacPortsにないだけで、これは手動ビルドするしかないのかなぁと想像していたりします。

MacPortsのバージョンは2.0.4です。アドバイスがあればよろしくお願いします。

回答

解決しました。本来、hstoreはPostgresのソースツリーのcontrib/に入っていて、

$ cd contrib
$ make hstore

などとしますが、MacPortsでは、ビルド時にhstoreを含めることができます。

もしすでにPostgresをインストール済みなら、一旦アンインストールします。

$ sudo port unload postgresql91-server
$ sudo port uninstall postgresql91

データベースファイルは消えません。

次に、

$ sudo port edit postgresql91

として、Portfileを編集します。Portfileというのは、MacPortsの各パッケージのビルド情報を保持しているtcl(!)のスクリプトで、ビルド時の設定関連のことが並んでいます。ここに、

set contribs    "adminpack dblink fuzzystrmatch lo uuid-ossp pg_buffercache pg_trgm pgcrypto tsearch2 vacuum    lo xml2"

と、どのcontribモジュールを含めるかが書いてあるので、

set contribs    "hstore adminpack dblink fuzzystrmatch lo uuid-ossp pg_buffercache pg_trgm pgcrypto tsearch2 vacuum    lo xml2"

などと、hstoreを書き足します。これで後は、

sudo port install postgresql91
sudo port load postgresql91-server

として、

CREATE EXTENSION hstore

とすれば、hstoreが使えるようになります。あと、私の環境では、/opt/local/lib/postgresql91/bin/ 以下のツール類をパスの通った場所にcpする必要がありました。

参考:

編集 履歴 (0)

macportsは使ってないのですが、9.1からはextentionはビルド(?)しなくても contribにあるhstore.sql を読み込めば良さそうなことが http://stackoverflow.com/a/6619551/762054 に書いてありました。

編集 履歴 (0)
  • stackoverflow 便利… -
ウォッチ

この質問への回答やコメントをメールでお知らせします。