Foreign Data Wrapper(Fdw)介绍
概述
PostgreSQL从9.1开始增加了外部表访问的功能,这时候的版本支持读取功能能,并于 2013 年在 PostgreSQL 9.3 中添加了写入支持;9.5加入IMPORT FOREIGN SCHEMA(批量导入外部数据源的外部表);9.6加入了joins和sorts;11加入了aggregates特性;14加入了并行分片访问;此外该功能功能也支持数据库直接读取数据库以外的文件,比如csv或者text等类型的文件。
PostgreSQL有各种插件能直连各种异构DB,如oracle_fdw,mysql_fdw,file_fdw等,对数据的迁移是很方便的,这是PG的扩展性较强的一个表现。
数据库 | 类型 | 许可 | 源码 | 安装包 | 文档 | 备注 |
---|---|---|---|---|---|---|
PostgreSQL | Native | PostgreSQL | git.postgresql.org | documentation | ||
Oracle | Native | PostgreSQL | github | PGXN | website | |
MySQL | Native | github | PGXN | example | FDW for MySQL | |
Informix | Native | PostgreSQL | github | |||
DB2 | Native | github | ||||
Firebird | Native | PostgreSQL | github | PGXN | README | version 1.2.3 |
released (2022-02) | ||||||
SQLite | Native | PostgreSQL | github | PGXN | README | An FDW for SQLite3 (write support and several pushdown optimization) |
Sybase / MS SQL Server | Native | github | PGXN | An FDW for Sybase and Microsoft SQL server | ||
MonetDB | Native | github |
foreign data wrapper本质就是一个代理服务(回调函数),它并不是将远端数据直接拷贝到本地,而仅仅是一个统一入口而已(本地数据库中仅仅有远端数据库的一张表结构),最终数据来源于远端数据库表。
操作步骤
- 向PG安装某个数据源的FDW扩展;
- 使用CREATE FOREIGN DATA WRAPPER语句创建该数据源的FDW对象;
- 使用CREATE SERVER语句创建该数据源的服务器对象;
- 使用CREATE USER MAPPING语句创建外部数据源用户与PG用户的映射关系(这一步是可选的。比如外部数据源根本没有权限控制时,也就无需创建USER MAPPING了);
- 使用CREATE FOREIGN TABLE语句创建外部表。
实战配置
一、环境:
PostgreSQL 9.4
创建postgres_fdw插件
CREATE EXTENSION postgres_fdw;
二、使用过程 :
begin;
-- 括号里的三个参数,分别是dcygzpt_db(要连接的表)的ip、端口和数据库名称
--DROP SERVER IF EXISTS dcygzpt_db;
CREATE SERVER dcygzpt_db FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'xxxx', port '5432', dbname 'sd_gzpt_cq');
CREATE S