设为首页 收藏本站
查看: 1015|回复: 0

[经验分享] PostgreSQL跨库查询

[复制链接]

尚未签到

发表于 2016-11-19 07:31:19 | 显示全部楼层 |阅读模式
  首先声明,我是从MSSQL阵营刚入PostgreSQL阵营的。转营这几天来,深感这些年来被MSSQL坑害不浅!
  进入正题,在MSSQL中,跨数据库(相同服务器或不同服务器的都算)查询可以轻松使用select * from otherdb.dbo.mytable(相同服务器中的不同数据库)或select * from otherserver.otherdb.dbo.mytable(不同服务器中的不同数据库,其中otherserver是个链接服务器)完成,甚是方便!
  这几天使用PostgreSQL的时候,突然发现需要在PostgreSQL中实现跨库查询,本以为可以使用类似"数据库.数据表"的方式完成呢,结果失败了……从网上查了下,知道PostgreSQL中需要使用dblink函数实现跨库或跨服务器查询,据说是仿照着Oracle的dblink做的,挺好,试着配置了下,把配置过程详细地下出来,供大家参考。
  

  1、安装dblink扩展
  LInux下可以参考:
  《PostgreSQL的小技巧》

http://tieba.baidu.com/f?kz=163201318#

  

  Windows下可以参考:
  《Windows环境下配置PostgreSql的dblink功能》

http://blog.csdn.net/lr2651/article/details/1375769


Windows环境下配置dblink其实要比在linux下简单一些,因为在您安装完PostgreSql后,在您的安装目录的PostgreSQL/8.1/lib目录下已经存在有dblink.dll文件(相当于linux下的dblink.so文件),这是使用dblink所必需的函数文件,当然在linux环境下您可以通过以下方式创建.so文件:
#cd contrib/dblink
#make
#make install
接下来的工作就是要在您需要远程访问其它DataBase的数据库中导入dblink的函数了,这些函数官方已经为您写好了,就是存放在PostgreSQL/8.1/share/contrib目录下的dblink.sql文件,您只需要进入PostgreSql命令行执行如下语句:
... ...bin>psql -d [数据库名] -f[sql文件名(即dblink.sql文件的路径+名称)]
就可以了,好了,如果看到一串 CREATE FUNCTION 那就说明成功了,接下来就是去感受一下dblink的功能了

注意,我用的是PostgreSQL9.1版的,使用psql -d mydb -f dblink--1.0.sql的时候不成功,说是:
Use "CREATE EXTENSION dblink" to load this file.

后来,干脆使用
psql -d mydb -U lslxdx

输入密码后,进入plsql的shell里,在这里边输入
CREATE EXTENSION dblink;

返回
CREATE EXTENSION表示成功。  

  2、使用dblink
  进入pgAdmin里的Query窗口,执行:

select * into stu from dblink('host=127.0.0.1 dbname=postgres user=lslxdx password=123456','select * from stu') as stu(sid int,sno varchar(32),sname varchar(64));

就可以在别的mydb查询postgres库里的东西啦~  dblink的使用可以参考:
  a.《关于PostgreSQL跨库查询的问题》

http://topic.csdn.net/u/20100203/14/def81dd8-e6cc-4524-867d-6f4b6f99836c.html
  b.《PostgreSQL 8.3.17 Documentation》

http://www.postgresql.org/docs/8.3/static/contrib-dblink.html
  

  3、注意
  执行

psql -d mydb时,默认的登陆用户名(username)是计算机的用户名,比如,我的是leesonlog,如果数据库里没有这个用户名,那么在之后的输入密码阶段,肯定是过不去的,所以,应该使用



psql -d mydb -U lslxdx-U参数可以加数据库的登陆名。使用psql可以进入plsql的shell,或者也可以直接从开始菜单中PostgreSQL程序组里双击“SQL Shell (psql)”,然后一路回车,直接进入plsql的shell我把“C:\Program Files\PostgreSQL\9.1\bin”直接加到环境变量的path里了,所以可以直接在任何目录输入psql,否则就需要进入“C:\Program Files\PostgreSQL\9.1\bin”才能执行psql。在PostgreSQL9.1版中,dblink.sql放在“C:\Program
Files\PostgreSQL\9.1\share\extension”文件夹中,而且名字叫“dblink--1.0.sql”,执行“psql -d mydb -f dblink--1.0.sql”时,要指定dblink.sql的文件路径(相对或绝对)。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302308-1-1.html 上篇帖子: postgresql基本语法 下篇帖子: Postgresql 和 rails
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表