PostgesSQL外部数据封装FDW
PostgesSQL外部数据封装FDW
- 1. FDW外部数据配置(单表)
- 1.1 远端数据库创建测试表
- 1.2 安装扩展postges\_fdw
- 1.3 创建外部服务SERVER
- 1.4 创建用户映射USER MAPPING
- 1.5 创建远程表FOREIGN TABLE
- 1.6 数据库更新测试
- 2. FDW外部数据配置(用户)
- 2.1 远端数据库创建测试表
- 2.2 创建远程schema
- 2.3 导入远程schema
- 2.4 查看远程schema表
- 3. FDW运维操作
- 3.1 外部表设置只读操作
- 3.2 删除增加外部表列
- 3.3 模式导入部分表
POSTGRESQL FDW 的名词是 foreign-data wrapper 外部数据包装, 此模块提供的功能与较旧的 dblink 模块的功能有很大重叠。但是
postgres_fdw
提供了更透明且符合标准的语法来访问远程表,并且在许多情况下可以提供更好的性能。
要准备使用 postgres_fdw
进行远程访问
-
使用 CREATE EXTENSION 安装
postgres_fdw
扩展。 -
使用 CREATE SERVER 创建外部服务器对象,以表示您要连接的每个远程数据库。将连接信息指定为服务器对象的选项,但
user
和password
除外。 -
使用 CREATE USER MAPPING 为您要允许访问每个外部服务器的每个数据库用户创建用户映射。将要使用的远程用户名和密码指定为用户映射的
user
和password
选项。 -
使用 CREATE FOREIGN TABLE 或 IMPORT FOREIGN SCHEMA 为您要访问的每个远程表创建外部表。外部表的列必须与引用的远程表匹配。但是,如果将正确的远程名称指定为外部表对象的选项,则可以使用与远程表不同的表和/或列名。
1. FDW外部数据配置(单表)
1.1 远端数据库创建测试表
postgres=# create database testdb13;
CREATE DATABASE
postgres=# \lList of databasesName | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgrestestdb13 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)
postgres=# create user u13 with password 'u13';
CREATE ROLE
postgres=# \c testdb13 u13
Password for user u13:
You are now connected to database "testdb13" as user "u13".
testdb13=>
testdb13=> create table t1 (id int,name varchar);
CREATE TABLE
testdb13=> insert into t1 values(1,'A');
INSERT 0 1
testdb13=> select * from t1;id | name
----+------1 | A
(1 row)
testdb13=> \dt+List of relationsSchema | Name | Type | Owner | Persistence | Size | Description
--------+------+-------+-------+-------------+-------+-------------public | t1 | table | u13 | permanent | 16 kB |
1.2 安装扩展postges_fdw
已安装扩展
postgres=# \dxList of installed extensionsName | Version | Schema | Description
---------+---------+------------+------------------------------plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(1 row)
安装报错,需先在本地软件安装
postgres=# create extension postges_fdw;
ERROR: extension "postges_fdw" is not available
DETAIL: Could not open extension control file "/pgsql/app/pg16/share/extension/postges_fdw.control": No such file or directory.
HINT: The extension must first be installed on the system where PostgreSQL is running.
进入到编译安装目录,编辑安装postgres_fdw
[root@pgdb ~]# cd /pgsql/soft/postgresql-16.1/contrib/postgres_fdw
[root@pgdb postgres_fdw]# ls
connection.c deparse.c expected meson.build option.o postgres_fdw--1.0.sql postgres_fdw.control postgres_fdw.o shippable.c sql
connection.o deparse.o Makefile option.c postgres_fdw--1.0--1.1.sql postgres_fdw.c postgres_fdw.h postgres_fdw.so shippable.o
[root@pgdb postgres_fdw]# make
[root@pgdb postgres_fdw]# make install
安装扩展postgres_fdw
postgres=# create extension postgres_fdw ;
CREATE EXTENSION
postgres=# \dxList of installed extensionsName | Version | Schema | Description
--------------+---------+------------+----------------------------------------------------plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural languagepostgres_fdw | 1.1 | public | foreign-data wrapper for remote PostgreSQL servers
(2 rows)
1.3 创建外部服务SERVER
创建一个服务器名pg_fdw_server 使用的类型为postgres_fdw 连接的数据库为 dbname 为 testdb13
postgres=# CREATE SERVER pg_fdw_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.168.1.100', port '5432', dbname 'testdb13');
CREATE SERVER
查看创建server
postgres=# \desList of foreign serversName | Owner | Foreign-data wrapper
---------------+----------+----------------------pg_fdw_server | postgres | postgres_fdw
(1 row)
postgres=# \des+List of foreign serversName | Owner | Foreign-data wrapper | Access privileges | Type | Version | FDW options | Description
---------------+----------+----------------------+-------------------+------+---------+--------------------------------------------------------+-------------pg_fdw_server | postgres | postgres_fdw | | | | (host '192.168.1.100', port '5432', dbname 'testdb13') |
(1 row)
1.4 创建用户映射USER MAPPING
postgres=# CREATE USER MAPPING FOR postgres SERVER pg_fdw_server OPTIONS (user 'u13', password 'u13');
CREATE USER MAPPING
postgres=# \deu+List of user mappingsServer | User name | FDW options
---------------+-----------+--------------------------------pg_fdw_server | u109 | ("user" 'u13', password 'u13')
(1 row)
1.5 创建远程表FOREIGN TABLE
postgres=# CREATE FOREIGN TABLE fdw_t1(id int,name varchar) SERVER pg_fdw_server OPTIONS (schema_name 'public',table_name 't1');
CREATE FOREIGN TABLE
postgres=# \det+List of foreign tablesSchema | Table | Server | FDW options | Description
--------+--------+---------------+-----------------------------------------+-------------public | fdw_t1 | pg_fdw_server | (schema_name 'public', table_name 't1') | postgres=# select * from fdw_t1;id | name
----+------1 | A
(1 row)
1.6 数据库更新测试
远端数据库insert数据
postgres=# \c testdb13 u13
Password for user u13:
You are now connected to database "testdb13" as user "u13".
testdb13=> insert into t1 values(2,'B');
INSERT 0 1
本地数据库访问远程表,实时同步过来。
postgres=# select * from fdw_t1;id | name
----+------1 | A2 | B
(2 rows)
2. FDW外部数据配置(用户)
2.1 远端数据库创建测试表
testdb13=> create table t2 (id int,name varchar);
CREATE TABLE
testdb13=> create table t3 (id int,name varchar);
CREATE TABLE
testdb13=> \dt+List of relationsSchema | Name | Type | Owner | Persistence | Size | Description
--------+------+-------+-------+-------------+------------+-------------public | t1 | table | u13 | permanent | 16 kB | public | t2 | table | u13 | permanent | 8192 bytes | public | t3 | table | u13 | permanent | 8192 bytes |
(3 rows)
2.2 创建远程schema
postgres=# create schema remote_fdw_schema;
CREATE SCHEMA
2.3 导入远程schema
postgres=# import foreign schema public from server pg_fdw_server into remote_fdw_schema options ( import_default 'true');
IMPORT FOREIGN SCHEMA
2.4 查看远程schema表
postgres=# \det+ remote_fdw_schema.*List of foreign tablesSchema | Table | Server | FDW options | Description
-------------------+-------+---------------+-----------------------------------------+-------------remote_fdw_schema | t1 | pg_fdw_server | (schema_name 'public', table_name 't1') | remote_fdw_schema | t2 | pg_fdw_server | (schema_name 'public', table_name 't2') | remote_fdw_schema | t3 | pg_fdw_server | (schema_name 'public', table_name 't3') |
(3 rows)
postgres=# select * from remote_fdw_schema.t2;id | name
----+------
(0 rows)postgres=# select * from remote_fdw_schema.t1;id | name
----+------1 | A2 | B
(2 rows)postgres=# select * from remote_fdw_schema.t3;id | name
----+------
(0 rows)
远端数据库更新数据测试
postgres=# \c testdb13 u13
testdb13=> insert into t2 values(22,'BB');
INSERT 0 1
testdb13=> insert into t3 values(33,'CC');
INSERT 0 1
本地数据库查看远程schema表
postgres=# select * from remote_fdw_schema.t2;id | name
----+------22 | BB
(1 row)
postgres=# select * from remote_fdw_schema.t3;id | name
----+------33 | CC
(1 row)
3. FDW运维操作
3.1 外部表设置只读操作
postgres=# insert into remote_fdw_schema.t1 values (3,'C');
INSERT 0 1
postgres=# select * from remote_fdw_schema.t1;id | name
----+------1 | A2 | B3 | C
(3 rows)
修改为只读操作,false改为true读写模式
postgres=# alter foreign table remote_fdw_schema.t1 options (add updatable 'false');
ALTER FOREIGN TABLE
postgres=# insert into remote_fdw_schema.t1 values (4,'D');
ERROR: foreign table "t1" does not allow inserts
3.2 删除增加外部表列
删除列
postgres=# select * from remote_fdw_schema.t1;id | name
----+------1 | A2 | B3 | C
(3 rows)
postgres=# alter foreign table remote_fdw_schema.t1 drop column name;
ALTER FOREIGN TABLE
postgres=# select * from remote_fdw_schema.t1;id
----123
(3 rows)
增加列
postgres=# alter foreign table remote_fdw_schema.t1 add column name varchar;
ALTER FOREIGN TABLE
postgres=# select * from remote_fdw_schema.t1;id | name
----+------1 | A2 | B3 | C
(3 rows)
3.3 模式导入部分表
- Limit to 指定哪些表导入
postgres=# \det_ remote_fdw_schema.*List of foreign tablesSchema | Table | Server
--------+-------+--------
(0 rows)
postgres=# import foreign schema public limit to ( t1,t2) from server pg_fdw_server into remote_fdw_schema options ( import_default 'true');
IMPORT FOREIGN SCHEMA
postgres=# \det_ remote_fdw_schema.*List of foreign tablesSchema | Table | Server
-------------------+-------+---------------remote_fdw_schema | t1 | pg_fdw_serverremote_fdw_schema | t2 | pg_fdw_server
(2 rows)
- Except 指定哪些表不要导入
postgres=# \det_ remote_fdw_schema.*List of foreign tablesSchema | Table | Server
--------+-------+--------
(0 rows)
postgres=# import foreign schema public except ( t1,t3) from server pg_fdw_server into remote_fdw_schema options ( import_default 'true');
IMPORT FOREIGN SCHEMA
postgres=# \det_ remote_fdw_schema.*List of foreign tablesSchema | Table | Server
-------------------+-------+---------------remote_fdw_schema | t2 | pg_fdw_server
(1 row)
相关文章:
PostgesSQL外部数据封装FDW
PostgesSQL外部数据封装FDW 1. FDW外部数据配置(单表)1.1 远端数据库创建测试表1.2 安装扩展postges\_fdw1.3 创建外部服务SERVER1.4 创建用户映射USER MAPPING1.5 创建远程表FOREIGN TABLE1.6 数据库更新测试 2. FDW外部数据配置(用户&#…...
redis相关问题整理
Redis 支持多种数据类型: 字符串 示例:存储用户信息 // 假设我们使用 redis-plus-plus 客户端库 auto redis Redis("tcp://127.0.0.1:6379"); redis.set("user:1000", "{name: John Doe, email: john.doeexample.com}"…...

基于 Electron、Vue3 和 TypeScript 的辅助创作工具全链路开发方案:涵盖画布系统到数据持久化的完整实现
基于 Electron、Vue3 和 TypeScript 的辅助创作工具全链路开发方案:涵盖画布系统到数据持久化的完整实现 引言 在数字内容创作领域,高效的辅助工具是连接创意与实现的关键桥梁。创作者需要一款集可视化画布、节点关系管理、数据持久化于一体的专业工具&…...

[Java · 铢积寸累] 数据结构 — 数组类型 - 增 删 改 查
🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java 学习手册 在上一章中我们介绍了如何声明与创建数组,还介绍了数组的基本使用方式。本章我们将在上一章的基础上,拓展数组的使用方式(可能会涉及一些思…...

前端笔记-Axios
Axios学习目标 Axios与API交互1、Axios配置与使用2、请求/响应拦截器3、API设计模式(了解RESTful风格即可) 学习参考:起步 | Axios中文文档 | Axios中文网 什么是Axios Axios 是一个基于 Promise 的现代化 HTTP 客户端库,专…...
vue3数据响应式丢失的情况有哪些
在 Vue 3 中,响应式系统使用的是 Proxy 实现,相比 Vue 2 提升很大,很多 Vue 2 中的数据响应式陷阱都被解决了(比如数组索引、新增属性等),但依然存在一些可能导致“响应式丢失”的情况。 🚨 Vue…...
每日一练(4~23):特别数的和
算法:枚举 题目 题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 n…...
AR行业应用案例与NXP架构的结合
1. 工业巡检AR头盔 场景示例:宁德核电基地使用AR智能头盔进行设备巡检,通过实时数据叠加和远程指导,将工作效率提升35%。头盔需处理传感器数据、图像渲染和低延迟通信1。 NXP架构支持: 协处理器角色:NXP i.MX RT系列M…...

C# 类型、存储和变量(值类型引用类型)
本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 值类型引用类型 数据项的类型定义了存储数据需要的内存大小及组成该类型的数据成员。类型还决定了对象…...

智慧校园从配电开始:AISD300为校园安全加上智能防护罩
安科瑞刘鸿鹏 摘要 随着校园用电需求不断上升及其安全保障要求的提高,传统低压配电系统已逐渐难以满足现代校园的安全与智能化管理需求。本文基于安科瑞电气推出的AISD300系列三相智能安全配电装置,探讨其在校园电力系统中的应用优势及关键技术特性。…...
如何创建极狐GitLab 议题?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 创建议题 (BASIC ALL) 创建议题时,系统会提示您输入议题的字段。 如果您知道要分配给议题的值,则可…...
如何将极狐GitLab 合并请求导出为 CSV?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 导出合并请求为 CSV (BASIC ALL) 将从项目的合并请求中收集的所有数据导出到逗号分隔值(CSV)文件中。…...

一 、环境的安装 Anaconda + Pycharm + PaddlePaddle
《从零到一实践:系统性学习生成式 AI(NLP)》 一 、环境的安装 Anaconda Pycharm PaddlePaddle 1. Anaconda 软件安装 Anaconda 软件安装有大量的教程,此处不在说明,安装完成之后界面如下: 2. 创建 Anaconda 虚拟环境 Paddl…...

十倍开发效率 - IDEA插件之 Maven Helper
0X00 先看效果 第一个选项表示存在冲突的依赖,可以看到图片中 mysql 的连接依赖发生了冲突,在低版本的上面直接右键选择 Exclude,冲突的依赖就被解决掉了。 0X01 安装 在 Plugins 中直接搜索 Maven Helper,选择第一个进行安装&am…...
Go语言和Python 3的协程对比
Go语言和Python 3都支持协程(concurrent coroutines),但它们的实现机制、使用方式、调度方式和性能表现差异很大。下面是对比分析: 一、基本概念对比 特性Go 协程(goroutine)Python3 协程(asyn…...

人机共跑,马拉松人型机器人同跑
马拉松比赛对人形机器人来说,是一场对硬件极限的测试,涉及机械、传感器、能源管理等多个方面。用户问的是硬件方面的考察和改进,这意味着我的回答需要聚焦于硬件性能,而不是算法或软件的优化。 对人形机器人硬件的考研 机械结构与…...

策略模式:动态切换算法的设计智慧
策略模式:动态切换算法的设计智慧 一、模式核心:定义一系列算法并可相互替换 在软件开发中,常常会遇到需要根据不同情况选择不同算法的场景。例如,在电商系统中,根据不同的促销活动(如满减、折扣、赠品&a…...

uniapp微信小程序:WIFI设备配网之TCP/UDP开发AP配网
一、AP配网技术原理 1.1 配网模式选择 AP配网(SoftAP模式)是IoT设备配网成功率最高的方案之一 1、其核心原理: 设备端:启动AP模式(如SSID格式YC3000_XXXX,默认IP192.168.4.1)手…...

离线-DataX
基本介绍 DataX 是阿里云 DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台,它是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源…...
在Ubuntu上查看PCL(Point Cloud Library)的版本
在Ubuntu上查看PCL(Point Cloud Library)的版本可以通过终端运行命令pcl_viewer --version来实现。该命令将显示PCL库的版本号。 另外,你也可以使用以下命令在终端中查看PCL的版本号: 方法一: dpkg -l | grep libpc…...
RESTful学习笔记(一)
Web发展 一、API 程序硬件接口(Application Programming Interface),是预先定义好的逻辑函数,软件系统不同组成部分衔接的约定,直接调用函数,无序访问代码细节,分为SDK和Web应用接口两类 SDK…...
【汽车ECU电控数据管理篇】S19文件格式解析篇章
一、S19格式是啥 在电控文件管理的初期阶段,我首次接触到的是 A2L 和 HEX 文件。其中,A2L 文件主要承担着描述性功能,它详细地描述了各种参数和配置等相关信息。而 HEX 文件则是一种刷写文件,其内部明确记录了具体的地址以及对应的…...

第5课:对象与类——JS的“信息收纳盒”
生活从不会亏待每一个努力向上的人,愿你带着满腔热忱,无畏前行,用汗水书写青春的华章,用拼搏铸就人生的辉煌,今日的每一份付出,都将是未来成功的基石! 欢迎来到「JavaScript 魔法学院」第 5 课…...

xshell 登录验证失败解决
产生原因:检查防火墙、selinux 、网络模式、对外是否能ping外网 systemctl status firewalld cat /etc/selinux/config #disabled ping 223.5.5.5 ping 8.8.8.8 ping www.baidu.com 一、检查网络连接 确认虚拟机是否在线: 首先,确保虚…...

AI 赋能 3D 创作!Tripo3D 全功能深度解析与实操教程
大家好,欢迎来到本期科技工具分享! 今天要给大家带来一款革命性的 AI 3D 模型生成平台 ——Tripo3D。 无论你是游戏开发者、设计师,还是 3D 建模爱好者,只要想降低创作门槛、提升效率,这款工具都值得深入了解。 接下…...

AI书籍大模型微调-基于亮数据获取垂直数据集
大模型的开源,使得每位小伙伴都能获得AI的加持,包括你可以通过AIGC完成工作总结,图片生成等。这种加持是通用性的,并不会对个人的工作带来定制的影响,因此各个行业都出现了垂直领域大模型。 垂直大模型是如何训练出来…...
Vue3 + Vite + TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码
Vue3 Vite TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码 ExcelJS生成文档并导出导出表头其他函数 生成水印设置文档的背景水印dom 转图片插入图片全部代码 ExcelJS 读取&#…...

Kafka命令行的使用/Spark-Streaming核心编程(二)
Kafka命令行的使用 创建topic kafka-topics.sh --create --zookeeper node01:2181,node02:2181,node03:2181 --topic test1 --partitions 3 --replication-factor 3 分区数量,副本数量,都是必须的。 数据的形式: 主题名称-分区编号。 在…...

2020-06-23 暑期学习日更计划(机器学习入门之路(资源汇总)+概率论)
机器学习入门 前言 说实话,机器学习想学好真心不易,很多时候都感觉自己学得云里雾里。以前一段时间自己为了完成毕业设计,在机器学习的理论部分并没有深究,仅仅通过TensorFlow框架力求快速实现模型。现在来看,很多时候…...

SQL 时间转换的CONVERT()函数应用说明
目录 1.常用查询使用的几个 2.其他总结 1.常用查询使用的几个 SELECT CONVERT(VARCHAR, GETDATE(), 112) SELECT CONVERT(VARCHAR, GETDATE(), 113)SELECT CONVERT(VARCHAR, GETDATE()-1, 112) SELECT CONVERT(VARCHAR, GETDATE()-1, 113) 2.其他总结 SELECT CONVERT(VARCHA…...