在postgres数据库中Postgres FDW 全面详解

Postgres FDW 全面详解

一、什么是 postgres_fdw(背景)

postgres_fdw 是 PostgreSQL 官方提供的 foreign-data wrapper
(FDW)
,用于在一个 PostgreSQL 实例中访问另一个 PostgreSQL

实例的表,实现跨库访问、数据联邦。


二、使用场景

2.1 跨库查询/数据联邦

将多个 PostgreSQL 实例的数据统一查询(例如把 OLTP 数据库与历史库联合查询用于报表)。

2.2 数据迁移 / 升级

在迁移过程中,临时将旧库映射为外部表,逐步迁移与校验。

2.3 拆分/分片(逻辑层)

将不同业务数据放在不同实例,通过 FDW 在一个查询中联合多个分片。

2.4 只读报表 / BI

BI/报表库访问生产库的指定表,无需 ETL 即可读取最新数据(注意性能与隔离)。

2.5 将外部表作为微服务接口

通过 SQL 直接访问其他数据库提供的数据服务。


三、实现步骤流程

3.1 启用扩展

sql 复制代码
CREATE EXTENSION postgres_fdw;

3.2 创建远端服务器连接

sql 复制代码
CREATE SERVER remote_srv
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '127.0.0.1', port '5432', dbname 'postgres');
  • 创建一个外部服务器对象 remote_srv,告诉本地 PostgreSQL 如何连接到远端 PostgreSQL(IP、端口、目标数据库名)。

  • FOREIGN DATA WRAPPER postgres_fdw 指定使用哪个 FDW 实现(这里是官方的 postgres_fdw)。

  • OPTIONS 中可添加更多选项(例如 SSL 相关的选项,或特定 FDW 支持的参数)。

3.3 创建本地用户到远端数据库的账号映射

sql 复制代码
CREATE USER MAPPING FOR postgres
SERVER remote_srv
OPTIONS (user 'postgres', password 'postgres');
  • 为本地数据库中的某个角色(这里是本地角色 postgres)创建到 remote_srv 的用户映射。即执行跨库操作时使用的远端用户名/密码。

  • 也可以为多个本地角色分别创建不同的映射。

  • 安全提示:在生产中不要把明文密码写入 SQL;可使用 .pgpass、外部凭据管理或连接限制与最小权限原则。

3.4 导入远端 schema 中指定表为本地外部表

sql 复制代码
IMPORT FOREIGN SCHEMA public
LIMIT TO (config_info)
FROM SERVER remote_srv
INTO public;
  • 从远端服务器remote_srvpublic schema 导入外部表定义到当前数据库的 public schema。

  • LIMIT TO (config_info) 表示只导入远端的 config_info 表(可用 EXCEPT 排除或不指定以导入全部)。

  • 导入的是表结构(列名、类型等),不会复制数据;查询外部表时数据通过网络从远端读取。

  • 导入后在本地你会看到 config_info作为一个 FOREIGN TABLE,可以像普通表一样 SELECT,如果远端用户有权限并且 FDW 支持,也可以INSERT/UPDATE/DELETE


四、结论

postgres_fdw 是获取跨 PostgreSQL

集群数据的官方最佳方案,适用于分库查询、数据迁移、报表系统。

相关推荐
大布布将军10 分钟前
⚡️ 深入数据之海:SQL 基础与 ORM 的应用
前端·数据库·经验分享·sql·程序人生·面试·改行学it
JIngJaneIL42 分钟前
基于java+ vue农产投入线上管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
源代码•宸1 小时前
goframe框架签到系统项目(BITFIELD 命令详解、Redis Key 设计、goframe 框架教程、安装MySQL)
开发语言·数据库·经验分享·redis·后端·mysql·golang
川贝枇杷膏cbppg1 小时前
Redis 的 AOF
java·数据库·redis
TG:@yunlaoda360 云老大1 小时前
如何在华为云国际站代理商控制台进行SFS Turbo的性能与容量核查?
服务器·网络·数据库·华为云
ytttr8732 小时前
MATLAB基于LDA的人脸识别算法实现(ORL数据库)
数据库·算法·matlab
云老大TG:@yunlaoda3603 小时前
如何进行华为云国际站代理商跨Region适配?
大数据·数据库·华为云·负载均衡
思成不止于此3 小时前
【MySQL 零基础入门】事务精讲(二):ACID 特性与并发问题
数据库·笔记·学习·mysql
Boilermaker19923 小时前
[MySQL] 初识 MySQL 与 SQL 基础
数据库·mysql
今晚务必早点睡3 小时前
Redis——快速入门第二课:Redis 常用命令 + 能解决实际问题
数据库·redis·bootstrap