oracle_fdw

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

概览

扩展包名版本分类许可证语言
oracle_fdw2.8.0FDWPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
8610oracle_fdw-
相关扩展mysql_fdw tds_fdw db2_fdw firebird_fdw orafce wrappers odbc_fdw jdbc_fdw

require oracle-libs

版本

类型仓库版本PG 大版本包名依赖
EXTPGDG2.8.01817161514oracle_fdw-
RPMPGDG2.8.01817161514oracle_fdw_$v-
DEBPGDG2.8.01817161514postgresql-$v-oracle-fdw-
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_64
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
d12.aarch64
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
d13.x86_64
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
d13.aarch64
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
u22.x86_64
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
u22.aarch64
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
u24.x86_64
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
u24.aarch64
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0
PGDG 2.8.0

安装

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

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

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

pig install oracle_fdw;          # 当前活跃 PG 版本安装
pig ext install -y oracle_fdw -v 18  # PG 18
pig ext install -y oracle_fdw -v 17  # PG 17
pig ext install -y oracle_fdw -v 16  # PG 16
pig ext install -y oracle_fdw -v 15  # PG 15
pig ext install -y oracle_fdw -v 14  # PG 14
dnf install -y oracle_fdw_18       # PG 18
dnf install -y oracle_fdw_17       # PG 17
dnf install -y oracle_fdw_16       # PG 16
dnf install -y oracle_fdw_15       # PG 15
dnf install -y oracle_fdw_14       # PG 14
apt install -y postgresql-18-oracle-fdw   # PG 18
apt install -y postgresql-17-oracle-fdw   # PG 17
apt install -y postgresql-16-oracle-fdw   # PG 16
apt install -y postgresql-15-oracle-fdw   # PG 15
apt install -y postgresql-14-oracle-fdw   # PG 14

创建扩展

CREATE EXTENSION oracle_fdw;

用法

oracle_fdw: 访问 Oracle 的外部数据包装器

创建服务器

CREATE EXTENSION oracle_fdw;

CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw
  OPTIONS (dbserver '//dbserver.mydomain.com:1521/ORADB');

服务器选项: dbserver(必填,Oracle 连接字符串)、isolation_levelserializableread_committedread_only,默认 serializable)、nchar(昂贵的字符转换,默认 off)、set_timezone(与 Oracle 同步时区,默认 off)。

创建用户映射

CREATE USER MAPPING FOR pguser SERVER oradb
  OPTIONS (user 'orauser', password 'orapwd');

user 使用空字符串可启用外部(OS)认证。

创建外部表

CREATE FOREIGN TABLE oratab (
  id integer OPTIONS (key 'true') NOT NULL,
  text character varying(30),
  floating double precision NOT NULL
)
SERVER oradb
OPTIONS (schema 'ORAUSER', table 'ORATAB');

表选项: table(必填,Oracle 表名,大写)、schema(表所有者)、dblink(Oracle DB link)、max_long(LONG 列最大长度,默认 32767)、readonly(默认 false)、sample_percent(ANALYZE 采样率,默认 100)、prefetch(每次往返获取行数,默认 50)。

列选项: key(标记为主键,UPDATE/DELETE 必需)、strip_zeros(从字符串中移除 ASCII 0)。

也可以用查询代替表名,将其放在括号中:

CREATE FOREIGN TABLE oraquery (
  id integer,
  text character varying(30)
)
SERVER oradb
OPTIONS (table '(SELECT id, text FROM ORAUSER.ORATAB WHERE id > 10)');

导入外部模式

IMPORT FOREIGN SCHEMA "ORAUSER"
  FROM SERVER oradb INTO local_schema;

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

工具函数

SELECT oracle_diag();              -- 显示版本和环境信息
SELECT oracle_diag('oradb');       -- 包含 Oracle 服务器版本
SELECT oracle_close_connections(); -- 关闭所有缓存的 Oracle 连接
SELECT oracle_execute('oradb', 'TRUNCATE TABLE ORAUSER.ORATAB'); -- 执行任意 Oracle SQL

数据类型映射

Oracle 类型PostgreSQL 类型
CHAR, VARCHAR2, NVARCHAR2char, varchar, text
CLOB, NCLOBtext, json
NUMBERnumeric, float4, float8, int2, int4, int8, boolean
DATE, TIMESTAMPdate, timestamp, timestamptz
BLOB, LONG RAWbytea
XMLTYPExml, text
SDO_GEOMETRYgeometry (PostGIS)

最后修改 2026-03-14: update extension metadata (953cbd0)