oracle_fdw 是一个提供连接 PostgreSQL 到 Oracle 数据库支持的 外部数据包装器 (FDW)。
发布历史
这是主要版本发布的摘要;完整的详细版本列表,请参阅 oracle_fdw 发布页面 和 CHANGELOG。
示例
以下示例假设 PostgreSQL 系统用户能够使用以下连接字符串连接到 Oracle 服务器
fdwtest/foo@//oracle.localhost:1521/orclpdb1
创建一个 Oracle 表
CREATE TABLE fdw_test ( id INT NOT NULL PRIMARY KEY, val VARCHAR(128) );
设置 oracle_fdw
postgres=# CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//oracle.localhost:1521/orclpdb1'); CREATE SERVER postgres=# CREATE USER MAPPING FOR CURRENT_USER SERVER oradb OPTIONS (user 'fdwtest', password 'foo'); CREATE USER MAPPING
定义一个 外部表
postgres=# CREATE FOREIGN TABLE ora_fdw_test ( id INT OPTIONS (key 'true') NOT NULL, val VARCHAR(128) ) SERVER oradb OPTIONS (table 'FDW_TEST'); CREATE FOREIGN TABLE
插入、更新和删除数据
postgres=# INSERT INTO ora_fdw_test VALUES(1, 'foo'), (2,'bar'); INSERT 0 2 postgres=# SELECT * FROM ora_fdw_test; id | val ----+----- 1 | foo 2 | bar (2 rows) postgres=# UPDATE ora_fdw_test SET val = 'baz' WHERE id = 2; UPDATE 1 postgres=# DELETE FROM ora_fdw_test WHERE id = 1; DELETE 1 postgres=# SELECT * FROM ora_fdw_test; id | val ----+----- 2 | baz (1 row)
最后,确认表中包含 Oracle 中预期的数据
SQL> SELECT * FROM fdw_test;
ID
----------
VAL
--------------------------------------------------------------------------------------------------------------------------------
2
baz
如果向新创建的 Oracle 表插入数据,可能会遇到以下错误
ERROR: error executing query: OCIStmtExecute failed to execute remote query DETAIL: ORA-08177: can't serialize access for this transaction
参考资料
- GitHub: oracle_fdw
有用链接
- 使用外部数据包装器访问远程 PostgreSQL 和 Oracle 数据库 - EnterpriseDB 发表的 2020 年 1 月文章
- 迁移数据从 Oracle 到 PostgreSQL 数据库 - Devart 发表的 2020 年 4 月博客文章,侧重于 Windows 用法
