DBLink 扩展插件功能与 Kingbase_FDW 类似,用于远程访问KingbaseES 数据库。相比于Kingbase_FDW,DBLink 功能更强大,可以执行DML,还可以通过 begin ... end 完成事务操作。以下介绍dblink扩展的使用。

一、测试环境

  本地数据库 远程数据库
IP 192.168.237.42 192.168.237.43
用户 user_local user_remote

1、本地数据库创建用户

test=# create role user_local with login;
CREATE ROLE
test=# alter role user_local with password 'user_local';
ALTER ROLE
test=# create schema user_local authorization user_local;
CREATE SCHEMA

2、远程数据库创建用户与测试表

test=# create role user_remote with login;
CREATE ROLE
test=# alter role user_remote with password 'user_remote';
ALTER ROLE
test=# create schema user_remote authorization user_remote;
CREATE SCHEMA test=# \c test user_remote
You are now connected to database "test" as user "user_remote".
test=> create table t1(id integer,name char(9));
CREATE TABLE
test=> insert into t1 values(1,'a');
INSERT 0 1
test=> insert into t1 values(2,'b');
INSERT 0 1

二、创建扩展插件

1、创建扩展

test=# create extension dblink;
CREATE EXTENSION 创建后,pg_foreign_data_wrapper 会新增一条记录。
test=# select * from pg_foreign_data_wrapper where fdwname='dblink_fdw';
oid | fdwname | fdwowner | fdwhandler | fdwvalidator | fdwacl | fdwoptions
-------+------------+----------+------------+--------------+--------+------------
16466 | dblink_fdw | 10 | 0 | 16465 | |

2、创建Server

create server dblink_to43 foreign data wrapper dblink_fdw options (hostaddr '192.168.237.43' , dbname 'test');

test=# select * from pg_foreign_server where srvname='dblink_to43';
oid | srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions
-------+-------------+----------+--------+---------+------------+--------+---------------------------------------
24693 | dblink_to43 | 10 | 24692 | | | | {hostaddr=192.168.237.43,dbname=test}
(1 row) grant usage on foreign server dblink_to43 to user_local;

3、创建用户映射

create user mapping for user_local server dblink_to43 options (user 'user_remote' , password 'user_remote');

test=# select * from pg_user_mappings;
umid | srvid | srvname | umuser | usename | umoptions
-------+-------+-------------+--------+------------+-----------------------------------------
24694 | 24693 | dblink_to43 | 24645 | user_local | {user=user_remote,password=user_remote}
(1 row)

三、测试数据库访问

1、dblink 连接

test=> \c test user_local
You are now connected to database "test" as user "user_local".
test=> select dblink_connect('conn01','dblink_to43') ;
dblink_connect
----------------
OK
(1 row) test=> select * from sys_database_link;
oid | lnkname | lnknamespace | lnkuser | lnkowner | lnkserver | dbtype | lnkoptions | lnkcreated
-----+---------+--------------+---------+----------+-----------+--------+------------+------------
(0 rows) test=> select * from all_db_links;
owner | db_link | username | host | created
-------+---------+----------+------+---------
(0 rows)

以dblink_connect 方式连接,采用的是长连接,直到显示关闭,或者数据库会话结束。

Note:dblink 信息在 sys_database_link 是看不到的,sys_database_link 是配合 kdb_database_link 插件使用。

2、数据访问

test=> select * from dblink('conn01','select * from t1');
id | name
----+-----------
1 | a
2 | b
(2 rows) test=> select dblink_exec('conn01','insert into t1 values(1,''a'')');
dblink_exec
-------------
INSERT 0 1
(1 row) test=> select * from dblink_exec('conn01','insert into t1 values(1,''a'')');
dblink_exec
-------------
INSERT 0 1
(1 row)

3、事务操作

test=> SELECT dblink_exec('conn01', 'BEGIN');
dblink_exec
-------------
BEGIN
(1 row) test=> select dblink_exec('conn01','insert into t1 values(1,''a'')');
dblink_exec
-------------
INSERT 0 1
(1 row) test=> SELECT dblink_exec('conn01', 'COMMIT');
dblink_exec
-------------
COMMIT
(1 row)

4、断开连接

test=> SELECT dblink_disconnect('conn01');
dblink_disconnect
-------------------
OK
(1 row)

四、其他注意点

以上例子的是用dblink_connect 创建连接,是长连接。也可以在执行SQL的同时创建连接:

test=> select * from dblink('dbname=test host=192.168.237.43 port=54321 user=user_remote password=user_remote','select * from t1');

还有,dblink 实际是数据库的连接,前提是目标端的 sys_hba.conf 必须支持连接。

KingbaseES DBLink 扩展介绍的更多相关文章

  1. Unity 3D编辑器扩展介绍、教程(二) —— 创建窗口

    Unity编辑器扩展教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 Brief Introd ...

  2. KingbaseES interval 分区表介绍

    KingbaseES从V008R006C005B0041版本开始支持Oracle的Interval分区表功能. Interval分区表是一种特殊的范围分区表.当执行INSERT或者UPDATE时,若数 ...

  3. KingbaseES 全文检索功能介绍

    KingbaseES 内置的缺省的分词解析器采用空格分词,因为中文的词语之间没有空格分割,所以这种方法并不适用于中文.要支持中文的全文检索需要额外的中文分词插件:zhparser and sys_ji ...

  4. KingbaseES sys_prewarm 扩展

    Oracle 在查询数据 可以通过cache hint 所访问的数据cache 到数据库buffer,对于KingbaseES,如何将数据加载到cache 了?sys_prewarm 扩展插件可以实现 ...

  5. OC中类的扩展介绍

    对OC类的扩展总结如下: 共有4个: 1.子类 subClass 作用:可以使用类的继承来增添父类的变量和方法. 写法:在.h文件中 @interface Student : Person 2.分类 ...

  6. Unity 3D编辑器扩展介绍、教程(一) —— 创建菜单项

    Unity编辑器扩展教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 Brief Introduct ...

  7. VS功能扩展--扩展介绍

    使用Eclipse的朋友都知道Eclipse是一个完全可扩展的IDE,那么在windows程序开发时,我们常使用的IDE(Visual studio)是否具有功能的扩展性呢?毫无疑问,回答是肯定的.我 ...

  8. KingbaseES 中 JSON 介绍

    KingbaseES支持JSON和JSONB.这两种类型在使用上几乎完全一致,主要区别是 JSON类型把输入的数据原封不动的存放到数据库中.JSONB类型在存放时把JSON解析成二进制格式. JSON ...

  9. KingbaseES ksqlrc文件介绍

    ksqlrc文件作用 ksql在连接到数据库后但在接收正常的命令之前,会尝试读取并执行该文件中的命令,如果加上-X参数,则跳过该文件. 系统级的启动文件是ksqlrc,文件在安装好的KingbaseE ...

随机推荐

  1. 如何准备论文线上Presentation视频录制教程(Summary of Video Recording)

    0:前言 由于国外的疫情严重,目前大多数学术会议都是线上举办,因此往往需要制作presentation的视频录制.由于各种软件横飞,有的需要会员并且不熟悉操作,特别浪费时间.因此,我将这次的操作和遇到 ...

  2. NAT模式 LVS负载均衡群集部署

    NAT模式 LVS负载均衡群集部署的操作步骤 实验环境准备: 负载调度器:内网关 ens33:172.16.10.1,外网关 ens37:12.0.0.1 Web节点服务器1:172.16.10.10 ...

  3. Java + Selenium + OpenCV解决自动化测试中的滑块验证

    最近工作过程中,一个常用的被测网站突然增加了滑块验证环节,导致整个自动化项目失效了. 为了解决这个滑块验证问题,在网上查阅了一些资料后,总结并实现了解决方案,现记录如下. 1.滑块验证思路 被测对象的 ...

  4. Taro框架完美使用Axios

    前言 众所周知,在H5前端开发中,axioshttp库几乎是必选.大部分人都对它的使用非常熟悉.然而在小程序开发中,axios怎么没法用,需要使用对应平台提供的http接口,如微信小程序的wx.req ...

  5. Python 封装SNMP调用接口

    PySNMP 是一个纯粹用Python实现的SNMP,用PySNMP的最抽象的API为One-line Applications,其中有两类API:同步的和非同步的,都在模块pysnmp.entity ...

  6. python 链表、堆、栈

    简介 很多开发在开发中并没有过多的关注数据结构,当然我也是,因此,我写这篇文章就是想要带大家了解一下这些分别是什么东西. 链表 概念:数据随机存储,并且通过指针表示数据之间的逻辑关系的存储结构. 链表 ...

  7. c语言中的gets和fgets的使用差别

    gets和fgets的差别 2022年6月30日 #include<stdio.h> #include<string.h> #define STLEN 8 int main(i ...

  8. resubmit 渐进式防重复提交框架简介

    resubmit resubmit 是一款为 java 设计的渐进式防止重复提交框架. 推荐阅读: 面试官:你们的项目中是怎么做防止重复提交的? resubmit 渐进式防重复提交框架简介 创作目的 ...

  9. Luogu3402【模板】可持久化并查集 (主席树)

    用\(depth\)按秩合并,不能直接启发,数组开40倍左右 #include <iostream> #include <cstdio> #include <cstrin ...

  10. 面试突击74:properties和yml有什么区别?

    properties 和 yml 都是 Spring Boot 支持的两种配置文件,它们可以看作是 Spring Boot 在不同时期的两款"产品".在 Spring Boot 时 ...