PostgreSQL(二十五)PG_FDW的使用

news2024/9/25 21:18:21

目录

一、FDW的简介与特性

二、pg_fdw的部署与使用

1、编译postgres_fdw

2、添加postgres_fdw

3、创建FDW服务器

​4、授权并创建用户映射

5、客户端创建FDW测试表

6、访问外部表

​7、可能出现的问题

三、FDW的执行原理

1、PG-PG访问过程描述

2、PG-PG访问过程查看

3、PG-PG访问过程说明

四、各版本功能演进

1、排序操作

2、聚组操作

3、多表查询

五、本地外部表的访问实验

1、准备csv文件

2、编译、添加扩展file_fdw

3、创建SERVER ON FILE

4、创建外部表


一、FDW的简介与特性

        FDW:Foreign Data Wrappers,在同构和异构数据库之间进行数据的访问。

        PostgreSQL FDW 是一种外部访问接口。通过这个接口,可以让PG访问存储在外部的数据,这些数据可以是外部的pg数据库,也可以oracle、mysql等数据库,甚至可以是文件。

     目前支持的数据库有:pg-pg(pg_fdw),pg-mysql(mysql_fdw),pg-oracle(oracle_fdw)等。

        支持的外部文件有:csv、josn、pg_dump、xml等。

二、pg_fdw的部署与使用

pg_fdw:PostgreSQL Foreign Data Wrappers,PG-PG时需要使用到的插件。

本实验中,wqdb1为本地客户端的库,wqdb2为远程客户端的库。

pg_fdw要在本地客户端部署与使用。

1、编译postgres_fdw

cd /data/package/pg/postgresql-14.8/contrib/postgres_fdw
make
make install

2、添加postgres_fdw

哪个database上使用,就在哪个database上安装。本实验在wqdb1上安装。

必须使用pg超级用户执行。

安装完成后可以查看下安装的信息。

su - postgres
psql
\c wqdb
CREATE EXTENSION postgres_fdw;
SELECT * FROM pg_extension;

 

3、创建FDW服务器

在本地客户端创建:

        host:远程主机名、ip地址;

        port:远程数据库监听端口;

        dbname:远程访问的数据库的名字。

CREATE SERVER wq_fdw FOREIGN DATA WRAPPER postgres_fdw
OPTIONS(host '$ip',port '$port',dbname 'wqdb2');
\des+

 4、授权并创建用户映射

在本地客户端执行映射语句,将本地用户与远程用户相映射:

        user:远程访问的数据库所属的用户(\d-拥有者);

        password:远程访问的数据库所属用户的密码。

CREATE USER fdw_u1 PASSWORD 'fdw_u1';
GRANT USAGE ON FOREIGN SERVER wq_fdw TO fdw_u1;
CREATE USER MAPPING FOR fdw_u1 SERVER wq_fdw OPTIONS(user 'postgres',password '$passwd');
\deu+

5、客户端创建FDW测试表

(前情提要:已经在远程客户端创建了一个名叫emp的表,并插入了相关数据。)

在本地客户端,以刚刚映射到的用户pg_fdw1登录并创建fdw测试表;

客户端创建的表结构要和外部表(远程emp表)的结构相一致(\d emp查看);

schema_name:public,特定schema用户创建的表,则写该schema名字;

table_name:需要访问的表的表名。

psql -U fdw_u1 -d wqdb1;

CREATE FOREIGN TABLE emp_fdw(
empno int,
ename varchar(10),
job varchar(10),
mgr int,
hiredate date,
sal float4,
comm float4,
deptno int)
SERVER wq_fdw OPTIONS(schema_name 'public',table_name 'emp');

6、访问外部表

在本地通过访问创建的FDW表来访问外部表

SELECT * FROM emp_fdw;

 7、可能出现的问题

确保前面的创建步骤都没有问题,但是最后一步查询的时候,报错:

wqdb1=> select * from emp_fdw;
2024-08-06 19:20:36.112 CST [8923] ERROR:  could not connect to server "wq_fdw"
2024-08-06 19:20:36.112 CST [8923] DETAIL:  connection to server at "XXX", port XXX failed: 拒绝连接
		Is the server running on that host and accepting TCP/IP connections?
2024-08-06 19:20:36.112 CST [8923] STATEMENT:  select * from emp_fdw;
ERROR:  could not connect to server "wq_fdw"
DETAIL:  connection to server at "XXX", port XXX failed: 拒绝连接
	Is the server running on that host and accepting TCP/IP connections?

        可以测试一下,在本地服务器端执行psql -h $ip -p $port命令,能否登录到远程服务器端的pg中。

        如果失败了,可能是远程服务器的实例链接访问控制,限制了本地服务器的访问。可以根据《PostgreSQL(八)》 ,配置本地客户端允许访问即可。

三、FDW的执行原理

1、PG-PG访问过程描述

pg访问外部表时执行的过程,和本地没什么区别,具体流程如下:

(1)Creating a Query Tree

        创建查询树(访问 pg_catalog.pg_class和pg_catalog.pg_foreign_table)

(2)Connecting to the Remote Server:连接远程的服务器(使用libpq库)

(3)Creating a Plan Tree Using EXPLAIN Commands

        创建计划树(Optional)(访问pg_catalog.pg_user_mapping和pg_catalog.pg_foreign_server)

(4)Deparesing

        重建文本(postgres_fdw从通过解析和分析创建的查询树中重新创建一个纯文本文件,在 Postgresql中称为 deparesing。)

(5)Sending SQL Statements and Receiving Result:发送SQL语句并接受结果

2、PG-PG访问过程查看

在远程PG服务器端配置以下参数打开日志,可以查看到访问流程:

//进到参数文件
vim $PGDATA/postgresql.conf

//配置日志参数
log_destination='csvlog'
logging_collector=on
log_directory='pg_log'
log_filename='postgresql-%y-% m-%d'
log_truncate_on_rotation=off
log_rotation_age=1d
log_rotation_size=0
log_error_verbosity=verbose
log_statement=all

//配置完成后重启数据库
pg_ctl stop
pg_ctl start

//进入日志目录,查看日志
cd $PGDATA/pg_log
tail -f postgresql-24-\ m-06.csv

然后在本地服务端执行select 命令,可以在远程端看见日志更新,日志中记录了远程访问的过程。

3、PG-PG访问过程说明

四、各版本功能演进

1、排序操作

        当前实验的pg版本为pg14。在实验版本上,当查询语句包含排序操作时,排序不在本地执行,而是在远程客户端执行,然后只返回结果给本地客户端。这样可以极大地减少网络间的数据传输。

2、聚组操作

        在实验版本上,当查询语句包含聚组操作时,聚组操作不在本地执行,而是在远程客户端执行,然后只返回结果给本地客户端

        有条件的可以研究一下,通过对比9.6或更早版本中执行、在9.6或以后版本中执行,可以观察到,在查询性能上有非常明显的提升

3、多表查询

        在默认情况下,执行select语句访问远程客户端的表时,如果进行多表查询,pg会将多表查询的操作放到本地服务端来执行。而这种情况下,会导致消耗更多的性能。

        但是可以通过用ALTER SERVER命令将use_remote_estimate选项设置为on的方式,将连接操作在远程执行,以提高性能。

//用postgres用户执行
ALTER SERVER wq_fdw OPTIONS(use_remote_estimate 'on');

//用fdw_u1执行
EXPLAIN SELECT e.*,d.* FROM emp_fdw e,fdw_dept d WHERE d.deptno=e.deptno;

五、本地外部表的访问实验

PG也支持访问本地外部表,本实验使用csv文件为例。

1、准备csv文件

在实验数据库wqdb2中导出所需的csv文件

\copy emp TO '/data/pg14/data/pg_tblspc/emp.csv' WITH CSV HEADER;

2、编译、添加扩展file_fdw

cd /data/package/pg/postgresql-14.8/contrib/file_fdw
make
make install
psql
\c wqdb1
CREATE EXTENSION file_fdw;
SELECT * FROM pg_extension;

3、创建SERVER ON FILE

CREATE SERVER pg_file_server foreign data wrapper file_fdw;
\des+

4、创建外部表

外部表的表结构需要与外部文件中表的表结构一致

CREATE FOREIGN TABLE emp_file_fdw(
empno int,
ename varchar(10),
job varchar(10),
mgr int,
hiredate date,
sal float4,
comm float4,
deptno int)
SERVER pg_file_server OPTIONS(filename '/data/pg14/data/pg_tblspc/emp.csv',format 'csv',header 'true',delimiter ',');

SELECT * FROM emp_file_fdw;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一部分优化算法

一、优化问题 1、优化目标 (1)优化和深度学习的目标是根本不同的。前者主要关注的是最小化目标,后者则关注在给定有限数据量的情况下寻找合适的模型。 (2)优化算法的目标函数通常是基于训练数据集的损失函数&#x…

springboot 定义类导入爆红,@Autowried自动注入失败

springboot 定义类导入爆红,Autowried自动注入失败 根据提供的异常信息,分析如下: 异常起因:UnsatisfiedDependencyException 表示在创建名为 ‘a1001Service’ 的 bean 时存在依赖问题,具体是在字段 ‘a1001Mapper’ …

算法日记day 32(贪心之划分字母区间|合并区间|单调递增的数字|监控二叉树)

一、划分字母区间 题目: 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每…

nginx 405错误是什么意思

405错误:方法不被允许 当Web服务器收到一个它不支持的HTTP请求方法时,就会返回405错误。 原因 405错误通常是由于客户端发出了不兼容或不支持的HTTP请求方法。例如,客户端可能请求一个只能通过GET方法访问的资源,但使用了POST方…

C代码做底层及Matlab_SimuLink做应用层设计单片机程序

前言:SimuLink工具极其强大,但是能直接支持单片机自主开发的很少,造成这个问题的原因主要是我们使用的芯片底层多是C代码工程,芯片厂家也只提供C代码库,很少能提供SimuLink的支持库,即使提供也不是很不完善,如NXP的一些芯片提供的SimuLink库不含盖高级应用,再比如意法半…

视创云展:轻松构建出独一无二的元宇宙空间

视创云展作为一款前沿的元宇宙数字营销平台,集成了多项核心技术,旨在为用户提供低门槛、高效能的元宇宙体验与创作工具。其核心技术主要包括: 1、低门槛、模块化,3D场景创作工具 视创云展集成了海量的元宇宙场景模板,…

SpringBoot中如何自定义自己的过滤器Filter(简易版)

本文不再说SpringMVC中的写法,毕竟现在项目都是SpringBoot,我们还是尽量使用SpringBoot的写法,首先了解一下Filter。 说白了,就是在请求到达服务器之前进行拦截,一般使用场景是拦截登录进行权限校验,当然一…

跟李沐学AI:GoogLeNet含并行连结的网络

Inception块 GoogleNet中的基本卷积块,从4个路径从不同层面抽取信息,然后再输出通道维合并。 数据输入后共有四条路径:第一个路径为1x1的卷积层;第二个路径先用1x1的卷积层修改通道数,在输入到3x3的卷积层&#xff0c…

腾讯云AI代码助手助力软件开发体验分享

引言 现在,AI工具在软件开发中变得越来越重要,它们能显著提升效率和代码质量。本文就来分享一下我用腾讯云AI代码助手的经历,看看它是怎么在开发中帮了大忙的。 开发环境介绍 这次的项目用的是JavaScript,开发环境是Windows 10…

用于胰腺癌自动化综述报告和可切除性分类的大型语言模型| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Large Language Models for Automated Synoptic Reports and Resectability Categorization in Pancreatic Cancer 用于胰腺癌自动化综述报告和可切除性分类的大型语言模型 Background 背景 Structured radiology reports for pancreatic ductal adenocarcinom…

condition字符串匹配问题

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 fs使用dialplan配置文件执行业务流程,condition条件变量的配置是必然会使用的,这里记录一次配置过程中的错误示范。 环境 CentOS 7.9 freeswitch 1.10.7 问题描述 dialplan配置如下&#xf…

如何做到项目真实性优化?保姆级写简历指南第五弹!

大家好,我是程序员鱼皮。做知识分享这些年来,我看过太多简历、也帮忙修改过很多的简历,发现很多同学是完全不会写简历的、会犯很多常见的问题,不能把自己的优势充分展示出来,导致措施了很多面试机会,实在是…

pdf拆分需要怎么做?6个软件帮助你快速拆分pdf文件

pdf拆分需要怎么做?6个软件帮助你快速拆分pdf文件 拆分PDF文件可以让你更方便地处理和管理文档内容,无论是提取特定页面还是将文件分成更小的部分。以下是六款帮助你快速拆分PDF文件的软件,每款软件都有其独特的功能和优势,供你选…

4章4节:临床数据科学中如何用R来进行缺失值的处理

在临床科研中,由于失访、无应答或记录不清等各种原因,经常会遇到数据缺失的问题。本文将深入探讨医学科研中数据缺失的成因、分类、影响以及应对方法,结合R语言的实际应用,为医学研究人员提供全面的解决方案。 一、认识缺失数据 其实,很多医学的纵向研究因获取数据资料时…

铜山金杏·打响区域公用品牌,助力乡村振兴新征程

为进一步提升徐州市铜山区农业产业发展的重要战略布局,从而更好地助力乡村振兴,徐州市铜山区农业农村局借助“铜山金杏地理标志农产品保护工程项目”联合山东百仕达地标产业有限公司打造铜山农特产品区域公用品牌——“铜山金杏”,充分挖掘铜…

大搜罗2024年数据恢复软件TOP3,互联网人士的年度推荐!

不管是咱们普通人,还是大大小小的公司,都怕数据一去不复返。好在科技给力,现在数据恢复软件越来越牛,帮我们解决了这块心病。今儿个,就给大家聊聊几款2024年超火的数据恢复软件,如转转大师数据恢复软件等&a…

防盗、防泄露、防篡改,我们把 ZooKeeper 的这种认证模式玩明白了

作者:子葵 你的 ZooKeeper 安全吗? 在当下网络安全事件频发的背景下,安全防护的构建成为日常开发与运维工作中的重中之重。ZooKeeper 存储着系统敏感实例信息与配置数据,但传统的使用方式并未为 ZooKeeper 配备强制身份验证机制…

Ubuntu查看IP地址

Ubuntu查看IP地址 文章目录 Ubuntu查看IP地址查看IP地址的命令遇到的问题解决方案 查看IP地址的命令 1.使用ifconfig 2.使用hostname -I(-之前一个空格) 3.使用ip addr show 遇到的问题 1.使用ifconfig只显示一个127.0.0.1地址 2.使用hostname -I …

成功解决LabVIEW中加载 lvanlys.dll动态链接库(DLL)初始化例程失败

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主 🎄所属专栏:『奇怪问题及Bug解决』 📑精选文章:LabVIEW人工智能深度学习指南 🍻本文由virobotics(仪酷智能)原…

事务和索引(面试常问)

面试常问: 一、数据库隔离级别?事务隔离级别解决的问题? 答:1.数据库隔离级别: READ_UNCOMMITTED 读未提交 READ_COMMITTED 读提交(不可重复读) REPEATABLE_READ 可重复读 SERIALIZABLE 串行化…