本文以例子的形式介绍 KingbaseES(Postgresql)数据库如何通过 oracle_fdw 扩展访问Oracle数据库。以下例子在PG12.3 与 KingbaseES V8R6进行过实际验证。

一、准备数据

1、Oracle端

IP:192.168.237.42, SID:SOGG ,数据库用户:user01 / user01
SQL> create table t1(id integer,name char(9));

2、KingbaseES 端

IP:192.168.237.43
create role user_ora with login password 'user_ora';
create schema user_ora authorization user_ora;

二、安装配置

1、安装fdw

将官方提供的oracle_fdw包解压,将解压后相关的文件拷贝到对应的 share , lib 目录。注意:要确认安装包是否包含 libclntsh.so 文件,如果没有,需要从oracle 安装路径拷贝,或者安装instantclient。

2、创建扩展

oracle_fdw 包安装后,查 sys_available_extensions 可以看到 oracle_fdw extension。

create extension oracle_fdw;
create server to_ora42 foreign data wrapper oracle_fdw options(dbserver '//192.168.237.42:1521/SOGG');
grant usage on foreign server to_ora42 to user_ora;
create user mapping for user_ora server to_ora42 options(user 'user01',password 'user01');

server与mapping 创建后,在pg_foreign_server 和pg_user_mappings 会有相应条目

test=# select * from pg_foreign_server where srvname='to_ora42';
oid | srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions
-------+----------+----------+--------+---------+------------+--------+---------------------------------------
16552 | to_ora42 | 10 | 16549 | | | | {dbserver=//192.168.237.42:1521/SOGG} test=# select * from pg_user_mappings where srvname='to_ora42';
umid | srvid | srvname | umuser | usename | umoptions
-------+-------+----------+--------+----------+-------------------------------
16553 | 16552 | to_ora42 | 16550 | user_ora | {user=user01,password=user01}
(1 row)

3、外部表

create foreign table ft_t1(id integer,name char(9)) server to_ora42 options(schema 'USER01', table 'T1');

注意:这里的  'USER01' 和 'T1' 都是大写的,与Oracle 数据字典的信息大小写一致。否则在访问时会有如下问题:

test=> create foreign table ft_t1(id integer,name char(9)) server to_ora42 options(schema 'USER01', table 't1');
CREATE FOREIGN TABLE
test=> select * from ft_t1;
ERROR: Oracle table "USER01"."t1" for foreign table "ft_t1" does not exist or does not allow read access
DETAIL: ORA-00942: table or view does not exist
HINT: Oracle table names are case sensitive (normally all uppercase).

三、可以手动创建wrapper

create extension 后,pg_foreign_data_wrapper 默认就有 oracle_fdw , fdwoptions 为空。默认的wrapper 可能不能使用,可以新建wrapper,在 fdwoptions 可以指定些选项,比如字符集。

create foreign data wrapper oracle_fdw_1 handler oracle_fdw_handler validator oracle_fdw_validator options (nls_lang 'AMERICAN_AMERICA.ZHS16GBK');

Oracle_FDW 使用介绍的更多相关文章

  1. PostgreSQL之oracle_fdw安装与使用

    目的介绍 现在项目开发遇到一个问题,就是需要从PostgreSQL中访问Oracle数据库 身为渣渣猿一脸懵逼.于是乎请教了公司的数据库方面的大牛韩工.告诉我用oracle_fdw 可以实现,但是在实 ...

  2. oracle_fdw的安装和使用

    1.下载instant oracle client 下载网址:https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html ...

  3. KDB_Database_Link 使用介绍

    kdb_database_link 是 KingbaseES 为了兼容oracle 语法而开发的跨数据库访问扩展,可用于访问KingbaseES, Postgresql , Oracle .以下分别介 ...

  4. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  5. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  6. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  7. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  8. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  9. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

随机推荐

  1. python超级有用的实战项目,拿走不谢~

    写在前面的一点P话: Python是目前最好的编程语言之一.由于其可读性和对初学者的友好性,已被广泛使用. 那么要想学会并掌握Python,可以实战的练习项目是必不可少的. 直接上第一个项目~ 猜字游 ...

  2. 10.2 如何运行Android项目到Android Studio自带模拟器

    Android开发一般都可以将应用运行到模拟器查看效果,除非特殊项目要用到真机,所以我们这里先讲解如何将项目运行到模拟器,以校验我们的开发环境以及创建的项目是否有问题. 创建模拟器 点击"C ...

  3. Java封装Get/Post类

    封装的类: package pers.hmi.translate; import java.io.BufferedReader; import java.io.IOException; import ...

  4. CF141E Clearing Up 题解

    思路分析 自认为是一道很好的思维题. 直接看上去的想法是: 跑一个生成树,每一次加的边颜色交替进行,直到拉出生成树. 仔细想想,发现可能无法保证最后是一棵树而不是森林,也是说输出都是 \(-1\) . ...

  5. Java实现动态代理

    1.实现InvocationHandler接口 这种方式只能针对接口实现类的实例对象. interface Hello{ public void sayHello(); } class HelloIm ...

  6. C#金额数字转换中文繁体

    /// <summary> /// 数字转换中文繁体金钱 /// </summary> /// <param name="Digital">&l ...

  7. GET 和 POST 请求的区别与安全性

    超文本传输协议( HTTP )是用于启用客户端与服务器之间的通信,其中 GET 请求和 POST 请求是则是 HTTP 方法中最为常用的两种.那么这 GET 和 POST 的区别到底是什么呢?两者是否 ...

  8. 我们应该测试 DAO 层吗?

    应该测试 DAO 层吗? 网上有很多人讨论单元测试是否应该包含 DAO 层的测试.笔者觉得,对于一些主要是crud的业务来说,service层和controller层都会非常薄,而主要的逻辑都落在ma ...

  9. NOI / 1.4编程基础之逻辑表达式与条件分支讲解-01:判断数正负

    总时间限制: 1000ms 内存限制: 65536kB 题目: 描述 给定一个整数N,判断其正负. 输入 一个整数N(-109 <= N <= 109) 输出 如果N > 0, 输出 ...

  10. 简单使用 MySQL 索引

    MySQL 索引 1 什么是索引 在数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令 MySQL 的查询和 运行更加高效. 如果合理的设计且使用索引的 MySQL 是一辆兰博基 ...