首先声明,我是从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的文件路径(相对或绝对)。