VastbaseG100

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

Menu

dblink

功能描述

dblink是一个可以在一个Vastbase数据库会话中连接到其它Vastbase数据库的工具。

本章主要介绍 dblink 插件的功能。

关于 Vastbase 数据库兼容 Oracle 语法 CREATE DATABASE LINK 的详细信息,请参见DATABASE LINK

注意事项

因 Vastbase 与 PostgreSQL 依赖冲突,因此无法连接至 PostgreSQL 数据库。

语法格式

  • 加载 dblink 扩展。

    CREATE EXTENSION dblink;
    
  • 打开一个到远程数据库的持久连接。

    如果不指定 connname,则会开启一个未命名连接。可以同时打开多个不同名称的连接,仅支持同时打开一个未命名的连接。

    连接会持续到手动关闭,或者数据库会话结束。

    SELECT dblink_connect(constr);
    SELECT dblink_connect(connname,connstr);
    
  • 关闭一个到远程数据库的持久连接。

    如果不指定 connname,则表示关闭未命名连接。

    SELECT dblink_disconnect();
    SELECT dblink_disconnect(connname);
    
  • 在远程数据库执行查询。

    可以通过指定 conname 或 connstr 来指定连接执行查询,如果不指定,则表示使用未命名连接。

    SELECT * FROM dblink(connname, sql_statement [, fail_on_error]);
    SELECT * FROM dblink(connstr, sql_statement [, fail_on_error]);
    SELECT * FROM dblink(sql_statement [, fail_on_error])
    

    dblink 会返回record,而不是指定任何特定的列集合,也就是说,FROM子句的别名部分必须指定函数将返回的列名和类型。例如:

    SELECT *
        FROM dblink('dbname=postgres', 'select proname, prosrc from pg_proc')
          AS t1(proname name, prosrc text)
        WHERE proname LIKE 'bytea%';
    

    在运行时,如果来自远程数据库的实际查询结果的列数与from子句中显示的列数不同,则会引发错误。因此,建议将dblink与视图配合使用,避免每次调用。因此,可以将上述业务修改为以下形式:

    CREATE VIEW view_16384 AS
      SELECT *
        FROM dblink('dbname=postgres', 'select proname, prosrc from pg_proc')
        AS t1(proname name, prosrc text);
    
    SELECT * FROM view_16384 WHERE proname LIKE 'bytea%';
    
  • 在远程数据库执行命令。

    SELECT dblink_exec(connname, sql_statement [, fail_on_error]);
    SELECT dblink_exec(connstr, sql_statement) [, fail_on_error];
    SELECT dblink_exec(sql_statement [, fail_on_error]);
    
  • 在远程数据库打开游标。

    SELECT dblink_open(cursorname, sql_statement [, fail_on_error]);
    SELECT dblink_open(connname, cursorname, sql_statement [, fail_on_error]);
    
  • 在远程数据库从打开的游标返回行。

    SELECT dblink_fetch(cursorname, howmany [, fail_on_error])
    SELECT dblink_fetch(connname, cursorname, howmany [, fail_on_error])
    
  • 在远程数据库关闭游标。

    SELECT dblink_close(cursorname [, fail_on_error]);
    SELECT dblink_close(connname, cursorname [, fail_on_error]);
    
  • 返回所有打开的命名dblink连接的名称。

    SELECT dblink_get_connections();
    
  • 查询指定连接最近的错误消息。

    SELECT dblink_error_message(connname);
    
  • 向远程数据库发送一个异步查询。

    SELECT dblink_send_query(connname, sql_statement);
    
  • 检查连接是否正在忙于一个异步查询。

    SELECT dblink_is_busy(connname);
    
  • 检索连接上的异步通知。

    SELECT dblink_get_notify();
    SELECT dblink_get_notify(connname);
    
  • 获取异步查询结果。

    SELECT dblink_get_result(connname[, fail_on_error]);
    
  • 取消连接上运行的所有查询。

    SELECT dblink_cancel_query(connname);
    
  • 查询远程数据库表的主键。

    SELECT dblink_get_pkey(relname)
    
  • 删除 dblink 扩展。

    DROP EXTENSION dblink;
    

参数说明

  • connname

    连接名称,可自定义。

  • connstr

    连接信息,例如:hostaddr=172.16.103.92 port=6036 dbname=vastbase user=vastbase password='Bigdata@123'

  • fail_on_error

    布尔值,设置为 True 表示远端如果发生错误,则也会返回到本地;如果设置为 False,远端的错误则会返回提示,函数返回值为 ERROR。

  • cursorname

    打开的游标名称。

  • sql_statement

    执行的语句。

  • relname

    远端表名。

示例

示例1: 常用函数操作。

1、创建扩展。

create extension dblink;

2、先执行dblink_connect保持连接。

SELECT dblink_connect('mycoon','hostaddr=172.16.103.92 port=6036 dbname=vastbase user=lst password=Bigdata@123');

3、执行BEGIN命令。

SELECT dblink_exec('mycoon', 'BEGIN');

4、执行数据操作。

SELECT dblink_exec('mycoon', 'create table people(id int,info varchar(10))');
SELECT dblink_exec('mycoon', 'insert into people values(1,''foo'')');
SELECT dblink_exec('mycoon', 'insert into people values(2,''foo'')');
SELECT dblink_exec('mycoon', 'update people set info=''bar'' where id=1');

5、执行事务提交。

SELECT dblink_exec('mycoon', 'COMMIT');

6、执行查询。

select * from dblink('mycoon','select * from people') as testTable (id int,info varchar(10));

7、解除连接。

SELECT dblink_disconnect('mycoon')

示例2:使用dblink_exec函数执行事务提交。

1.执行dblink_connect保持连接。

SELECT dblink_connect('mycoon','hostaddr=172.16.103.92 port=64324 dbname=postgres user=vastbase password="Bigdata@123"');

2.执行BEGIN命令

SELECT dblink_exec('mycoon', 'BEGIN');

3.执行数据操作

SELECT dblink_exec('mycoon', 'create table people(id int,info varchar(10))');
SELECT dblink_exec('mycoon', 'insert into people values(1,''foo'')');
SELECT dblink_exec('mycoon', 'insert into people values(2,''foo'')');
SELECT dblink_exec('mycoon', 'update people set info=''bar'' where id=1');

4.执行事务提交

SELECT dblink_exec('mycoon', 'COMMIT');

5.执行查询

select * from dblink('mycoon','select * from people') as testTable (id int,info varchar(10));

6.解除连接

SELECT dblink_disconnect('mycoon');