【YUNBEE云贝-PostgreSQL】FDW应用
注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
前言
Wrapper(FDW)是一项关键特性,它赋予数据库用户直接通过SQL语句访问存储于外部数据源的能力。遵循SQL/MED标准设计,FDW使PostgreSQL能够无缝对接多种异构数据库系统以及非数据库类数据源。
FDW机制由四个核心组件构成:
1. Foreign Data Wrapper:特定于各数据源的库,定义了如何建立与外部数据源的连接、执行查询及处理其他操作。例如,“postgres_fdw”用于连接其他PostgreSQL服务器,“mysql_fdw”则专门连接MySQL数据库。
2. Foreign Server:在本地PostgreSQL中定义一个外部服务器对象,对应实际的远程或非本地数据存储实例。
3. User Mapping:为每个外部服务器设置用户映射,明确哪些本地用户有权访问,并提供相应的认证信息,如用户名和密码。
4. Foreign Table:在本地数据库创建表结构,作为外部数据源中表的映射。对这些“外表”发起的SQL查询将被转换并传递给相应的FDW,在外部数据源上执行。
随着FDW生态的日益繁荣,各类针对不同数据源的FDW插件层出不穷,如postgres_fdw实现PostgreSQL间的互连互通,mysql_fdw、oracle_fdw分别用于连接MySQL和Oracle数据库,还有file_fdw可用于读取文本文件或CSV等非结构化数据。
接下来,我们重点介绍FDW功能使用。
一、外部表
使用PostgreSQL的file_fdw扩展,可以创建一个外部表来读取和查询文件系统中的文本或CSV文件。以下是如何通过file_fdw实现外部表的详细步骤:
使用场景:当有个1G表数据,CSV格式,需要和本地表运算出报表结果
1.1 准备csv数据

1.2 创建外部表

1.3 与本地表进行运算

二、访问其它集群中的pg库
由于pg内部不同的数据库不能访问,pg_fdw就能解决此问题。
注:如无特殊说明,以下操作均在当前库操作
2.1 创建扩展

2.2 创建外部数据服务

查看外部服务

删除外部服务

2.3 将外部服务授权给指定用户

2.4 创建外部服务的mapping
用于连接指向用户及指定数据库

查看mapping关系

如果密码配置错误,用以下语句修改

补充:
删除外部mapping

2.5 在远端创建表

2.6 创建外部表

补充:
查看外部表

删除外部表

2.7 访问自身集群中的pg库
实现过程和第二章节一样
实现目标:通过postgres数据库中的postgres用户访问appdb中appuser在schema:appuser中的表t1

注意:
1、添加外部表时,需要指定schme_name参数,否则会到默认public模式下找数据
三、访问oracle中的表
3.1 安装oracle客户端
根据不同数据库版本,自行到oracle官网下载,如LINUX.X64_193000_client_home包
上传解压即可
3.2 配置环境变量

3.3 配置oracle全局动态库

3.4 测试连接oracle

3.5 安装oracle_fdw
下载地址:https://github.com/laurenz/oracle_fdw

3.6 创建oracle_fdw扩展

如果碰到如下问题

先通过 ldd命令跟踪库文件的调用过程,比如

而libclntshcore.so.19.1这个包在oracle客户端的lib目录下,可以通过以下方式尝试解决:
1、通过软链接

2、直接cp

3.7 创建对oracle的外部表

四、FDW的演进与未来展望
随着时间推移,FDW的功能不断丰富和优化,包括增强性能、增加更多类型的FDW以及改善用户体验。如今,FDW已经成为PostgreSQL生态不可或缺的一部分,大大提高了其数据集成能力。
展望未来,FDW将继续成为实现跨多种数据库和非传统数据源交互的关键技术,尤其是在大数据时代背景下,对于构建复杂的企业级数据湖和数据仓库解决方案具有深远意义。同时,随着云原生和分布式计算范式的兴起,FDW也将顺应潮流,持续演进以适应更加多样化且充满挑战性的应用场景。
最后感谢学习和观看,我们会持续更新学习视频。
相关视频:【云贝教育】PostgreSQL分享课:PG-FDW:FDW概述
相关文章:
【YUNBEE云贝-PostgreSQL】FDW应用
注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 前言 Wrapper(FDW)是一项关键特性,它赋予数据库用户直接通过SQL语句访问存储于外部数据源的能…...
Spring MVC文件上传配置
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 文件上传 Spring MVC文件上传基于Servlet 3.0实现;示例代码如下: Overrideprotected void customizeRegistration(ServletRegistration.Dynamic reg…...
JavaScript高级(十八)---进程和线程,宏任务和微任务
进程和线程 进程(process):计算机已经运行的程序,是操作系统管理程序的一种方式,我们可以认为,启动一个应用程序,就会默认启动一个进程(也可能是多个进程)。 线程&…...
How to install mongodb on redhat 7.7
下载rpm: mongodb-enterprise-server-6.0.3-1.el7.x86_64.rpmmongodb-org-server-6.0.4-1.el7.x86_64.rpmmongodb-mms-6.0.9.100.20230201T2148Z.x86_64.rpm rpm -ivh mongodb-org-server-6.0.4-1.el7.x86_64.rpm rpm -ivh mongodb-mms-6.0.9.100.20230201T2148Z.x86_64.rpm …...
关于继承是怎么样的?那当然是很好理解之
本文描述了关于继承的大部分知识,但是并不全,每篇博客之间的知识都有互串,所以需要把几篇文章合起来看,学会融会贯通! 温馨提示:使用PC端观看,效果更佳! 目录 1.继承是什么 2.什…...
高可用系统有哪些设计原则
1.降级 主动降级:开关推送 被动降级:超时降级 异常降级 失败率 熔断保护 多级降级2.限流 nginx的limit模块 gateway redisLua 业务层限流 本地限流 gua 分布式限流 sentinel 3.弹性计算 弹性伸缩—K8Sdocker 主链路压力过大的时候可以将非主链路的机器给…...
LeetCode-回文数
LeetCode-回文数 解体思路: ①第一种:转换成字符串,使用字符串的现有api方法进行反转 ②第二种:直接使用循环除余乘10方法,进行反转 涉及知识点: 循环判断,StringBuffer,int类型…...
50. 【Linux教程】源码安装软件
本小节介绍如何使用软件的源码包安装软件,以安装 nginx 源码包为例。 1.下载软件源码包 使用如下命令下载 nginx 源码包: wget http://nginx.org/download/nginx-1.18.0.tar.gz执行结果如下图所示: 2.解压源码包 下载好了压缩包之后&#…...
《操作系统实践-基于Linux应用与内核编程》第10章--实验 Qt聊天程序
前言: 内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容,所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。 引用: 《操作系统实践-基于Linux应用与内核编程》 作者:房胜、李旭健、黄…...
探究Kafka主题删除失败的根本原因
欢迎来到我的博客,代码的世界里,每一行都是一个故事 探究Kafka主题删除失败的根本原因 前言主题删除的基础主题删除的定义和作用:删除操作的基本流程: 可能存在删除异常的因素数据积压的处理方法Broker状态异常处理方法通用方法 前…...
JavaSE(上)-Day7
JavaSE(上)-Day7 类和对象封装privatethis构造方法标准JavaBean对象的内存图执行Test类main方法生成一个User对象的内存过程 基本数据类型和引用数据类型的区别this的内存原理成员变量和局部变量区别 类和对象 类是设计图纸,对象是真正的实例…...
记录一下在Pycharm中虚拟环境的创建
如果在Pycharm中要新建一个虚拟环境,那你可以在Terminal中选择Command Prompt,在这里面执行相关命令 一、安装了Anaconda,创建虚拟环境 当你使用解释器是Anaconda提供的时,你可以使用conda命令执行,见以下操作&#x…...
Python从入门到精通秘籍九
一、Python中文件编码概念 在Python中,文件编码指的是将文本内容转换为字节序列的过程。不同的编码方式使用不同的字符集和字节表示形式。下面是一个示例代码: # 写入文本到文件 text "你好,世界!" with open("…...
善于利用window挂在全局变量
开发过程成中遇到一个奇怪的问题,打开一个echats图表之后,关闭echarts图再进入其他页面页面会报错提示 $(...).draggble not a function经过一步步定位,发现echats图是通过后端获取js、css文件然后在本地绘制而成。而获…...
《C缺陷和陷阱》-笔记(5)
目录 一、整数溢出 溢出 如何防止溢出 二、为函数main提供返回值 连接 一、什么是连接器 连接器工作原理 三、声明与定义 四、命名冲突与static 修饰符 statia 一、整数溢出 溢出 C语言中存在两类整数算术运算,有符号运算与无符号运算。 在无…...
【数字图像处理matlab系列】保存图像
【数字图像处理系列】保存图像imwrite函数 使用函数imwrite可以将图像保存到本地上,该函数的语法为 imwrite(image_data, filename)其中,image_data是要写入的图像数据,可以是一个矩阵或一个三维数组(对于彩色图像),filename是要写入的文件名,可以包含路径信息。例如,…...
八股文三(Spring、Spring Cloud Alibaba)
Spring篇 什么是Spring Spring是个轻量级的框架,他有两大内核分别是IOC、AOPIOC是什么 * 依赖注入和控制反转,它是一种思想,创建对象不是直接new出来,而是交给IOC容器,由容器去创建进行管理,这就是控制反…...
一文带你详解天池工业数据集
人工智能是国家战略性新兴产业,制造业是国民经济的主体,随着人口红利的消失,加强设备自动化改造,提高生产自动化程度,减小劳动强度,改善作业环境,已经成为制造业的普遍共识。天池大赛开放出一批…...
08 龙芯平台openstack部署搭建-neutron-controller部署
一、创建neutron相关数据库、服务凭证和API端点 1.创建neutron数据库,授予合适的访问权限 mysql -uroot -ploongson -e “CREATE DATABASE neutron;” mysql -uroot -ploongson -e “GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’‘localhost’ IDENTIFIED B…...
JAVA 100道题(6)
6.创建一个表示矩形的类,包括宽度和高度属性,以及计算面积和周长的方法。 下面是一个简单的Python类,表示矩形,包含宽度和高度属性,以及计算面积和周长的方法: python复制代码 class Rectangle: def __ini…...
SpringBoot配置安全实战:从明文到ENC加密的进阶之路
1. 为什么你的SpringBoot配置正在"裸奔"? 记得去年我接手一个微服务项目时,发现所有数据库密码、Redis密钥都直接写在application.yml里,就像把家门钥匙挂在门把手上。更可怕的是,这些配置文件还被提交到了GitHub公开仓…...
告别转译 拥抱丝滑:M1/M2 Mac原生安装MATLAB 2022b实战指南
1. 为什么你需要原生版MATLAB 2022b? 如果你正在使用M1/M2芯片的MacBook,却还在忍受转译版MATLAB的卡顿,那这篇文章就是为你准备的。我亲身经历过从Intel转译版切换到原生版的整个过程,那种从"幻灯片"到"德芙般丝…...
图解Transformer/BERT/XLNet:三张Mask矩阵,彻底搞懂语言模型如何“防剧透”
三张Mask矩阵图解:Transformer/BERT/XLNet如何实现语言模型的"防剧透"机制 语言模型的核心挑战之一,是如何在预测下一个词时避免"作弊"——即防止模型提前看到未来的信息。这就好比考试时不能偷看答案,写作时不能抄袭未完…...
FPGA数码管驱动避坑指南:从共阴共阳到分时复用,新手最容易搞错的5个点
FPGA数码管驱动避坑指南:从共阴共阳到分时复用,新手最容易搞错的5个点 第一次用FPGA驱动数码管时,看着自己写的代码让显示器上跳出乱码或者完全不亮,这种挫败感我太熟悉了。数码管看似简单,但实际驱动时隐藏的坑比想象…...
三步掌握Textractor:让外语游戏对话不再困扰你
三步掌握Textractor:让外语游戏对话不再困扰你 【免费下载链接】Textractor Extracts text from video games and visual novels. Highly extensible. 项目地址: https://gitcode.com/gh_mirrors/te/Textractor 还在为外语游戏中的对话看不懂而烦恼吗&#x…...
告别生产混乱与库存积压:详解精益十大工具的管控功能,掌握精益十大工具在制造业场景的应用
在生产制造领域,告别生产混乱与库存积压是每个管理者的核心诉求,而实现这一目标的关键在于系统性地应用精益十大工具。精益十大工具并非孤立的方法,而是一套能深度优化制造业场景的管控功能体系。通过掌握精益十大工具的具体应用,…...
2026奇点大会量子计算分论坛突发技术声明:NISQ时代终结,AGI训练能耗骤降67%——你准备好硬件升级了吗?
第一章:2026奇点智能技术大会:AGI与量子计算 2026奇点智能技术大会(https://ml-summit.org) AGI系统架构的范式跃迁 本届大会首次公开演示了基于神经符号融合(Neuro-Symbolic Integration)的AGI原型系统“Orion-7”,…...
Rust 编译器优化参数详解
Rust编译器优化参数详解 Rust作为一门注重性能与安全的系统编程语言,其编译器在代码优化方面提供了丰富的参数选项。合理使用这些优化参数可以显著提升程序的运行效率,减少资源消耗。本文将详细介绍Rust编译器的优化参数,帮助开发者更好地利…...
Proteus 8.13 找不到TMS320F28335?手把手教你从官网下载并导入芯片库(附避坑指南)
Proteus 8.13缺失TMS320F28335芯片的终极解决方案:从获取到实战导入全流程详解 当你在Proteus 8.13中准备搭建一个DSP电路仿真项目时,突然发现元件库中竟然没有TMS320F28335这款德州仪器经典的DSP芯片,这种挫败感我深有体会。作为一款广泛应…...
别再只用小波降噪了!试试这个ICEEMDAN+皮尔逊的“前处理”组合拳
突破传统降噪瓶颈:ICEEMDAN与皮尔逊协同的信号预处理革命 在信号处理领域,工程师们常常面临一个尴尬的现实:教科书上的完美算法在实际复杂信号面前频频失效。我曾参与过一个工业振动监测项目,传统小波降噪处理后的信号就像被过度美…...
