您可以使用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版本與數據庫服務器版本之間的兼容矩陣,確保客戶端與服務器之間可兼容交互。
簡介
oracle_fdw是一個開源第三方插件,是PolarDB PostgreSQL版(兼容Oracle)的一個外部數據包裝器FDW(Foreign Data Wrapper)。
使用指南
創建插件。
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的官方文檔 。