db2_fdw

提供对DB2的外部数据源包装器

概览

扩展包名版本分类许可证语言
db2_fdw18.1.1FDWPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
8630db2_fdw-
相关扩展odbc_fdw mysql_fdw oracle_fdw tds_fdw wrappers multicorn jdbc_fdw postgres_fdw

版本

类型仓库版本PG 大版本包名依赖
EXTPGDG18.1.11817161514db2_fdw-
RPMPGDG18.1.11817161514db2_fdw_$v-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
el9.x86_64
el9.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
el10.x86_64
el10.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
d12.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
d12.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
d13.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
d13.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
u22.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
u22.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
u24.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
u24.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
u26.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
u26.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS

安装

您可以直接安装 db2_fdw 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:

pig repo add pgdg -u          # 添加 PGDG 仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install db2_fdw;          # 当前活跃 PG 版本安装
pig ext install -y db2_fdw -v 18  # PG 18
pig ext install -y db2_fdw -v 17  # PG 17
pig ext install -y db2_fdw -v 16  # PG 16
pig ext install -y db2_fdw -v 15  # PG 15
pig ext install -y db2_fdw -v 14  # PG 14
dnf install -y db2_fdw_18       # PG 18
dnf install -y db2_fdw_17       # PG 17
dnf install -y db2_fdw_16       # PG 16
dnf install -y db2_fdw_15       # PG 15
dnf install -y db2_fdw_14       # PG 14

创建扩展

CREATE EXTENSION db2_fdw;

用法

来源:README, current upstream README

db2_fdw 是一个 PostgreSQL foreign data wrapper,可从 PostgreSQL 查询和修改 IBM Db2 表。它会尽可能下推所需列和 WHERE 条件,并提供连接清理和诊断辅助函数。

创建服务器

CREATE EXTENSION db2_fdw;

CREATE SERVER db2srv FOREIGN DATA WRAPPER db2_fdw
  OPTIONS (dbserver 'SAMPLE');

服务器选项: dbserver(必填的 Db2 连接字符串)、batch_size(当前保留给未来批处理行为)、no_encoding_errorONOFFYESNOTRUEFALSE)。

创建用户映射

CREATE USER MAPPING FOR PUBLIC SERVER db2srv
  OPTIONS (user 'db2inst1', password 'secret');

userpassword 设为空字符串,可通过 Db2 客户端环境启用外部认证。

创建外部表

CREATE FOREIGN TABLE employee (
  empno char(6) OPTIONS (key 'true'),
  firstname varchar(12),
  lastname varchar(15),
  salary numeric
)
SERVER db2srv
OPTIONS (schema 'DB2INST1', table 'EMPLOYEE');

表选项: table(必填,Db2 表名或简单查询,区分大小写,通常为大写)、schema(表所有者)、readonly(默认 false)、sample_percentANALYZE 采样)、prefetch(每次往返获取的行数,默认 100,范围 0-1024)、fetch_size(可接受但当前固定为 1)、batch_sizeno_encoding_error。上游文档将 max_long 标为 deprecated,且不再使用。

列选项: key(所有主键列都要设为 trueUPDATEDELETE 必需),以及导入表上的 Db2 元数据选项,例如 db2typedb2sizedb2bytesdb2charsdb2scaledb2nulldb2ccsid

导入外部模式

IMPORT FOREIGN SCHEMA "DB2INST1" FROM SERVER db2srv INTO public;

导入选项: casekeeplowersmart,默认 smart)、readonly

CRUD 操作

SELECT * FROM employee WHERE empno = '000010';
INSERT INTO employee (empno, firstname, lastname, salary) VALUES ('999999', 'John', 'Doe', 50000);
UPDATE employee SET salary = 55000 WHERE empno = '999999';
DELETE FROM employee WHERE empno = '999999';

连接辅助函数

SELECT db2_close_connections();
SELECT db2_diag();
SELECT db2_diag('db2srv');

db2_close_connections() 会关闭当前会话中缓存的 Db2 连接。db2_diag() 会报告 db2_fdw、PostgreSQL、Db2 client,以及可选远端服务器的诊断详情。

数据类型映射

DB2 TypePostgreSQL Types
CHARchar
VARCHARvarchar
CLOBtext
VARGRAPHIC, GRAPHICtext
BLOBbytea
SMALLINT, INTEGER, BIGINTsmallint, integer, bigint
DOUBLEnumeric, float
DATEdate
TIMESTAMPtimestamp
TIMEtime

WHERE 条件和列投影会下推到 DB2,以减少数据传输。


最后修改 2026-05-18: routine extension update (ac43610)