RDS PostgreSQL提供oracle_fdw插件,可以连接到Oracle数据库,通过操作PostgreSQL表同步更新Oracle数据库中的表。
前提条件
- 实例为RDS PostgreSQL 12(内核版本20200421及以上)。
说明 您可以执行
SHOW rds_supported_extensions;
查看是否支持oracle_fdw,如不支持请升级内核版本。 - Oracle Client版本为11.2及以上。
- Oracle Server版本要求取决于Oracle Client版本。详情请参见Oracle官方文档。
- 将RDS PostgreSQL的专有网络网段(例如
172.xx.xx.xx/16
)添加到Oracle数据库实例的白名单中,允许RDS PostgreSQL访问。说明 您可以在RDS PostgreSQL实例的数据库连接中查看专有网络网段。
背景信息
更多详细信息请参见oracle_fdw。
注意事项
- 如果需要执行UPDATE和DELETE操作,需要在创建外部表时为主键列设置key参数,详情请参见创建外部表。
- 外部表定义的列数据类型必须是oracle_fdw可以识别并可以转换的,oracle_fdw插件对于数据类型的转换规则请参见Data types。
- WHERE子句和ORDER BY子句支持计算下推,即oracle_fdw会将子句发送给Oracle进行计算。
- JOIN操作支持计算下推,但是有以下注意事项:
- 两个表必须被定义在相同的映射中。
- 三个及以上的JOIN操作不支持下推。
- JOIN操作必须包含在SELECT操作中。
- 没有JOIN条件的CROSS JOIN操作不支持下推。
- 如果JOIN子句被下推,ORDER BY子句将不会被下推。
- 安装postgis插件后,oracle_fdw插件支持以下空间数据类型:
- POINT
- LINE
- POLYGON
- MULTIPOINT
- MULTILINE
- MULTIPOLYGON
操作步骤
完成以上步骤即可通过操作外表来实现对Oracle表的操作。支持DELETE、INSERT、UPDATE、SELECT等基本操作,支持导入外部表定义的操作,命令如下:
IMPORT FOREIGN SCHEMA <ora_schema_name>
FROM SERVER <server_name>
INTO <schema_name>
OPTIONS (case 'lower');
说明 case取值如下:
- keep:表示保留Oracle上的对象名,通常是大写。
- lower:表示转换所有的对象名为小写。
- smart:表示只将对象名中都是大写字母的替换为小写。
卸载插件
卸载插件命令如下:
DROP EXTENSION oracle_fdw;