当前位置: 首页 > news >正文

postgresql的SQL或MED

Postgresql的SQL或MED

[TOP]

PostgreSQL 中的 SQL/MED(SQL Management of External Data)是 ISO/IEC 9075-9 标准的一部分,用于通过标准 SQL 语句访问和管理存储在数据库之外的数据源。PostgreSQL 从 9.1 版开始通过 Foreign Data Wrapper(FDW)机制 实现了该标准,使用户可以像查询本地表一样查询远程或异构数据。

一、SQL/MED 的核心概念

组件 作用
Foreign Data Wrapper(FDW) 外部数据包装器,定义如何访问某种外部数据源(如 MySQL、Oracle、文件、Web 服务等)。
Foreign Server 外部服务器,表示一个外部数据源的连接配置(如 IP、端口、数据库名)。
User Mapping 用户映射,定义本地用户如何以哪个外部用户身份访问外部数据源。
Foreign Table 外部表,映射到外部数据源中的某个对象(如远程表、文件、API 接口等),可像普通表一样查询。

二、PostgreSQL 中 SQL/MED 的实现

PostgreSQL 的 SQL/MED 实现基于 FDW 插件机制,支持以下功能:

  • 只读/读写访问:9.1 支持只读,9.3 起支持写入(如 INSERT/UPDATE/DELETE)。
  • 多种数据源:支持 PostgreSQL、MySQL、Oracle、MongoDB、CSV 文件、Web API 等。
  • 性能优化:支持 WHERE 条件下推、JOIN 下推、统计信息收集等。

三、典型应用场景

  • 1.跨库查询:无需 ETL,直接通过 SQL 查询远程 PostgreSQL 或其他数据库。
  • 2.数据集成:将多个异构系统(如 MySQL + MongoDB + CSV)统一接入 PostgreSQL。
  • 3.数据迁移:通过外部表快速将数据从旧系统导入 PostgreSQL。
  • 4.联邦查询:PostgreSQL 作为查询网关,统一访问多个数据源。

四. 执行流程(以 postgres_fdw 为例)

    1. Parse 阶段:外表的列定义从 pg_foreign_table 系统表读出,校验语法。
    1. Planner 阶段
    • ① 调用 FDW 的 GetForeignRelSize 估算行数、宽度;
    • ② GetForeignPaths 生成候选访问路径(顺序、索引、JOIN 顺序、COST);
    • ③ GetForeignPlan 生成 ForeignScan 节点,决定是否把 WHERE、JOIN、AGG、ORDER BY、LIMIT 下推。
  • 3.Executor 阶段
    • ① BeginForeignScan 建立远程会话(libpq);
    • ② 如果可下推,则拼成远程 SQL 发出去;否则把外表当“行源”拉回本地再过滤;
    • ③ 游标式批量抓行(fetch_size 可配),支持可写事务(INSERT/UPDATE/DELETE 走 ForeignModify)。
  • 4.Commit 阶段:两阶段提交(2PC)可配,保证跨库一致性。

五、核心特性

  • 列/条件下推:减少网络往返,支持将 WHERE、JOIN、AGG、ORDER BY、LIMIT 推到远端。
  • 事务代理:本地 BEGIN/COMMIT/ROLLBACK 会同步到远端;支持 synchronous_commit 级别。
  • 可写外表:INSERT/UPDATE/DELETE 可回写远程,支持 RETURNING。
  • 并行查询:PG 14+ 支持外表并行扫描(parallel_workers)。
  • IMPORT FOREIGN SCHEMA:一键把远程整个 schema 映射成外表,省去手写 100 张表定义。
  • JOIN 下推:PG 11+ 可以把两副外表的 JOIN 直接下推到远程执行,极大减少拉回数据量。

四、简单示例(以 postgres_fdw 为例)

user01=> create table testtab01(id int, note text);
CREATE TABLE
user01=> insert into testtab01 select generate_series(1,10000),
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
INSERT 0 10000在本地数据库中安装postgres_fdw插件,建外部数据表,命令如下:
CREATE EXTENSION postgres_fdw;建外部数据服务器,命令如下:
CREATE SERVER postgres_fdw_server FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '10.0.3.236', dbname 'user01', port '5432');建用户映射,指定连接远程数据库的用户名和密码,命令如下:
CREATE USER MAPPING FOR CURRENT_USER
SERVER postgres_fdw_server
OPTIONS ( user 'user01', password 'okuser01');创建外部表,命令如下:
CREATE FOREIGN TABLE fttest01 (
id int,
note text
) SERVER postgres_fdw_server
OPTIONS (table_name 'testtab01');查询外部表,命令如下:
osdba=# select * from fttest01 limit 2;
id | note
----+----------------------------------------
1 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
(2 rows)查看查询外部表的SQL命令的执行计划,命令如下:
osdba=# explain select * from fttest01 limit 2;
QUERY PLAN
--------------------------------------------------------------------------
Limit (cost=100.00..100.07 rows=2 width=36)
-> Foreign Scan on fttest01 (cost=100.00..150.95 rows=1365 width=36)
(2 rows)

五、总结一句话

SQL/MED 让 PostgreSQL 成为“数据联邦中心”,通过 FDW 插件机制,用标准 SQL 查询任何外部数据源,无需复制或迁移数据。

http://www.jsqmd.com/news/844489/

相关文章:

  • 让旧款iPhone/iPad重获新生:Legacy-iOS-Kit终极使用指南
  • 【Android】CloneTTS最强朗读听书引擎-可克隆一切音色
  • Windows/Mac通用教程:用venv隔离环境,一步步安装Playwright并解决‘浏览器下载失败’问题
  • 终极指南:如何用VideoDownloadHelper免费下载网页视频
  • 如何轻松备份微信聊天记录:WeChatMsg完全免费的数据守护方案
  • 视觉暂留灯绘DIY:从硬件焊接、图像编程到光绘摄影全解析
  • 别再只盯着RRT了!关节空间六次多项式规划,可能是更简单的机械臂避障方案
  • PPTTimer:让每一场演示都精准掌控的智能时间管家
  • NoFences:彻底告别Windows桌面混乱,打造高效工作空间的免费开源神器
  • ESJsonFormat-Xcode泛型支持:Xcode 7及以上版本的优化特性
  • 【免费下载】 ArcGIS勘测定界软件自动化工具
  • 武汉买猫狗推荐 本地头部十年老店 武汉老牌购宠 - 范德萨的得到
  • 长期使用 Taotoken Token Plan 套餐的成本节约感受
  • 【免费下载】 Gmsh 4.11.1 资源包
  • 【免费下载】 探索双面神技:STM32G474的USB跨界应用
  • sandmap实战案例:从主机发现到漏洞扫描的完整工作流程
  • 告别命令行恐惧!用Sourcetree可视化搞定Git日常:克隆、提交、合并分支一条龙
  • 【免费下载】 AC696N SDK 使用指南
  • 【亲测免费】 AndroidStudio实现天气预报小程序源码
  • 硬件工程师的‘后悔药’:手把手教你用华秋DFM在发板前自动排雷(附AD18配置)
  • 2026杭州婚纱摄影星级排名TOP10|00后备婚首选,口碑品质双认证 - 江湖评测
  • 3步轻松重置JetBrains IDE试用期:ide-eval-resetter终极指南
  • MindStudio组合技,让Host Bound问题看得见、调得准
  • 【Android】Solid文件管理器3.5.2 安卓文件管理器
  • 抖音批量下载终极指南:douyin-downloader高效获取无水印内容实战
  • pyperclip性能对比:xclip、xsel、wl-clipboard哪个更快?
  • 【亲测免费】 Unity喷水粒子特效资源:为您的游戏增添生动水景
  • 淄博 GEO 优化公司排名 2026:制造业 AI 获客服务商综合实力榜 - 资讯焦点
  • 2026 年 5 月宁波品牌首饰回收|收的顶,正规连锁更稳妥 - 奢侈品回收测评
  • 从蝴蝶效应到股票市场:用Python重现洛伦兹系统,并计算其李雅普诺夫指数谱