2007/10/18

PostgreSQL dblink

EnterpriseDB extends the postgresql with dblink function.
While there is another method to extend it.

PostgreSQLで他のPostgreSQLデータベースのデータにアクセスするには、contribで提供されているdblinkを利用します。
これの利用方法についての簡単なメモです。
ここに登場していない関数や説明もありますが、それは今後完全版をDatabase tearoomの方に書きたいと思っています。

● 環境構築
UNIXやLinuxでは、ソースからコンパイルし、インストールします。(rpmなどのパッケージでインストールしている場合はcontribのパッケージをインストールして、dblink.sqlを実行すればいいんだと思う。たぶん…^^;)
dblinkのソースのディレクトリ(ex. /usr/local/src/postgresql-?.?.?/contrib/dblink)で実施
# make
# make install
$ psql -U postgres -d {DBNAME} < dblink.sql
※ 適切なOSユーザーで実施してください(丁寧な説明でなくてスマン^^;)。
※ {DBNAME}はdblinkを利用したいデータベース名。これをtemplate1とすることで今後作成するデータベースで利用できるようになる。

Windowsでは、インストーラを利用してインストールした場合、dblink.sqlを実行するだけでOKです。
このファイルはPostgreSQLをインストールしたフォルダの下のshare\contribにあります。
C:\Program Files\PostgreSQL\8.1> bin\psql -U postgres -d {DBNAME} < share\contrib\dblink.sql
※ {DBNAME}はdblinkを利用したいデータベース名。これをtemplate1とすることで今後作成するデータベースで利用できるようになる。

● 使用方法
"[" と "]" で括られている接続識別名は省略可能です。ただし接続識別名を接続時に指定した場合は常に必要です。※ "[" および "]" は記述不要。

* アクセスしたいテーブルなどがあるデータベースに接続
select dblink_connect(['{接続識別名}', ]'{接続文字列}');
※ {接続文字列}にはlibpqのPQconnectdb関数で利用するキーワードを記述します。
参照.) PostgreSQLマニュアル - libpq - Cライブラリ - データベース接続制御関数
ex.)
select dblink_connect('conn1',
'host=dbsv port=5432 dbname=mydb user=scott password=tiger');
* 検索(SELECT)
select *
from dblink(['{接続識別名}', ]
'select {列名}[, {列名}...]
from {オブジェクト名}')
t1({列名} {データ型}[, {列名} {データ型}...]);
ex.)
select *
from dblink('conn1',
'select oid, relname
from pg_class')
t1(oid oid, relname text);
* 更新(UPDATE/INSERT/DELETE)
select dblink_exec(['{接続識別名}', ]{DML文}[, fail_on_error]);
ex.)
select dblink_exec('conn1',
'delete from emp where empno=7800');
* データベースから切断
select dblink_disconnect(['{接続識別名}']); ex.)
select dblink_disconnect('conn1');

1 comment:

Anonymous said...

完璧に他サイトのパクリですね。
軽蔑します。