VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

基于外部表的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;