Postgresql中常用dblink扩展的使用

查看原文:http://www.hellonet8.com/1368.html
postgresql中dblink扩展的功能是可以在一个数据库中操作另外一个远程数据库。比如:一个数据库在中国北京,另外一台数据库在中国上海,我可以在北京这台数据库上面建立一个到上海数据库的dblink,然后可以在北京这台数据库上面对上海的数据库进行query或者update或者delete。

dblink的安装:章郎虫这里安装的是postgresql 9.2版本,psql进入数据库后运行create extension dblink就可以了。

dblink的使用:

1、dblink_connect

这个命令主要作用是建立一个到远程数据库的连接,比如

select dblink_connect('myconn', 'host=XXX.XXX.XXX.XXX port=XX dbname=postgres user=myname password=mypassword');

myconn表示连接名称,可以不写,不过建议还是写下连接名称。

2、dblink_disconnect

断开远程数据库连接,比如

select dblink_disconnect('myconn') ;

3、dblink_get_connections

查看当前的远程连接,直接select dblink_get_connections() ;就可以看到连接,如果{'myconn'} 。

4、dblink

这个命令意思就是执行一个远程的查询。如果远程连接成功,那么就可以在本地操作远程数据库了。

select * from dblink('myconn','select * from mytable') as t(a int, b text, c text[]) ;

查询远程数据库中mytable表中的数据,这里as后面相当于把远程数据库中的字段在本地重新命名。这个一定要写,不然dblink会报错误。

select * from dblink('myconn','select * from mytable') as t(a int, b text, c text[]) where a>XX ;

使用dblink最方便的方法是创建一个视图view。这样在查询远程数据表的时候就不用再一次输入以上信息了。比如:

create view myremote_table as select * from dblink('myconn','select * from mytable') as t(a int, b text, c text[]) ;

select * from myremote_table where a>XX ;

5、dblink_exec

执行一个不返回行的远程命令,比如insert into语句 。

select dblink_exec('myconn', 'insert into mytable values(21,''z'',''{"a0","b0","c0"}'');');

6、dblink_open、dblink_fetch和dblink_close

dblink_open:执行一个远程的命令,但是不显示,可以用之后的dblink_fetch()或者dblink_close()来操作。

dblink_fetch:返回之前用dblink_open执行命令的结果。

dblink_close:关闭之前用dblink_open执行命令的结果 。

select dblink_open('myconn','foo', 'select proname, prosrc from pg_proc where proname like ''bytea%''');

select * from dblink_fetch('myconn','foo', 5) AS (funcname name, source text);

select * from dblink_close('myconn','foo') ;

dblink_fetch中的5表示我一次只取一个结果,如果查询结果超过5个,那么再一次执行以上的dblink_fetch语句又可以取到剩下的内容,只到出现(0 rows) 。

7、dblink_error_message

得到最后出现错误的信息提示。select dblink_error_message('myconn');

8、dblink_send_query、dblink_is_busy、dblink_get_notify和dblink_get_result

这几个命令只前面的用法差不多,主要区别是执行异步的远程命令。比如:

contrib_regression=# SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
dblink_connect
----------------
OK
(1 row)

contrib_regression=# SELECT * FROM
contrib_regression-# dblink_send_query('dtest1', 'select * from foo where f1 < 3') AS t1;
t1
----
1
(1 row)

contrib_regression=# SELECT * FROM dblink_get_result('dtest1') AS t1(f1 int, f2 text, f3 text[]);
f1 | f2 | f3
----+----+------------
0 | a | {a0,b0,c0}
1 | b | {a1,b1,c1}
2 | c | {a2,b2,c2}
(3 rows)

contrib_regression=# SELECT * FROM dblink_get_result('dtest1') AS t1(f1 int, f2 text, f3 text[]);
f1 | f2 | f3
----+----+----
(0 rows)

官方参考文档:http://www.postgresql.org/docs/9.2/interactive/dblink.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值