10月 23

postgres-dblink インストール

By ststyle Database, PostgreSQL, dblink コメントは受け付けていません。

postgres-dblinkでは

接続中のPostgreSQLで他のPostgreSQLデータベースのデータにアクセスする為のライブラリ

contribで提供されているdblinkを利用します

postgres-dblinkインストール

postgresのsrcディレクトリ内のcontrib/dblinkへ移動


su postgres
make
make install

$ psql -U postgres -d {DBNAME} < 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′);

dblinkのテスト

接続


select dblink_connect('conn1','host=XXXXX port=5432 dbname=replication user=XXX password=XXXX');

切断


select dblink_disconnect('conn1');

検索


select dblink_connect('conn1','host=データベース1 port=5432 dbname=replication user=XXX password=XXX');
select * from dblink('conn1','select a from rep') t1(a integer);
select * from dblink('conn1','select count(*) as cnt from rep') t1(cnt integer);
select dblink_disconnect('conn1');

select dblink_exec('conn1','delete from emp where empno=7800');

select dblink_connect('conn1','host=データベース1 port=5432 dbname=replication user=XXX password=XXX');
select dblink_connect('conn2','host=データベース2 port=5432 dbname=replication user=XXX password=XXX');

select *
from
dblink('conn1','select count(*) as cnt from rep') t1(cnt integer),
dblink('conn2','select count(*) as cnt from rep') t2(cnt integer)
;

おー素晴らしいー

異なるデータベースをひとつのSQL文で取得できちゃいました。

cnt | cnt
-----+-----
10 |  10
(1 row)

select dblink_disconnect(’conn1′);

Tagged with:
preload preload preload