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的小技巧》
Windows下可以参考: 《Windows环境下配置PostgreSql的dblink功能》 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跨库查询的问题》 b.《PostgreSQL 8.3.17 Documentation》
3、注意 执行 psql -d mydb时,默认的登陆用户名(username)是计算机的用户名,比如,我的是leesonlog,如果数据库里没有这个用户名,那么在之后的输入密码阶段,肯定是过不去的,所以,应该使用 psql -d mydb -U lslxdx-U参数可以加数据库的登陆名。使用psql可以进入plsql的shell,或者也可以直接从开始菜单中PostgreSQL程序组里双击“SQL Shell (psql)”,然后一路回车,直接进入plsql的shell我把“C:Program FilesPostgreSQL9.1bin”直接加到环境变量的path里了,所以可以直接在任何目录输入psql,否则就需要进入“C:Program FilesPostgreSQL9.1bin”才能执行psql。在PostgreSQL9.1版中,dblink.sql放在“C:Program FilesPostgreSQL9.1shareextension”文件夹中,而且名字叫“dblink--1.0.sql”,执行“psql -d mydb -f dblink--1.0.sql”时,要指定dblink.sql的文件路径(相对或绝对)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |