基于外部表的dblink
功能描述
基于外部表的dblink可支持增删改查,创建server之后便可用@的方式访问其他数据库,目前只支持jdbc_dblink,且只能访问Oracle数据库。
说明
1) 集成jdbc_fdw,需要在postgresql.conf中添加如下参数配置:
shared_preload_libraries:支持在参数值中添加jdbc_fdw,使用jdbc_fdw必须配置该参数并重启数据库。
jdbc_fdw.maxheapsize:单位mb,默认值512,用于设置jvm的最大堆内存大小,重启数据库生效。
jdbc_fdw.minheapsize:单位mb,默认值256,用于设置jvm的初始堆内存大小,重启数据库生效。
jdbc_fdw.permpsize:单位mb,默认值16,用于设置jvm的初始非堆内存大小,重启数据库生效。
jdbc_fdw.maxpermpsize:单位mb,默认值64,用于设置jvm的最大非堆内存大小,重启数据库生效。
jdbc_fdw.stacksize:单位kb,默认值256,用于设置jvm的栈内存大小,重启数据库生效。
1)server的创建语法
2) database link 对象管理
语法格式
创建jdbc_fdw的server:
CREATE SERVER server_name FOREIGN DATA WRAPPER jdbc_fdw OPTIONS ( { option_name ‘ value ‘ } [ , … ] ) ;
创建jdbc_fdw的user mapping:
CREATE user mapping for vastbase server ora_jdbc options(username ‘system’,password ‘root’);
外部表创建语法:
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( { column definition } [ , … ] ) SERVER gsmpp_server OPTIONS ( { option_name ‘value’ } [ , … ] )
dblink创建语法:
CREATE DATABASE [ PUBLIC ] LINK dblink_name CONNECT TO username IDENTIFIED BY ‘password’ [ USING fdw_name] ( { option_name ‘ value’ } [ , … ] ) ;
dblink删除语法:
DROP DATABASE LINK dblink_name;
语法中的表对象表示格式:
[schema_name].table_name@dblink_name
示例
1.修改postgresql.sconf参数
将jdbc_fdw配置到shared_preload_libraries参数中
2.配置LD_LIBRARY_PATH环境变量:JDBC_FDW插件要求将libjvm.so所在路径加入该环境变量
libjvm.so文件存放在Vastbase安装目录的jre/lib/amd64/server/ 或 jre/lib/aarch64/server/ 子目录中,可以通过如下命令配置环境变量:
export LD_LIBRARY_PATH=$GAUSSHOME/jre/lib/amd64/server/:$LD_LIBRARY_PATH
或者
export LD_LIBRARY_PATH=$GAUSSHOME/jre/lib/aarch64/server/:$LD_LIBRARY_PATH
3.重启数据库实例
4.驱动包ojdbc7.jar放置到/home/vastbase224_0618/下
chmod 777 /home/vastbase224_0618/ojdbc7.jar
5.在需要使用jdbc_fdw的database下执行:
CREATE EXTENSION jdbc_fdw;
创建dblink:
CREATE DATABASE LINK dblink_104 CONNECT TO lst IDENTIFIED BY 'test' USING jdbc_fdw(
url 'jdbc:oracle:thin:@//172.16.103.104:1521/orcl',
jarfile '/home/vastbase_lst/ojdbc7.jar'
);
删除dblink:
DROP DATABASE LINK dblink_104;
创建通过该dblink访问外部表的同义词:
CREATE OR REPLACE SYNONYM syn1 FOR fdw_t11@ora_dblink1;
创建时,可指定远端的schema:
CREATE OR REPLACE SYNONYM syn2 FOR system.fdw_t1@ora_dblink1;
创建后,可以在系统表pg_synonym查询到同义词定义:
SELECT * FROM pg_synonym WHERE synname = ‘syn1’;
操作该同义词等价于操作dblink外部表:
INSERT INTO syn1(c1,c2) values (1,’synon1’),(2,’synon2’),(3,’synon3’);
UPDATE syn1 SET c2=’update_syn’ where c1=3;
SELECT * FROM syn1;
DELETE FROM syn1;