PostgreSQL跨库查询

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

你可能感兴趣的:(数据库,shell,服务器,PostgreSQL,documentation,extension)