Greenplum 4.xバージョンdblinkの使用


概要
greenplum 4.3.8.0および4.3.9.0のバージョンはdblinkを持っていませんが、5.0 betaはselect version()を持っていて、postgresql 8.3に基づいていることがわかります.23開発のgreenplumなのでpostgresql 8.3をダウンロードします.23バージョンのソースコードでdblinkをコンパイルhttps://www.postgresql.org/ftp/source/v8.3.23/
コンパイル
greenplumをインストールしたサーバで、masterノードでソースコードを解凍します.
cd /home
tar jxf postgresql-8.3.23.tar.bz2
cd /home/postgresql-8.3.23/contrib/dblink

修正/home/postgresql-8.3.23/contrib/dblink/Makefileflagsを以下のように修正し、-wを追加
PG_CPPFLAGS = -I$(libpq_srcdir) -w

コンパイル(root)
source /usr/local/gpdb/greenplum_path.sh
cd /home/postgresql-8.3.23/contrib/dblink
make USE_PGXS=1 install
/home/postgresql-8.3.23/contrib/dblinkで使用する2つのファイルを取得します.
dblink.so
dblink.sql

バージョンのコピーdblink.soをgreenplumクラスタのすべてのマシンの/usr/local/gpdb/lib/postgresqlディレクトリにコピーし、注意chown gpadmin:gpadmin dblink.soをmaster上の便利な位置にコピーすればよい.
dblinkのインストール
dblinkのインストールはデータベースベースで、例えば次のような操作です.
psql -f dblink.sql db_lin

実行後、db_linデータベースでは、他のデータベースのデータにアクセスできます.db 1で他のデータベースにアクセスできるようにするには、次のdblink.sqlを実行する必要があります.
テストの使用
環境の紹介
db_linにdblink:psql -f dblink.sql db1をインストールするdb 1には、次のようなテーブルaがあります.
db1=# SELECT * from a;
 a  
----
 11
(1 row)

操作(db_lin上)
db_lin=# SELECT dblink_connect('con1', 'dbname=db1');
 dblink_connect 
----------------
 OK
(1 row)

db_lin=# SELECT * from dblink('con1', 'select * from a') as t5(a int) limit 5;
 a  
----
 11
(1 row)

db_lin=# SELECT * from dblink('dbname=db1', 'select * from a') as t5(a int) limit 5;
 a  
----
 11
(1 row)

db_lin=# INSERT into t2 SELECT * from dblink('dbname=db1', 'select * from a') as t5(i int);
INSERT 0 1

db_lin=# SELECT * from t2;
 a  
----
 11
(1 row)