Mac OSX で PostgreSQL の dblink をソースからインストール、構築する

MacPorts などによらずにソースから dblink を導入、構築する方法。
意外と難しかったので記録に残しておく。
Mac OS X 10.6.4 と postgresql-8.4.2 で確認。

ビルド、インストール

ここ の手順で、 /usr/local 配下に postgresql-8.4.2 をビルド・インストール済みである前提。

dblink のソースは、 postgresql-8.4.2 のソースに contrib として含まれている。まず、postgresql をビルドしたソースディレクトリに移動して、dblink モジュールのビルド実行。

$ cd /usr/local/postgresql-8.4.2/contrib/dblink
$ ls -l
total 160
-rw-r--r--@ 1 testnoda  admin    489 11 11  2007 Makefile
-rw-r--r--@ 1 testnoda  admin  59923  9 13  2009 dblink.c
-rw-r--r--@ 1 testnoda  admin   2431  6 10  2009 dblink.h
-rw-r--r--@ 1 testnoda  admin   5606  6 10  2009 dblink.sql.in
drwxr-xr-x@ 3 testnoda  admin    102 12 10  2009 expected
drwxr-xr-x@ 3 testnoda  admin    102 12 10  2009 sql
-rw-r--r--@ 1 testnoda  admin   1816  4  5  2008 uninstall_dblink.sql
$ make

ビルドが終わると dblink.so ができているので、 root になった後 make install 実行。

$ sudo su
Password:
# pwd
/usr/local/postgresql-8.4.2/contrib/dblink
# ls -l
total 360
-rw-r--r--@ 1 testnoda  admin    489 11 11  2007 Makefile
-rw-r--r--@ 1 testnoda  admin  59923  9 13  2009 dblink.c
-rw-r--r--@ 1 testnoda  admin   2431  6 10  2009 dblink.h
-rw-r--r--  1 testnoda  admin  46132  9 19 19:57 dblink.o
-rwxr-xr-x  1 testnoda  admin  43960  9 19 19:57 dblink.so
-rw-r--r--  1 testnoda  admin   5568  9 19 19:57 dblink.sql
-rw-r--r--@ 1 testnoda  admin   5606  6 10  2009 dblink.sql.in
drwxr-xr-x@ 3 testnoda  admin    102 12 10  2009 expected
drwxr-xr-x@ 3 testnoda  admin    102 12 10  2009 sql
-rw-r--r--@ 1 testnoda  admin   1816  4  5  2008 uninstall_dblink.sql
# make install
# cd /usr/local/pgsql/lib/
# ls -l dblink.so 
-rwxr-xr-x  1 root  admin  43960  9 19 18:33 dblink.so
# exit
$

構築

次は dblink.sql を実行してデータベースに dblink を登録するが、ソースフォルダにある dblink.sql を使うとエラーが出て登録できない。

$ su - postgres
Password:
$ cd /usr/local/postgresql-8.4.2/contrib/dblink/sql
$ ls -l
total 32
-rw-r--r--@ 1 testnoda  admin  12891 Jun  7  2009 dblink.sql

$ /usr/local/pgsql/bin/createdb local
$ /usr/local/pgsql/bin/psql local -f dblink.sql 
SET
SET
SET

:
:
:

psql:dblink.sql:375: ERROR:  function dblink_connect_u(text, text) does not exist
\set ORIGINAL_USER :USER
\c - dblink_regression_test
psql:dblink.sql:378: \connect: could not create socket: Too many open files
$ /usr/local/pgsql/bin/dropdb local
$

データベースに正しく登録するためには、 pgsql フォルダにインストールされているほうの dblink.sql を使用する。

$ whoami
postgres
$ /usr/local/pgsql/bin/createdb local  
$ cd /usr/local/pgsql/share/contrib/
$ ls
dblink.sql		plr.sql			uninstall_dblink.sql
$ /usr/local/pgsql/bin/psql local -f dblink.sql 
SET
CREATE FUNCTION
CREATE FUNCTION

:
:
:

CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
$