奮闘・HDBC-postgresqlのインストール(たぶん成功編)

ようやくのHDBC-postgresqlのインストールに成功しました。
もっとも動作確認まではやっていないので、まだ正しくインストール出来ているかどうかは分からないのですけれど。

ちなみに環境は以下の通りです。

そもそも、pgconfigはあるのか?

前回PostgreSQLをインストールしたので、pgconfigは存在しているはずです。しかし念のため確認しておきます。

find /opt/ -name "pg*config"

結果は

/opt//local/lib/postgresql83/bin/pg_config

うん。pgconfig(ファイル名はpg_configだけど)はちゃんとありますね。

やったこと

正統な方法だとPostgreSQLをインストールした上でcabalコマンドがpgconfigを探すことが出来るようにするのがいいんでしょうけど、この方法は前回失敗しています。

そこで今回は、cabalコマンドによるインストールをあきらめ、HackageDBのHDBC-postgresqlのページからパッケージを取ってきて、Setup.hsを使うことにしました。
Setup.hsの中にきっとpgconfigを探しているコードが含まれているだろうから、そこを改変してしまおう、というアイデアです。

HackageDBのHDBC-postgresqlのページの「Downloads」のところからtarをダウンロード・解凍すると、Setup.hsというファイルが現れます。
その34行目辺りがpgconfigを探している箇所のようです。

pgconfig  <- findProgramOnPath "pgconfig"  verbosity 
pg_config <- findProgramOnPath "pg_config" verbosity
return (pgconfig `mplus` pg_config)

findProgramOnPath関数がしっかり動いてくれれば、きっとこんな苦労しなくていいのでしょうけど。それともMacPortsPostgreSQLをインストールしたのがいけなかったのかなぁ?

嘆いていても始まらないので、上記コードの書き換えを試してみましょう。
見たところ、名前が「pgconfig」あるいは「pg_config」というファイルを探してMaybeでパスを返しているようです。
そこでさっき調べたpg_configのパスを使って、決め打ちでJustを返すようにしてみます。

      return (Just "/opt/local/lib/postgresql83/bin/pg_config")
--      pgconfig  <- findProgramOnPath "pgconfig"  verbosity 
--      pg_config <- findProgramOnPath "pg_config" verbosity
--      return (pgconfig `mplus` pg_config)

さて、インストールしてみましょう。

sudo runghc ./Setup.hs configure --global

結果は以下の通り。

Setup.hs:5:1:
    Warning: In the use of `defaultUserHooks'
             (imported from Distribution.Simple):
             Deprecated: "Use simpleUserHooks or autoconfUserHooks, unless you need Cabal-1.2
             compatibility in which case you must stick with defaultUserHooks"
Warning: defaultUserHooks in Setup script is deprecated.
Configuring HDBC-postgresql-2.3.2.0...

おっ。警告こそ出たものの、うまくいっています!期待が持てそうです。

続いてbuild。

sudo runghc ./Setup.hs build 

長いので結果は省略しますが、これもうまくいっています。

最後はinstall。

sudo runghc ./Setup.hs install

結果は以下の通り。

Setup.hs:5:1:
    Warning: In the use of `defaultUserHooks'
             (imported from Distribution.Simple):
             Deprecated: "Use simpleUserHooks or autoconfUserHooks, unless you need Cabal-1.2
             compatibility in which case you must stick with defaultUserHooks"
Installing library in /usr/local/lib/HDBC-postgresql-2.3.2.0/ghc-7.0.3
Registering HDBC-postgresql-2.3.2.0...

おお!警告は出たけど、成功した感じ!ghc-pkg listコマンドを使ってインストール出来たかどうか確認しましょう。

ghc-pkg list | grep -i hdbc

結果は・・・

    HDBC-2.3.1.0
    HDBC-postgresql-2.3.2.0
    HDBC-2.3.1.0
    HDBC-odbc-2.3.1.0

おお!!!!!ついにやった!!!!!

HDBC-2.3.1.0が2つあるのが気になるけど、とりあえずはいいでしょう!

やっとPostgreSQLに接続出来そうです。