oracle_fdw
提供对Oracle的外部数据源包装器
仓库
laurenz/oracle_fdw
https://github.com/laurenz/oracle_fdw
源码
oracle_fdw-ORACLE_FDW_2_8_0.tar.gz
oracle_fdw-ORACLE_FDW_2_8_0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
oracle_fdw | 2.8.0 | FDW | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 8610 | oracle_fdw | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | mysql_fdw tds_fdw db2_fdw firebird_fdw orafce wrappers odbc_fdw jdbc_fdw |
|---|
require oracle-libs
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 2.8.0 | 1817161514 | oracle_fdw | - |
| RPM | PGDG | 2.8.0 | 1817161514 | oracle_fdw_$v | - |
| DEB | PGDG | 2.8.0 | 1817161514 | postgresql-$v-oracle-fdw | - |
安装
您可以直接安装 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;
用法
创建服务器
CREATE EXTENSION oracle_fdw;
CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw
OPTIONS (dbserver '//dbserver.mydomain.com:1521/ORADB');
服务器选项: dbserver(必填,Oracle 连接字符串)、isolation_level(serializable、read_committed 或 read_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;
导入选项: case(keep、lower 或 smart,默认 smart)、readonly、skip_tables、skip_views、skip_matviews、max_long、sample_percent、prefetch。
工具函数
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, NVARCHAR2 | char, varchar, text |
| CLOB, NCLOB | text, json |
| NUMBER | numeric, float4, float8, int2, int4, int8, boolean |
| DATE, TIMESTAMP | date, timestamp, timestamptz |
| BLOB, LONG RAW | bytea |
| XMLTYPE | xml, text |
| SDO_GEOMETRY | geometry (PostGIS) |