PostgreSQL插件之oracle_fdw

1.安装Oracle客户端

unzip instantclient-basic-linuxx64.zip -d ./
unzip instantclient-sqlplus-linuxx64.zip -d ./
unzip instantclient-sdk-linuxx64.zip -d ./
export ORACLE_HOME=/ora2pg/instantclient_21_9
export LD_LIBRARY_PATH=$ORACLE_HOME
export PATH=$ORACLE_HOME:$PATH

2.下载oracle_fdw插件并安装

unzip oracle_fdw-2.0.0.zip
cd oracle_fdw-2.0.0
Make
Make install
--检查确认没有依赖未解决
ldd oracle_fdw.so

3.创建拓展

postgres=# create extension oracle_fdw ;
postgres=# \des
List of foreign servers
Name |  Owner   | Foreign-data wrapper
-------+----------+----------------------
oradb | postgres | oracle_fdw

4.创建外部数据源服务(创建Oracle数据库映射)

以xdap用户登录到test库为例:

[root@PgSlave ]# su - pgbi
[pgbi@PgSlave ~]$ psql -U postgres

postgres=# \c test xdap
You are now connected to database "test" as user "xdap".

语法:
CREATE SERVER <SERVER名称> FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbserver ‘<数据库地址>’,port ‘<数据库端口>’,dbname ‘<数据库名>’);
CREATE SERVER <SERVER名称> FOREIGN DATA WRAPPER oracle_fdw OPTIONS (host ‘<Oracle库内网地址>’, port ‘<Oracle库内网端口>’, dbname ‘<数据库名>’);

test=# CREATE SERVER oradb1 FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//133.96.13.54:1533/test');
CREATE SERVER

列出已经创建的foreign server:

test=# \des+
                                                      List of foreign servers
  Name  | Owner | Foreign-data wrapper | Access privileges | Type | Version |              FDW options               | Description 
--------+-------+----------------------+-------------------+------+---------+----------------------------------------+-------------
 oradb1 | xdap  | oracle_fdw           | xdap=U/xdap       |      |         | (dbserver '//133.96.13.54:1533/test') | 

5.授予用户访问权限

授予xdap用户访问foreign server--oradb1:
test=# grant usage on foreign server oradb1 to xdap;
GRANT

6.创建用户映射

此步一定要进入上一步赋权的用户xdap进行操作,否则创建外部表失败;
语法:
CREATE USER MAPPING FOR <数据库账号> SERVER <映射名> OPTIONS (user ‘<Oracle数据库用户名>’, password ‘<Oracle数据库用户密码>’);

test=# CREATE USER MAPPING FOR xdap SERVER oradb1 OPTIONS (user 'xdap', password '45zky3j34cZxnWV_r_8m');
CREATE USER MAPPING

7.创建Oracle外部表

语法:
CREATE FOREIGN TABLE <创建Vastbase表名>(<Oracle的表结构信息>) SERVER <映射名> OPTIONS (table ‘<Oracle的表名称>’, schema ‘<Oracle表的模式名称>’ prefetch, ‘<两个数据库的表之间一次性传输的行数>’);

其中prefetch参数代表每次fetch行数,范围在0到10240之间;
创建外部表时候,Oracle表名称和模式名称一定大写,否则查询不到数据;
外部表的结构需要和Oracle中的映射表结构保持一致;

test=# CREATE  FOREIGN TABLE "sc_role_user4" (
 ROLE_ID                         character(60)  NOT NULL,
 LOGIN_ID                       character(60)  NOT NULL,
 UPDATE_USER                character(60),
 UPDATE_DATE                DATE) 
 SERVER oradb1 OPTIONS (schema 'XDAP',table 'SC_ROLE_USER');

参数说明

  • key 是否设置对应的列为主键,取值为true或false,默认值为false。如果要执行UPDATE和DELETE操作,必须将所有主键列设置为true。
  • table 表名,大写,必填参数。
  • schema 一般是Oracle用户名,保持大写,用来访问不属于当前连接用户的表。
  • prefetch 外表扫描时,PostgreSQL和Oracle数据表之间一次性传输的行数,取值范围是0~1024,默认值是200,0代表取消prefetch功能。

8.访问外部表

test=# select * from sc_role_user4;

test=# \det+
                                 List of foreign tables
 Schema |     Table     | Server |               FDW options               | Description 
--------+---------------+--------+-----------------------------------------+-------------
 xdap   | sc_role_user4 | oradb1 | (schema 'XDAP', "table" 'SC_ROLE_USER') | 

查看表结构:
test=# \d+ sc_role_user4;

9.修改外部表数据

想要对remote table进行数据的修改操作,必须满足外部访问的表是有主键的情况,默认的列选项key设置的是false;
需要手工设置对应的列名的key选项为true;

test=# CREATE  FOREIGN TABLE "sc_role_user4" (
 ROLE_ID                         character(60)  OPTIONS (key 'true')  NOT NULL,
 LOGIN_ID                       character(60)  NOT NULL,
 UPDATE_USER                character(60),
 UPDATE_DATE                DATE) 
 SERVER oradb1 OPTIONS (schema 'XDAP',table 'SC_ROLE_USER');

10.删除创建的对象:

drop foreign table oratab;
drop user mapping for test server oracle_91;
drop server oracle_91; #创建用户删除
DROP EXTENSION oracle_fdw; #创建用户删除
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
pgsql oracle_fdwPostgreSQL 数据库中的一个扩展,它允许连接和访问 Oracle 数据库。它提供了一个外部数据封装器(Foreign Data Wrapper,简称 FDW),使得 PostgreSQL 可以像访问本地表一样访问 Oracle 数据库中的表。 使用 pgsql oracle_fdw,你可以在 PostgreSQL 中创建外部表,这些表实际上是对 Oracle 数据库中表的引用。通过这种方式,你可以使用 PostgreSQL 的功能和语法来查询和操作 Oracle 数据。 要使用 pgsql oracle_fdw,首先需要安装并配置它。你需要确保你的 PostgreSQL 安装了该扩展,并且具有访问 Oracle 数据库的权限。然后,你可以使用 CREATE EXTENSION 命令来加载 oracle_fdw 扩展。 接下来,你可以使用 CREATE SERVER 命令创建一个连接到 Oracle 数据库的服务器对象。你需要提供 Oracle 数据库的连接信息,如主机名、端口、用户名和密码。 一旦服务器对象创建成功,你可以使用 CREATE FOREIGN TABLE 命令创建一个外部表,指定它引用的 Oracle 表的名称和列的映射关系。之后,你可以像查询本地表一样查询和操作这个外部表。 需要注意的是,使用 pgsql oracle_fdw 连接到 Oracle 数据库可能需要相应的 Oracle 客户端软件和驱动程序。确保你的系统中安装了适当的软件和驱动程序才能成功连接和访问 Oracle 数据库。 希望这个回答能对你有所帮助!如果你有任何其他问题,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰阔落_Louis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值