Postgres中不同数据库间无法直接访问,比如有数据库test1和test2,每个数据库中都有一个表为tablea;我使用的操作系统为win8.1,postgres版本为9.3.6;使用pgAdminIII工具访问postgres;
分别在两个数据库(test1,test2)中创建tablea;
test1数据库创建tablea并插入数据:
create table tablea(id int,name varchar(10));
insert into tablea values
(1,’a’),(2,’b’);
test2数据库创建tablea并插入数据:
create table tablea(id int,name varchar(10));
insert into tablea values
(1,’c’),(2,’d’);
从test1数据库中分别访问test1和test2数据库中的表
所报的错误为:未实现数据库关联:”test2.public.tablea” SQL 状态:0A000
我上面写表是按照:数据库.模式.表名
SQL Server中模式是dbo,访问的时候使用select * from test2.dbo.tablea;个人感觉pgAdminIII和SSMS类似,或者说各个数据库窗口管理工具都类似,Mysql Workbench也类似。
现在先截个图,看看test1数据可test2数据库模式下面的函数个数(全部是0)
在test1数据库中打开SQL窗口,输入create extension dblink;如下图
再在test数据库上刷新下,就会看到模式—public--函数,括号内数字不是0了
然后在SQL窗口中建立连接和查询
select dblink_connect(‘t_connect’,’dbname=test2 host=localhost port=5432 user=postgres password=postgres’);
select * from dblink(‘t_connect’,’select * from tablea’) as t2(id int,name varchar(10));
上面的select语句其实是利用了dblink(text,text)和dblink_connect(text,text)函数
两个数据库中表的连接其实也类似;还是在test1数据库的SQL窗口查询
select a.*,b.name from tablea a inner join
(select * from dblink(‘t_connect‘,‘select * from tablea‘) as t2(id int,name varchar(10))) b
on a.id=b.id
就是把这个查询select * from dblink(‘t_connect‘,‘select * from tablea‘) as t2(id int,name varchar(10))当成一个表就可以了。
很类似SQL Server中链接服务器,查询链接服务器的sql,之前随笔中应该写过SQL Server链接的MySQL,通过SSMS查询MySQL中的数据。
Postgres以前我也没接触过,不过工作中需要使用Postgres,有应用的需求,总要解决!