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)
复制
文章被以下合辑收录
评论

