炸裂,PG的FDW又进化了!

📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,
备份恢复,安装迁移,性能优化、故障应急处理等。
📣📣📣

文章目录

    • 📣 1.什么是FDW?
    • 📣 2.FDW工作流
    • 📣 3.file_fdw
      • ✨ 3.1 安装插件
      • ✨ 3.2 生成file_fdw服务器
      • ✨ 3.3 创建外部表
    • 📣 4.postgres_fdw
      • ✨ 4.1 创建安装插件
      • ✨ 4.2 权限配置
      • ✨ 4.3 创建外部服务
      • ✨ 4.4 创建映射用户
      • 4.5 创建外部表
      • ✨ 4.5 其它特性
    • 📣 5.总结


FDW是外部数据包装器,基于PG有这个功能,如果想要数据融合,很容易在PG上实现,只要开发对应的FDW功能即可.

📣 1.什么是FDW?

FDW (foreign-data wrapper,外部数据包装器),PostgreSQL FDW 是一种外部访问接口,它可以被用来访问存储在外部的数据,这些数据可以是外部的pg数据库,也可以oracle、mysql等数据库,甚至可以是文件。

Specific SQL Database Wrappers
基本上每种数据库、数据类型都有各自的fdw插件,访问oracle库有oracle_fdw,
访问mysql库有mysql_fdw等等。fdw插件可以直接安装或者下载安装

可以让我们在PostgreSQL 中使用SQL查询极为丰富的外部数据:
主流关系型数据库:Oracle、MySQL、SQL Server等
NoSQL数据库:ClickHouse、MongoDB、Redis、Neo4j等
外部文件:csv、josn、pg_dump、xml
Web文件:S3、Twitter、Facebook…

📣 2.FDW工作流

1.词法分析器为输入的SQL语句创建查询树
2.SQL的执行器通过网络连接到源端的数据库服务器
3.如果启用了use_remote_estimate选项,执行器会执行explain命令评估执行计划
4.执行器根据最优的执行计划,重新创建SQL语句

📣 3.file_fdw

file_fdw插件为PG数据库提供了访问外部数据的能力,比如我们常见的文件csv,log等,该插件是内置在PG源码的contrib中。

✨ 3.1 安装插件

cd /pgccc/soft/postgresql-15.6/contrib

–编译安装
[root@centos79 contrib]# cd file_fdw
[root@centos79 file_fdw]# make install

–再次确认插件
[root@centos79 ~]# cd /pgccc/pgsql-15/share/extension

–安装插件
postgres=# CREATE EXTENSION file_fdw;

✨ 3.2 生成file_fdw服务器

–先生成一个file_fdw服务器。
CREATE SERVER file_fdw_server FOREIGN DATA WRAPPER file_fdw;

✨ 3.3 创建外部表

-- 创建一个名为"example"的新表
CREATE TABLE example (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    age INT
);
 
-- 插入数据到"example"表中
INSERT INTO example (name, age) VALUES
('Alice', 25),
('Bob', 30),
('Charlie', 35);
 
-- 查询"example"表中的所有数据
SELECT * FROM example;


--导出到文件
\copy example to '/home/postgres/example.csv' with csv header delimiter ','


--创建一个外部数据表
CREATE FOREIGN TABLE csvTable (
id SERIAL,
name VARCHAR(100),
age INT
) SERVER file_fdw_server
OPTIONS (format 'csv', header 'true', filename '/home/postgres/example.csv', delimiter ',', null'');

csv文件放在了根目录下面。
csv里面有4列,从左往右命令。还可以设置有没有列名选择
header 'true'  有列名,csv的第一行不作为表的数据 header 'false' 没有列名,csv的第一行也作为表的数据

–再次查询,完全和一般的表类似
postgres=# select * from csvTable;

📣 4.postgres_fdw

通过 postgres_fdw访问远程PostgreSQL数据库表。
步骤如下:
在源端(本地库)创建 postgres_fdw 插件
创建 foreign server 外部服务(即:指连接外部数据源的连接信息)
创建映射用户(映射用户指定了访问外部表的本地用户和远程用户信息)
创建外部表(外部表的表定义建议和远端表结构一致)

✨ 4.1 创建安装插件

本地库做如下的操作:
–编译安装
[postgres@centos79 ~]$ cd /pgccc/soft/postgresql-15.6/contrib
[postgres@centos79 contrib]$ cd postgres_fdw
[postgres@centos79 postgres_fdw]$ make install
–再次确认插件
[root@centos79 ~]# cd /pgccc/pgsql-15/share/extension

–postgres 超级用户登录 PostgreSQL
[postgres@centos79 ~]$ psql
postgres=# CREATE EXTENSION postgres_fdw;
postgres=# \dx

✨ 4.2 权限配置

本地库做如下的操作:
若使用超级用户使用postgres_fdw可以跳过
普通用户使用postgres_fdw需要单独授权
GRANT USAGE ON FOREIGN DATA WRAPPER postgres_fdw TO pgtest;

✨ 4.3 创建外部服务

本地库做如下的操作:
外部服务定义了远端PostgreSQL数据库的IP、端口、数据库连接信息
CREATE SERVER fdwpg2 FOREIGN DATA WRAPPER
postgres_fdw OPTIONS (host ‘pg2host’, port ‘5432’, dbname ‘devdb’);

✨ 4.4 创建映射用户

本地库做如下的操作:
映射用户指定了连接源端 PostgreSQL 数据库的用户名和密码信息
CREATE USER MAPPING FOR pgtest
SERVER fdwpg2 OPTIONS (user ‘pg2user’, password ‘pg2user’);
FOR:配置的用户为本地的数据库用户
OPTIONS :配置的是远端PostgreSQL数据库的用户和密码

4.5 创建外部表

--远端数据库创建测试表
CREATE TABLE pg2_fdw (id int4 ,info text) ;
INSERT INTO pg2_fdw (id , info ) VALUES (1, 'a'),(2, 'b');

---创建外部表(本地库)
CREATE FOREIGN TABLE ft_fdw (
id int4,
info text
) SERVER fdwpg2 OPTIONS (schema_name 'pg2user', table_name 'pg2_fdw');

通过外部表访问远端数据表
注意:远端数据库pg_hba.conf文件需要允许本地库访问策略
select * from pg2_fdw;

✨ 4.5 其它特性

支持可写特性
从PostgreSQL 9.3 版本开始支持postgres_fdw 外部表可写的条件
创建映射用户时配置的远端数据库用户需要对远端表具有写权限
PostgreSQL 必须是 9.3及以上版本。
聚合函数下推
PostgreSQL 10 版本在 postgres_fdw 扩展模块中新增了一个可以将聚合、
关联操作下推到远端 PostgreSQL 数据库进行的特性。
它大幅度减少了从远程库传送到本地库的数据量,
提升了 postgres_fdw 外部表上聚合查询的性能。

📣 5.总结

FDW的其它插件支持外部表方式访问mysql,oracle等数据库表数据,PG的FDW可以根据业务开发各种FDW把数据进行融合,比如数据迁移、异构DBMS之间的联动,是一个做数据整个的非常棒的功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/507137.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 用pygame简简单单实现一个打砖块

# -*- coding: utf-8 -*- # # # Copyright (C) 2024 , Inc. All Rights Reserved # # # Time : 2024/3/30 14:34 # Author : 赫凯 # Email : hekaiiii163.com # File : ballgame.py # Software: PyCharm import math import randomimport pygame import sys#…

C++:加减乘除运算符(14)

就是常用的一些算数符 正1010负-10-10加102030减10 - 20-10 乘 10 * 20200除10 / 200.5 加 简单的加法运算 #include<iostream> using namespace std;int main() {// 加减乘除int a1 10;int b1 20;cout << a1 b1 << endl;system("pause");ret…

鸿蒙OS开发实战:【ArkTS 实现MQTT协议(2)】

软件说明 协议传输通道仅为TCPSocket基于HarmonyOS SDK API 9开发开发语言&#xff1a;ArkTS&#xff0c;TypeScript 应用操作说明 测试首页 “连接” : 用于连接远端服务器。具备“连接 & 断开” 两个功能“设置” : 用于添加更多主题“订阅” & “解除” : 仅用于…

LLM:函数调用(Function Calling)

1 函数调用 虽然大模型能解决很多问题&#xff0c;但大模型并不能知晓一切。比如&#xff0c;大模型不知道最新消息(GPT-3.5 的知识截至 2021年9月&#xff0c;GPT-4 是 2023 年12月)。另外&#xff0c;大模型没有“真逻辑”。它表现出的逻辑、推理&#xff0c;是训练文本的统计…

第九节:时间队列(终结篇)

一、概述 在常规的时间管理中是时间到了触发某个任务&#xff0c;这样一个时间点对应一个任务。在特殊的场景下&#xff0c;任务不断放送到时间队列&#xff0c;时间一到&#xff0c;全部任务执行并释放。如图&#xff1a; 二、时间队列组件 SMB提供了TimeFragment组件来构建…

Domino中的Web博客还能这么用

大家好&#xff0c;才是真的好。 最近时间比较空余&#xff08;闲得慌&#xff09;&#xff0c;计划做一个网站出来。虽然网站很不流行&#xff0c;但对80后程序员来说&#xff0c;毕竟容易实现和感觉亲切。 在Domino平台上做一个网站实在是太容易了&#xff0c;但除了手动开…

【Linux】IP协议

目录 IP报头格式 网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 IP报文分片 1.粗粒度谈谈分片 a. 确保将所有的分片全部聚到一起&#xff08;相同的标识&#xff09; b. 片偏移排序&#xff08;完成组转&#xff09; 2.分片细节 数据链路层 M…

http模块 服务器端如何响应(获取)静态资源?

一、静态资源与动态资源介绍&#xff1a; &#xff08;1&#xff09;静态资源 内容长时间不改变的资源。eg&#xff1a;图片、视频、css js html文件、字体文件... &#xff08;2&#xff09;动态资源 内容经常更新的资源。eg&#xff1a;百度首页、淘宝搜索列表... 二、服…

引领向量数据库技术新变革,Milvus 2.4 正式上线

备受关注的 Milvus 2.4 正式上线! 作为向量数据库赛道的领军者,Zilliz 一直致力于推动向量技术的进步与创新。本次发布中,Milvus 新增支持基于 NVIDIA 的 GPU 索引—— CUDA 加速图形索引(CAGRA),突破了现有向量搜索的能力。 GPU 索引是向量数据库技术中的重要里程碑,…

【码银送书第十六期】大模型在金融行业的应用场景和落地路径

作者&#xff1a;林建明 来源&#xff1a;IT阅读排行榜 本文摘编自《AIGC重塑金融&#xff1a;AI大模型驱动的金融变革与实践》&#xff0c;机械工业出版社出版 文章转自&#xff1a;大模型在金融行业的应用场景和落地路径 这是最好的时代&#xff0c;也是最坏的时代。尽管…

Linux系统使用Docker部署个人IT工具箱IT-Tools结合内网穿透实现公网访问

作为程序员&#xff0c;在日常工作中&#xff0c;需要借助一些工具来提高我们工作效率&#xff0c;IT-Tools是为开发人员度身打造的一套便捷在线工具。它提供全面功能&#xff0c;使开发者能以更高效方式完成任务。经由IT-Tools&#xff0c;开发人员能轻松应对各类技术挑战&…

【随笔】Git -- 高级命令(上篇)(六)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

CVPR 2024 | 风格迁移和人像生成汇总!扩散模型diffusion用于经典AIGC方向

风格迁移 1、DEADiff: An Efficient Stylization Diffusion Model with Disentangled Representations 基于文本到图像扩散模型在迁移参考风格方面具有巨大潜力。然而&#xff0c;当前基于编码器的方法在迁移风格时显著损害了文本到图像模型的文本可控性。本文提出DEADiff来解决…

解决win10 cmd下运行python弹出windows应用商店

Windows 10 的五月更新为 Microsoft Store 应用商店带来了 Python 3.7 原因是这个环境变量“C:\Users\hongc\AppData\Local\Microsoft\WindowsApps”的优先级比我们创建的python环境变量优先级高 所以我们只需要删除这个环境变量即可 但是为了不影响正常功能 推荐将Python的…

【机器学习】数据探索---python主要的探索函数

在上一篇博客【机器学习】数据探索(Data Exploration)—数据质量和数据特征分析中&#xff0c;我们深入探讨了数据预处理的重要性&#xff0c;并介绍了诸如插值、数据归一化和主成分分析等关键技术。这些方法有助于我们清理数据中的噪声、消除异常值&#xff0c;以及降低数据的…

每日一题(相交链表 )

欢迎大家来我们主页进行指导 LaNzikinh-CSDN博客 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节…

【蓝桥杯第十三届省赛B组】(详解)

九进制转十进制 #include <iostream> #include<math.h> using namespace std; int main() {cout << 2*pow(9,3)0*pow(9,2)2*pow(9,1)2*pow(9,0) << endl;return 0; }顺子日期 #include <iostream> using namespace std; int main() {// 请在此…

20-日志处理(上):如何设计日志包并记录日志?

通过记录日志&#xff0c;可以完成一些基本功能&#xff0c;比如开发、测试期间的Debug&#xff0c;故障排除&#xff0c;数据分析&#xff0c;监控告警&#xff0c;以及记录发生的事件等。 如何设计日志包 基础功能 基础功能&#xff0c;是优秀日志包必备的功能&#xff0c;能…

勒石燕然的窦宪,打得匈奴只得为害欧洲了

匈奴&#xff0c;一个与汉族争斗了数百年的民族&#xff0c;在大大小小上百场战役中&#xff0c;双方一直打得你来我往。在东汉&#xff0c;一个罪臣指挥了汉民族与匈奴的终局之战。更令人想不到的是&#xff0c;终局之战北匈奴的战败却整得离中国相距甚远的欧洲崩溃了。 窦家…

ARP类型

地址解析协议ARP即可实现将IP地址解析为MAC地址 动态ARP 动态ARP表项由ARP协议通过ARP报文自动生成和维护&#xff0c;可以被老化&#xff0c;可以被新的ARP报文更新&#xff0c;也可以被静态ARP表项覆盖。 动态ARP适用于拓扑结构复杂、通信实时性要求高的网络。 静态ARP …