一、背景介绍
回调表callback,在test数据库下,数据内容如下
公司表company,在release数据库下,数据内容如下
现在的需求是查询company公司下的callback回调数据
二、实现思路
正常的想法直接两张表关联查询即可,很正常的sql
sql
select a.* from test.public.callback a
join release.public.company b
on a.name = b.name
执行下,运行报错
从sql语句可以看出,这是两个不同的数据库,直接这么查是不行的,因为跨库了,所以这里需要借助扩展
三、dblink扩展
1,查询一下扩展
sql
select * from pg_extension
2,如果扩展不存在,则安装一下dblink扩展
sql
create extension if not exists dblink
删除扩展
sql
drop extension if exists dblink
3,建立dblink连接
sql
select dblink_connect('dblink_lxm','host=127.0.0.1 dbname=release user=postgres password=postgres')
注意:出于安全考虑,不建议在查询字符串中直接包含密码,可以通过其他方式(适用于mac/linux服务端:PGPASSWORD环境变量、PGPASS文件等)来管理认证信息。
查询dblink连接
sql
select dblink_get_connections()
4,跨库查询,最终结果
dblinktest可替换为建立连接sql的第二个参数,as后面的字段值要和另一个库中表字段一模一样
sql
-- 跨库关联查询
select a.* from callback a
join dblink('dblink_lxm','select * from company') as ro(id int4,name varchar(500))
on ro.name=a.name
5,删除dblink连接,当然如果数据库关闭了,dblink连接也会自动删除
sql
select dblink_disconnect('dblinktest')