Postgresql与Greenplum 中dblink的使用方法

PostgreSQL dblink的使用
dblink,能够在一个数据库中操作另外一个远程的数据库,主要用于数据库之间的操作。

准备工作:
1. 使用dblink,在安装PostgreSQL的时候,必须把的位于PostgreSQL下的contrib\dblink源码编译安装,

   #cd contrib/dblink
   #make
   #make install

之后可以看到在$PGHOME下的lib下就有个dblink.so文件

  1. 使用psql dbname之后:
    使用create extention dblink; 扩展dblink功能(其实这个操作是创建dblink的相关航函数)

示例:取得postgres表的tb1的数据

select * from 
dblink('dbname=postgres host=localhost port=5432 user=postgres passwd=123456'::text,'select * from tb1'::text)t 
(id integer,name character varying));  

如果认为每次查询都要写dblink的一堆信息很麻烦的话,可以在当期库中建一个view来解决。

CREATE VIEW view_remote_tb1 AS   
select * from 
dblink('dbname=postgres host=localhost port=5432 user=postgres passwd=123456'::text,'select * from tb1'::text)t 
(id integer,name character varying)); 

然后就可以从这个view中查询数据了。

SELECT * FROM remote_people_user_name; 

如果不只是查询数据,而是需要修改postgres的数据的情况下怎么弄呢?
1. 先执行dblink_connect保持连接
SELECT dblink_connect(‘mycoon’,’hostaddr=127.0.0.1 port=5432 dbname=postgres user=postgres password=123456’);
2. 执行BEGIN命令
SELECT dblink_exec(‘mycoon’, ‘BEGIN’);
3. 执行数据操作(update,insert,create等命令)
SELECT dblink_exec(‘mycoon’, ‘insert into tb1 select generate_series(10,20),”hello”’);
4. 执行事务提交
SELECT dblink_exec(‘mycoon’, ‘COMMIT’);
5. 解除连接
SELECT dblink_disconnect(‘mycoon’);

Greenplum dblink的使用
简介
greenplum中使用dblink与postgresql类似。greenplum 4.3.8.0以及4.3.9.0的版本都没有带dblink,但是5.0beta带了
通过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/Makefile
将flags修改为如下,增加-w

PG_CPPFLAGS = -I$(libpq_srcdir) -w

编译(root)

扫描二维码关注公众号,回复: 4355227 查看本文章
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得到两个需要用的文件:

dblink.so
dblink.sql

拷贝版本
将dblink.so拷贝到greenplum集群所有机器的/usr/local/gpdb/lib/postgresql目录下,注意chown gpadmin:gpadmin dblink.so
将dblink.sql拷贝到master上方便的位置即可,我们操作的时候需要用

安装dblink
dblink的安装是基于数据库的,譬如如下操作

psql -f dblink.sql db_lin

执行后,在db_lin数据库中,就可以访问其他的数据库的数据了。
如果想要在db1中可以访问其他数据库,需要执行下psql -f dblink.sql db1

测试使用
环境介绍
在db_lin中安装dblink:psql -f dblink.sql db_lin
在db1中有一个表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)

综合两篇文章:https://blog.csdn.net/luojinbai/article/details/45032683
https://blog.csdn.net/micklf/article/details/75449123

猜你喜欢

转载自blog.csdn.net/qq_42189083/article/details/82377707