oracle_fdw是一个开源第三方插件,是PolarDB PostgreSQL版(兼容Oracle)的一个外部数据包装器FDW(Foreign Data Wrapper)。您可以使用oracle_fdw插件与外部的Oracle数据库进行交互。
前提条件
oracle_fdw依赖于Oracle Instant Client的动态链接库与Oracle数据库服务器进行交互。
可以与oracle_fdw插件协同工作的Oracle Instant Client版本如下所示:
11.2
12.1、12.2
18.3、18.5
19.3、19.6、19.8、19.9、19.10、19.11、19.12、19.14
21
说明使用前,请您自行查阅Oracle官方文档中Instant Client版本与数据库服务器版本之间的兼容矩阵,确保客户端与服务器之间可兼容交互。
使用方法
安装插件。
CREATE EXTENSION oracle_fdw;
创建外部Oracle数据库服务器。
配置Oracle数据库的连接信息,创建PolarDB PostgreSQL版(兼容Oracle)到Oracle的映射。示例如下:
CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//host:port/dbname');
创建外部Oracle数据库服务器参数说明如下:
参数
说明
是否必填
dbserver
Oracle数据库的连接串,包含IP地址、端口号、数据库名。
是
isolation_level
事务隔离级别,默认为SERIALIZABLE。
可选的参数类型如下:
serializable:序列化。
read_committed:读已提交。
read_only:只读。
否
nchar
是否在Oracle端开启字符转换。
说明修改可能会影响性能。
否
创建用户映射。
将PolarDB PostgreSQL版(兼容Oracle)的用户pguser与对应Oracle数据库的用户orauser进行映射。需要配置Oracle数据库用户的用户名、密码。示例如下:
CREATE USER MAPPING FOR pguser SERVER oradb OPTIONS (user 'orauser', password 'orapwd');
创建用户映射参数说明如下:
参数
说明
是否必填
user
Oracle数据库用户的用户名。
是
password
Oracle数据库用户的密码。
是
说明如果您不想在PolarDB PostgreSQL版(兼容Oracle)中存储Oracle用户的凭证,可以设置user为空字符串,并提供外部授权。
创建外部表映射。
在PolarDB PostgreSQL版(兼容Oracle)中创建一个外部表,映射到Oracle数据库的一个已有的表上。示例如下:
CREATE FOREIGN TABLE oratab ( id integer OPTIONS (key 'true') NOT NULL, text character varying(30), floating double precision NOT NULL ) SERVER oradb OPTIONS ( table 'ORATAB', schema 'ORAUSER', max_long '32767', readonly 'false', sample_percent, '100', prefetch, '200' );
创建外部表参数说明如下:
参数
说明
是否必填
table
Oracle数据库中的被映射表名,一般是大写。
是
dblink
被映射表的数据库链接,必须与Oracle系统目录中的完全一致。
否
schema
Oracle用户名,需要大写,用于访问不属于当前连接用户的表。
否
max_long
限制Oracle表中 LONG、LONG RAW、XMLTYPE类型列的最大长度。
否
sample_percent
PostgreSQL用于计算因统计信息而随机选择的Oracle表数据的比例(默认100)。
否
prefetch
扫描外表时PostgreSQL与Oracle之间一次性传输的数据行数。
否
key
当前列是否包含在主键约束中。
否
strip_zeros
数据传递时,是否去除字符串后的ASCII 0字符(在Oracle中合法,在PostgreSQL中非法)。
否
说明外部表的结构定义需要与Oracle数据库上的被映射表的结构完全一致。
oracle_fdw对PolarDB PostgreSQL版(兼容Oracle)到Oracle的数据类型映射,请参见类型映射表格。
使用方法。
您可以使用操作PolarDB PostgreSQL版(兼容Oracle)普通表相同的方式来操作外部表,从而操纵远程Oracle数据库中的表。
卸载插件。
DROP EXTENSION oracle_fdw;
类型映射表格
在oracle_fdw插件中,PolarDB PostgreSQL版(兼容Oracle)与Oracle两种数据库的数据类型映射如下:
Oracle类型 | 可能的PostgreSQL类型 |
CHAR | char, varchar, text |
NCHAR | char, varchar, text |
VARCHAR | char, varchar, text |
VARCHAR2 | char, varchar, text, json |
NVARCHAR2 | char, varchar, text |
CLOB | char, varchar, text, json |
LONG | char, varchar, text |
RAW | uuid, bytea |
BLOB | bytea |
BEILE | bytea (read-only) |
LONG RAW | bytea |
NUMBER | numeric, float4, float8, char, varchar, text |
NUMBER(n,m) with m<=0 | numeric, float4, float8, int2, int4, int8, boolean, char, varchar, text |
FLOAT | numeric, float4, float8, char, varchar, text |
BINARY_FLOAT | numeric, float4, float8, char, varchar, text |
BINARY_DOUBLE | numeric, float4, float8, char, varchar, text |
DATE | date, timestamp, timestamptz, char, varchar, text |
TIMESTAMP | date, timestamp, timestamptz, char, varchar, text |
TIMESTAMP WITH TIME ZONE | date, timestamp, timestamptz, char, varchar, text |
TIMESTAMP WITH LOCAL TIME ZONE | date, timestamp, timestamptz, char, varchar, text |
INTERVAL YEAR TO MONTH | interval, char, varchar, text |
INTERVAL DAY TO SECOND | interval, char, varchar, text |
XMLTYPE | xml, char, varchar, text |
MDSYS.SDO_GEOMETRY | geometry (PostGIS) |
相关参考
更多oracle_fdw高级使用方法,请参见oracle_fdw的官方文档 。