dblink是一个PostgreSQL contrib模块,允许对另一个数据库执行查询。当前PostgreSQL的模型需要用户连接到一个特定的数据库服务器上。因此,它本身是不可能对另一个数据库执行SQL查询。
通常我们不鼓励使用dblink查询远程数据库。我们总是建议用户使用模式。但是在某些场景下,还是有一些用途的。
1.检查是否安装了dblink
gpadmin@linux-hd1:~> pg_config --pkglibdir
--如果安装,检查seg节点是否安装了
gpadmin@linux-hd1:~> gpssh -f all_host 'll /home/greenplum-db/lib/postgresql/dblink.so'
这里存在三种情况
(1)master和segment都没安装,正常安装
(2)master有但是 segment没有,将主节点文件传输到 segment节点
(3)master没有但是segment有,建议重新安装
2.安装
2.1下载对应文件:
github上有现成的文件,https://github.com/greenplum-db/gpdb/tree/master/contrib/dblink 下载gpdb源文件
2.2 上传contrib目录到master,并设置权限为gpadmin所有
2.3 编译生成
vi contrib/dblink/Makefile在后面增加-w参数
PG_CPPFLAGS = -I$(libpq_srcdir) -w
make USE_PGXS=1 install
2.4 生成的dblink.so文件在lib/postgresql下,将此文件copy到segment
3.使用
在contrib/dblink目录下
gpadmin@linux-hd1:~> psql -f dblink.sql my_db生成一系列的函数
1.创建连接
首先登陆源库my_db
my_db=#select dblink_connect('连接符名称','dbname=other_db');
注意这里的写法:dbname=other_db:是数据库连接串。本地可以这样写,远程得写成hostaddr=***.***.***.*** port=5432 dbname=*** user=*** password=***
2.使用
my_db=# select * from dblink('myconn','select * from public.a') AS t1(v varchar,v2 varchar);
my_db=# insert into public.ab select * from dblink('dbname=bi','select * from public.a') AS t1(v1 varchar);