1. 首页
  2. 数据库运维
  3. PostgreSQL

Postgresql中常用dblink扩展的使用

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条)

  • 风云 2013-07-29 20:10

    告诉你一元钱的价值:只要一元钱,网站所有资源终生免费下载,无任何限制,无隐性费用,无需做任务只要一元钱,即可拥有分站,发展一人提成一毛,七级下线,倍增模式让你赚无限http://www.356688.com/?fengyun

  • 天天爱打折网 2015-01-29 10:55

    打折网发来贺电,新年快乐 🙄 🙄

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code