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
-
还没有Trackbacks
告诉你一元钱的价值:只要一元钱,网站所有资源终生免费下载,无任何限制,无隐性费用,无需做任务只要一元钱,即可拥有分站,发展一人提成一毛,七级下线,倍增模式让你赚无限http://www.356688.com/?fengyun
打折网发来贺电,新年快乐