Windows下安装oracle_fdw:从PostgreSQL中访问Oracle数据库
一、下载 oracle_fdw 插件包
1.1、oracle_fdw 插件包 官网下载
官网下载地址:https://github.com/laurenz/oracle_fdw/releases
1.2、oracle_fdw 插件包 网盘下载
网盘下载地址:https://pan.baidu.com/s/1iGV8cA-HqHNRKf75zkuXUA?pwd=yyds
1.3、oracle_fdw 插件包 Gitee下载
Gitee下载地址:https://gitee.com/tttzzzqqq/tzq-learn/blob/master/Oracle/oracle_fdw-2.5.0-pg12-win64.zip
二、解压 oracle_fdw 插件包
把下载好的 oracle_fdw-2.5.0-pg12-win64.zip 解压到本地文件夹。
三、把 oracle_fdw 解压后的文件和目录拷贝到对应的PostgreSQL安装目录
3.1、把【lib】文件夹的 oracle_fdw.dll 文件复制到PostgreSQL安装目录下的【lib】文件夹
3.2、把【share/extension】目录下的四个文件复制到PostgreSQL安装目录下的【share/extension】文件夹
四、安装 oracle_fdw 插件(create extension)
4.1、查询PostgreSQL已安装的插件
-- 查询安装的插件
select * from pg_available_extensions
where installed_version is not null;
可以发现,oracle_fdw 插件还没有安装。
4.2、开始安装 oracle_fdw 插件
-- 创建oracle_fdw
create extension oracle_fdw;
报错:ERROR: permission denied to create extension “oracle_fdw”
HINT: Must be superuser to create this extension.
没有权限来创建扩展"oracle_fdw"。必须是超级用户来创建这个扩展。
4.3、用超级用户(postgre)登录解决报错
用超级用户(postgre)登录解决报错,如下图配置连接:
4.4、再次执行安装 oracle_fdw 插件
-- 创建oracle_fdw
create extension oracle_fdw;
oracle_fdw 插件创建成功!
4.5、再次查询PostgreSQL已安装的插件
-- 查询安装的插件
select * from pg_available_extensions
where installed_version is not null;
可以发现,在已安装插件中可以看到 oracle_fdw 插件已经被安装了,版本是1.2。
五、PostgreSQL中通过oracle_fdw插件访问Oracle数据库
还是切换回普通用户(tzq)
5.1、PostgreSQL创建外部服务器(create server)
5.1.1、用普通用户(tzq)创建外部服务器,发现报错
create server to_ora42 foreign data wrapper oracle_fdw options(dbserver '127.0.0.1:1521/TZQ');
提示没有权限创建外部服务器。
5.1.2、超级用户(postgres)给普通用户(tzq)授予“创建外部服务器”的权限
用超级用户(postgres)创建会话,执行下面命令,给普通用户(tzq)授予“创建外部服务器”的权限:
-- 给普通用户(tzq)授予“创建外部服务器”的权限
grant all PRIVILEGES ON FOREIGN DATA WRAPPER oracle_fdw to tzq;
5.1.3、再次用普通用户(tzq)创建外部服务器
-- 创建外部服务器
create server to_ora_tzq foreign data wrapper oracle_fdw options(dbserver '127.0.0.1:1521/TZQ');
创建成功!
5.1.4、查询外部服务器
select * from pg_foreign_server;
5.1.5、删除外部服务器
移除一个外部服务器描述符:
DROP SERVER [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
5.2、PostgreSQL创建用户映射(create user mapping)
5.2.1、创建用户映射
定义一个用户到一个外部服务器的新映射。
给PostgreSQL数据库中tzq用户,授予外部服务器(to_ora_tzq)、用户log的用户映射:
create user mapping for tzq server to_ora_tzq options(user 'log',password '1');
5.2.2、查询用户映射
select * from pg_user_mappings;
5.2.3、修改用户映射
ALTER USER MAPPING FOR { user_name | USER | CURRENT_USER | SESSION_USER | PUBLIC }
SERVER server_name
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )
5.2.4、删除用户映射
DROP USER MAPPING [ IF EXISTS ] FOR { user_name | USER | CURRENT_USER | PUBLIC } SERVER server_name
5.3、PostgreSQL创建外部表
5.3.1、Oracle的表结构
create table INFO_TYPE
(
info_type_id NUMBER not null,
info_type_name VARCHAR2(200) not null,
parent_id NUMBER,
created_by NUMBER not null,
creation_date DATE default sysdate not null,
last_updated_by NUMBER not null,
last_update_date DATE default sysdate not null,
delete_flag CHAR(1) default 'N' not null,
deleted_by NUMBER,
delete_date DATE
);
5.3.2、PostgreSQL外部表的表结构
CREATE FOREIGN TABLE tzq.fdw_info_type
(
info_type_id INT8 not null,
info_type_name VARCHAR(200) not null,
parent_id INT8,
created_by INT8 not null,
creation_date TIMESTAMP default CURRENT_TIMESTAMP not null,
last_updated_by INT8 not null,
last_update_date TIMESTAMP default CURRENT_TIMESTAMP not null,
delete_flag VARCHAR(1) default 'N' not null,
deleted_by INT8,
delete_date TIMESTAMP
)SERVER to_ora_tzq
OPTIONS (schema 'LOG',table 'INFO_TYPE');
SELECT * FROM tzq.fdw_info_type;
可以发现,Oracle数据可以从PostgreSQL读出来了!
5.3.3、PostgreSQL删除外部表
DROP FOREIGN TABLE IF EXISTS tzq.fdw_info_type CASCADE;
至此,Windows下安装oracle_fdw:从PostgreSQL中访问Oracle数据库 ,全部讲完了!