Postgresql使用dblink实现跨库查询

一、背景介绍

回调表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')
相关推荐
AI绘画小333 小时前
【网络安全】Wireshark 抓包过滤:源 / 目的 IP 过滤 + 命令大全
数据库·tcp/ip·测试工具·安全·web安全·wireshark
数据知道3 小时前
FastAPI项目:构建打字速度测试网站(MySQL版本)
数据库·python·mysql·fastapi·python项目
姓蔡小朋友4 小时前
redis GEO数据结构、实现附近商铺功能
数据结构·数据库·redis
冉冰学姐4 小时前
SSM农贸市场摊位管理系统c22ux(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·农贸市场·摊位管理系统
面向星辰4 小时前
SQL LIKE 相似信息查找语句
数据库·sql
数据库学啊4 小时前
时序数据库选型
数据库·时序数据库
TDengine (老段)4 小时前
强杀服务、重启系统及断电对 TDengine 影响
运维·服务器·数据库·物联网·时序数据库·tdengine·涛思数据
数据库学啊4 小时前
时序数据库怎么选
数据库·时序数据库
baivfhpwxf20235 小时前
SQL Server 创建一个删除分表的作业,每月执行一次,删除表的逻辑放到存储过程里
数据库
不知更鸟9 小时前
Django 项目是什么
数据库·sqlite