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 进行远程访问

  1. 使用 CREATE EXTENSION 安装 postgres_fdw 扩展。

  2. 使用 CREATE SERVER 创建外部服务器对象,以表示您要连接的每个远程数据库。将连接信息指定为服务器对象的选项,但 userpassword 除外。

  3. 使用 CREATE USER MAPPING 为您要允许访问每个外部服务器的每个数据库用户创建用户映射。将要使用的远程用户名和密码指定为用户映射的 userpassword 选项。

  4. 使用 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)

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

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

相关文章

策略模式(Strategy Pattern)详解

文章目录 1. 什么是策略模式?2. 为什么需要策略模式?3. 策略模式的核心概念3.1 策略(Strategy)3.2 具体策略(Concrete Strategy)3.3 上下文(Context) 4. 策略模式的结构5. 策略模式的…

在 Vue3 中封装的 Axios 实例中,若需要为部分接口提供手动取消请求的功能

核心思路 封装接口时返回 Promise 和 abort 方法: 为需要支持取消的接口返回一个对象,包含 promise 和 abort 方法,用户可通过 abort 主动中断请求。使用 AbortController 或 CancelToken: 推荐 AbortController(浏览…

Flink介绍——实时计算核心论文之Dataflow论文详解

引入 在过去的几篇文章里,我们看到了大数据的流式处理系统是如何一步一步进化的。从最早出现的S4,到能够做到“至少一次”处理的Storm,最后是能够做到“正好一次”数据处理的MillWheel。我们会发现,这些流式处理框架,…

Python自动化解决滑块验证码的最佳实践

1. 引言:滑块验证码的挑战与自动化需求 滑块验证码(Slider CAPTCHA)是当前互联网广泛使用的反爬机制之一,它要求用户手动拖动滑块到指定位置以完成验证。这种验证方式可以有效阻止简单的自动化脚本,但对爬虫开发者来说…

路由与OSPF学习

【路由是跨网段通讯的必要条件】 路由指的是在网络中,数据包从源主机传输到目的主机的路径选择过程。 路由通常涉及以下几个关键元素: 1.路由器:是一种网络设备,负责将数据包从一个网络传输到另一个网络。路由器根据路由表来决定…

(done) 吴恩达版提示词工程 5. 推理 (情绪分类,控制输出格式,输出 JSON,集成多个任务,文本主题推断和索引,主题内容提醒)

url: https://www.bilibili.com/video/BV1Z14y1Z7LJ?spm_id_from333.788.videopod.episodes&vd_source7a1a0bc74158c6993c7355c5490fc600&p2 别人的笔记 url: https://zhuanlan.zhihu.com/p/626966526 5. 推理任务(Inferring) 这个视频是关于…

MySQL VS SQL Server:优缺点全解析

数据库选型、企业协作、技术生态、云数据库 1.1 MySQL优缺点分析 优点 开源免费 社区版完全免费,适合预算有限的企业 允许修改源码定制功能(需遵守GPL协议) 跨平台兼容性 支持Windows/Linux/macOS,适配混合环境部署 云服务商…

Pycharm 代理配置

Pycharm 代理配置 文章目录 Pycharm 代理配置1. 设置系统代理1.1 作用范围1.2 使用场景1.3 设置步骤 2. 设置 python 运行/调试代理2.1 作用范围2.2 使用场景2.3 设置步骤 Pycharm 工具作为一款强大的 IDE,其代理配置在实际开发中也是必不可少的,下面介绍…

maven打包时配置多环境参数

1. pom配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

国产三维CAD皇冠CAD在机械及汽车零部件设计建模教程:斜滑动轴承

在线解读『斜滑动轴承』的三维建模流程&#xff0c;讲解布尔运算、旋转凸台/基体、异型导向孔、装饰螺纹线等操作技巧&#xff0c;一起来皇冠CAD&#xff08;CrownCAD&#xff09;直播间学习制作步骤吧&#xff01; 斜滑动轴承凭借其独特的工作原理和广泛的应用领域&#xff0c…

linux(操作系统概述和虚拟机的安装)

1.操作系统 一、主流服务器操作系统 Windows server 市场地位&#xff1a;适合传统企业&#xff08;主要以中小型企业、金融机构和教育机构为主&#xff09; 核心特点&#xff1a; 企业级功能&#xff1a;活动目录、组策略、IIS/Web服务器、Exchange邮件服务 易用性&#xff1a…

鸿蒙生态新利器:华为ArkUI-X混合开发框架深度解析

鸿蒙生态新利器&#xff1a;华为ArkUI-X混合开发框架深度解析 作者&#xff1a;王老汉 | 鸿蒙生态开发者 | 2025年4月 &#x1f4e2; 前言&#xff1a;开发者们的新机遇 各位鸿蒙开发者朋友们&#xff0c;是否还在为多平台开发重复造轮子而苦恼&#xff1f;今天给大家介绍一位…

数据结构初阶:二叉树(四)

概述&#xff1a;本篇博客主要介绍链式结构二叉树的实现。 目录 1.实现链式结构二叉树 1.1 二叉树的头文件&#xff08;tree.h&#xff09; 1.2 创建二叉树 1.3 前中后序遍历 1.3.1 遍历规则 1.3.1.1 前序遍历代码实现 1.3.1.2 中序遍历代码实现 1.3.1.3 后序遍历代…

Electron Forge【实战】桌面应用 —— AI聊天(下)

此为系列教程&#xff0c;需先完成 Electron Forge【实战】桌面应用 —— AI聊天&#xff08;上&#xff09;Electron Forge【实战】桌面应用 —— AI聊天&#xff08;中&#xff09; 会话列表按更新时间倒序加载 src/db.ts db.version(1).stores({// 主键为id&#xff0c;且…

[架构之美]Ubuntu源码部署APISIX全流程详解(含避坑指南)

[架构之美]Ubuntu源码部署APISIX全流程详解(含避坑指南) 一、离线安装场景需求分析 1.1 典型应用场景 金融/政务内网环境生产环境安全合规要求边缘计算节点部署1.2 离线安装难点 #mermaid-svg-B25djI0XquaOb1HM {font-family:"trebuchet ms",verdana,arial,sans-s…

多头注意力(Multi‑Head Attention)

1. 多头注意力&#xff08;Multi‑Head Attention&#xff09;原理 设输入序列表示为矩阵 X ∈ R B L d model X\in\mathbb{R}^{B\times L\times d_{\text{model}}} X∈RBLdmodel​&#xff0c;其中 B B B&#xff1a;批大小&#xff08;batch size&#xff09;&#xff0c…

系列位置效应——AI与思维模型【80】

一、定义 系列位置效应思维模型是指在一系列事物或信息的呈现过程中&#xff0c;人们对于处于系列开头和结尾部分的项目的记忆效果优于中间部分项目的现象。具体而言&#xff0c;开头部分的记忆优势被称为首因效应&#xff0c;结尾部分的记忆优势被称为近因效应。这种效应反映…

MyBatis XML 配置完整示例(含所有核心配置项)

MyBatis XML 配置完整示例&#xff08;含所有核心配置项&#xff09; 1. 完整 mybatis-config.xml 配置文件 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""htt…

电商数据中台架构:淘宝 API 实时采集与多源数据融合技术拆解

引言 在当今竞争激烈的电商领域&#xff0c;数据已成为企业决策和业务发展的核心驱动力。电商数据中台能够整合和管理企业内外部的各种数据&#xff0c;为业务提供有力支持。其中&#xff0c;淘宝 API 实时采集与多源数据融合技术是数据中台架构中的关键部分。本文将深入探讨这…

ubuntu22.04部署Snipe-IT

文章目录 参考链接一、写在前二、安装操作系统三、安装 PHP四、下载 Snipe-IT五、安装依赖六、安装数据库并创建用户七、安装 Snipe-IT八、安装 Nginx九、Web 继续安装 Snipe-IT补充&#xff1a;20250427补充&#xff1a; 最后 参考链接 How to Install Snipe-IT on Ubuntu 22…