暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

openGauss支持oracle_fdw和mysql_fdw

原创 多米爸比 2020-10-26
2605

FDW(Foreign Data Wrappers)插件允许在openGauss里访问其他异构数据库的表,openGauss支持Foreign Data Wrappers for oracle (oracle_fdw),Foreign Data Wrappers for MySQL(mysql_fdw)和Foreign Data Wrappers for PostgreSQL(Postgres_fdw),从而支持在openGauss中访问异构其他数据库。

使用postgres_fdw插件不需要重新编译openGauss,具有系统管理员权限用户直接使用create extension创建扩展组件,普通用户即可create server配置异构数据库连接参数,create user mapping创建异构用户映射关系,CREATE FOREIGN TABLE创建指定数据库的外表。

使用oracle_fdw和mysql_fdw插件需要安装相应数据库的客户端包,同时需要重新编译openGauss,在configure时配置enable_mysql_fdw和enable_oracle_fdw。数据库里创建扩展与上面使用postgres_fdw类似。

数据库客户端包安装

mysql(mariadb)头文件

opengauss源码编译开启enable_mysql_fdw需要依赖头文件mariadb_com.h
查找资料得知mariadb_com.h在这个包下
mariadb-connector-c-devel-3.0.10-1.el7.x86_64.rpm

# rpm -ql mariadb-connector-c-devel-3.0.10-1.el7 |grep mariadb_com.h
/usr/include/mysql/mariadb_com.h

Centos7.6下顺藤摸瓜按依赖安装

# rpm -ivh MariaDB-common-5.5.68-1.el7.centos.x86_64.rpm
# rpm -ivh crypto-policies-20170816-1.git2618a6c.el7.noarch.rpm
# rpm -ivh openssl11-libs-1.1.0i-1.el7.x86_64.rpm
# rpm -ivh mariadb-connector-c-3.0.10-1.el7.x86_64.rpm
# rpm -ivh mariadb-connector-c-devel-3.0.10-1.el7.x86_64.rpm

依赖包找不到的可以评论留言我

oracle客户端包

# yum install oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm 
# yum install oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm 

安装完上面两个包后,修改下动态库环境变量

# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib/oracle/11.2/client64/lib

# ldconfig

opengauss-sever源码编译

configure配置enable_mysql_fdw和enable_oracle_fdw

./configure  --prefix=/opt/og \
--gcc-version=8.2.0 \
--3rd=/opt/binarylibs \
--with-readline \
--with-zlib \
--with-libxml \
--enable-mysql-fdw \
--enable-oracle-fdw \
--enable-thread-safety \
CC=g++ CFLAGS="-O2 -g3"

make

make -sj
make -sj install

初始化

/opt/og/bin/gs_initdb --nodename=og_6432 \
--pgdata=/opt/ogdata \
--encoding=UTF-8 \
--locale=en_US.UTF-8 \
--username=omm \
--pwpasswd=Enmotech@2020 \
--security

vi /opt/ogdata/postgresql.conf
port=6432
listen_addresses = '0.0.0.0'
password_encryption_type = 0 

启动服务

/opt/og/bin/gs_ctl start -D /opt/ogdata -l og_server.log &

创建用户

create user postgres sysadmin IDENTIFIED BY 'Enmotech@2020';
create user opengauss IDENTIFIED BY 'Enmotech@2020';

postgres用户具有管理权限,而已用来创建extension 及分配普通用户使用fdw的权限
opengauss普通用户可以创建server及使用外部表

FDW测试

mysql_fdw测试

创建扩展(用户必须有sysadmin权限)

$ gsql -p6432 -Upostgres postgres

postgres=>  create extension mysql_fdw with schema public;
CREATE EXTENSION

查看扩展版本

postgres=> select mysql_fdw_version();
 mysql_fdw_version 
-------------------
             20503
(1 row)

postgres用户(有sysadmin管理权限)赋予普通用户opengauss使用mysql_fdw权限

postgres=> grant USAGE on FOREIGN data wrapper mysql_fdw to opengauss;
GRANT

普通用户opengauss操作创建server

postgres=> create server server_mysql foreign data wrapper mysql_fdw options(host'172.19.0.100',port '3306');
CREATE SERVER

普通用户opengauss操作创建用户映射

postgres=> create user mapping for opengauss server server_mysql options(username 'root',password '123456');
CREATE USER MAPPING

普通用户opengauss创建外部表

postgres=> create foreign table f_mysql_t1(
id int
)server server_mysql 
options (dbname 'mysql',table_name 't1');
CREATE FOREIGN TABLE

通过外部表查询mysql数据库表数据

postgres=> select * from f_mysql_t1;
  id  
------
 1001
(1 row)

从opengauss端写入数据到mysql

postgres=> insert into f_mysql_t1 values(1002);
INSERT 0 1

注意mysql端表必须有主键或唯一索引,否则会报错

postgres=> insert into f_mysql_t1 values(1002);
ERROR:  first column of remote table must be unique for INSERT/UPDATE/DELETE operation

再次查看数据

postgres=> select * from f_mysql_t1;
  id  
------
 1001
 1002
(2 rows)

oracle_fdw测试

与mysql_fdw类似,注意LD_LIBRARY_PATH配置了oracle的lib路径(/usr/lib/oracle/11.2/client64/lib)
创建扩展(用户必须有sysadmin权限)

$ gsql -p6432 -Upostgres postgres

postgres=#  create extension oracle_fdw with schema public;
CREATE EXTENSION

查看扩展版本

postgres=> select oracle_diag();
                         oracle_diag                          
--------------------------------------------------------------
 oracle_fdw 2.2.0, PostgreSQL 9.2.4, Oracle client 11.2.0.4.0
(1 row)

postgres用户(有sysadmin管理权限)赋予普通用户opengauss使用oracle_fdw权限

postgres=> grant USAGE on FOREIGN data wrapper oracle_fdw to opengauss;
GRANT

普通用户opengauss操作创建server

postgres=> create server server_oracle foreign data wrapper oracle_fdw options(dbserver '172.17.0.2:1521/lee');
CREATE SERVER

普通用户opengauss操作创建用户映射

postgres=> create user mapping for opengauss server server_oracle options(user 'system',password 'admin');
CREATE USER MAPPING

普通用户opengauss创建外部表

postgres=> create foreign table f_oracle_t2(
id int
)server server_oracle 
OPTIONS (
    schema 'SYSTEM',
    "table" 'T2'
);
CREATE FOREIGN TABLE

通过外部表查询oracle数据库t2表数据

postgres=> select * from f_oracle_t2;
  id  
------
 2001
(1 row)

从opengauss端写入数据到oracle数据库t2表

postgres=> insert into f_oracle_t2 values(2002);
INSERT 0 1

再次查看数据

postgres=> select * from f_oracle_t2 ;
  id  
------
 2001
 2002
(2 rows)
最后修改时间:2021-12-17 17:21:25
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论