openGauss dblink

dblink是一个可以在openGauss数据库会话中连接到其它数据库的工具,同libpq支持的连接参数一致,也可以在通过在连接串中增加drivername(对应odbc.ini文件中的数据源名称)字段通过ODBC连接异构数据库。

libpq连接串详见:链接参数

ODBC的使用方法详见:ODBC

常用的dblink函数

参数

  • conname 要使用的连接名。忽略这个参数将使用未命名连接。

  • connstr 一个连接信息字符串。

  • sql 在远程数据库中执行的SQL查询,例如select * from foo。

  • fail_on_error 如果为真(忽略时的默认值),那么在连接的远端抛出的一个错误也会导致本地抛出一个错误。如果为假,远程错误只在本地被报告为一个 NOTICE,并且该函数不返回行。(只在通过libpq连接时候生效)

函数

  • 加载dblink扩展

    CREATE EXTENSION dblink;
    
  • dblink_connect

    描述:打开一个到远程数据库的持久连接

    返回值类型:text

    dblink_connect(text connstr)                        
    dblink_connect(text connname, text connstr)  
    
    SELECT dblink_connect('hostaddr=192.168.0.243 port=9876 dbname=postgres user=odbc password=abcdefg drivername=openGauss2');
    dblink_connect
    ----------------
    OK
    (1 row)   
    
  • dblink_disconnect

    描述:关闭一个到远程数据库的持久连接

    返回值类型:text

    SELECT dblink_disconnect();                         
    SELECT dblink_disconnect(text connname);  
    
    SELECT dblink_disconnect('test1');
    dblink_disconnect
    -------------------
    OK
    (1 row)
    
  • dblink

    描述:在远程数据库执行select语句

    返回值类型 :record集合

    该函数返回查询产生的行。因为dblink能与任何查询一起使用,它被声明为返回record,而不是指定任意特定的列集合。这意味着你必须指定在调用的查询中所期望的列集合。

    dblink(text connname, text sql [, bool fail_on_error])  
    dblink(text connstr, text sql [, bool fail_on_error])   
    dblink(text sql [, bool fail_on_error])       
    
    SELECT * FROM dblink('hostaddr=192.168.0.243 port=9876 dbname=postgres user=odbc password=abcdefg drivername=openGauss2',
        'select proname, prosrc from pg_proc') AS t1(proname name, prosrc text) WHERE proname LIKE 'bytea%';
    proname   |   prosrc
    ------------+------------
    byteacat   | byteacat
    byteaeq    | byteaeq
    bytealt    | bytealt
    byteale    | byteale
    byteagt    | byteagt
    byteage    | byteage
    byteane    | byteane
    byteacmp   | byteacmp
    bytealike  | bytealike
    byteanlike | byteanlike
    byteain    | byteain
    byteaout   | byteaout
    (12 rows)          
    
  • dblink_exec

    描述:在远程数据库执行非select语句

    返回值类型:text

    SELECT dblink_exec(text connname, text sql [, bool fail_on_error]) 
    SELECT dblink_exec(text connstr, text sql [, bool fail_on_error]) 
    SELECT dblink_exec(text sql [, bool fail_on_error])
    
    SELECT dblink_exec('myconn', 'insert into foo values(21,''z'',''{"a0","b0","c0"}'');');
    dblink_exec
    ----------------
    OK
    (1 row)
    
  • dblink_open

    描述:在一个远程数据库中打开一个游标

    返回值类型:text

    SELECT dblink_open(text cursorname, text sql [, bool fail_on_error])
    SELECT dblink_open(text connname, text cursorname, text sql [, bool fail_on_error])
    
    SELECT dblink_open('foo', 'select proname, prosrc from pg_proc');
    dblink_open
    -------------
    OK
    (1 row)
    
  • dblink_fetch

    描述:从一个远程数据库中的打开的游标返回行

    返回值类型:record集合

    SELECT dblink_fetch(text cursorname, int howmany [, bool fail_on_error])
    SELECT dblink_fetch(text connname, text cursorname, int howmany [, bool fail_on_error])
    
    SELECT * FROM dblink_fetch('foo', 5) AS (funcname name, source text);
    funcname |  source
    ----------+----------
    byteacat | byteacat
    byteacmp | byteacmp
    byteaeq  | byteaeq
    byteage  | byteage
    byteagt  | byteagt
    (5 rows)
    
  • dblink_close

    描述:关闭一个远程数据库中的游标

    返回值类型:text

    SELECT dblink_close(text cursorname [, bool fail_on_error])
    SELECT dblink_close(text connname, text cursorname [, bool fail_on_error])
    
    SELECT dblink_close('foo');
    dblink_close
    --------------
    OK
    (1 row)
    
  • dblink_get_connections()

    描述:返回所有打开的命名dblink连接的名称

    返回值类型:text 返回一个数组,其中是所有打开的命名dblink连接的名称。

    SELECT dblink_get_connections()
    
     dblink_get_connections 
    ------------------------
    {b,a,pq}
    (1 row)
    
  • dblink_error_message

    描述:得到在命名连接上的最后一个错误消息

    返回值类型:text

    SELECT dblink_error_message(text connname)
    
  • dblink_send_query

    描述:发送一个异步查询到远程数据库

    返回值类型:int 成功返回1,失败返回0

    SELECT dblink_send_query(text connname, text sql)
    SELECT dblink_send_query('dtest1', 'SELECT * FROM foo WHERE f1 < 3');
    
  • dblink_is_busy

    描述:检查连接是否正在忙于一个异步查询

    返回值类型:int 连接正忙返回1,不忙返回0

    SELECT dblink_is_busy(text connname)
    
  • dblink_get_notify

    描述:在一个连接上检索异步通知

    dblink_get_notify在一个未命名连接或者一个指定的命名连接上检索通知。要通过 dblink 接收通知,首先必须使用dblink_exec发出LISTEN

    返回值类型:集合

    SELECT dblink_get_notify()
    SELECT dblink_get_notify(text connname)
    
    SELECT dblink_exec('LISTEN virtual');
    dblink_exec
    -------------
    LISTEN
    (1 row)
    
    SELECT * FROM dblink_get_notify();
    notify_name | be_pid | extra
    -------------+--------+-------
    (0 rows)
    
    NOTIFY virtual;
    NOTIFY
    
    SELECT * FROM dblink_get_notify();
    notify_name | be_pid | extra
    -------------+--------+-------
    virtual     |   1229 |
    (1 row)
    
  • dblink_get_result

    描述:收集之前dblink_send_query发送的一个异步查询的结果。如果该查询还没有完成,dblink_get_result将等待直到它完成。

    返回值类型:record集合

    SELECT dblink_get_result(text connname [, bool fail_on_error])
    
    contrib_regression=# SELECT * FROM
    contrib_regression-# dblink_send_query('dtest1', 'select * from foo where f1 < 3; select * from foo where f1 > 6') AS t1;
    t1
    ----
    1
    (1 row)
    
    contrib_regression=# SELECT * FROM dblink_get_result('dtest1') AS t1(f1 int, f2 text, f3 text[]);
    f1 | f2 |     f3
    ----+----+------------
    0 | a  | {a0,b0,c0}
    1 | b  | {a1,b1,c1}
    2 | c  | {a2,b2,c2}
    (3 rows)
    
  • dblink_cancel_query

    描述:在命名连接上取消任何活动查询

    返回值类型:text

    SELECT dblink_cancel_query(text connname)
    
  • dblink_get_drivername

    描述:从odbc.ini中找到已配置的驱动名称

    返回值类型:text

    SELECT dblink_get_drivername
    
    SELECT dblink_get_drivername;
    dblink_get_drivername
    ----------------
    openGsuss,openGauss2
    (1 row)
    
  • 删除扩展

    DROP EXTENSION dblink;
    

注意事项

  • 目前dblink支持通过odbc连接所有支持odbc的异构数据库,以及通过libpq连接opengauss数据库。
  • 判断odbc或者libpq的条件为connstr中的drivername字段,存在drivername通过odbc连接,不存在drivername通过libpq连接,通过odbc连接只需指定用户名,密码,驱动名称三个参数即可,其他参数不生效。
  • 目前dblink暂时不支持线程池模式。
  • dblink_open,dblink_fetch,dblink_close 三个关于游标使用的函数,本质上为提前组装SQL语句,然后通过exec执行,因不同数据库语法有差异,不兼容的情况下,请通过dblink_exec来手动执行SQL控制游标。在通过odbc连接openGauss时,请自行通过dblink_exec打开/关闭事务。
  • dblink异步执行系列函数请务必执行正确的SQL语句,否则可能会导致异步执行函数异常。
  • 因openGauss与postgressql依赖冲突,暂时无法连接至postgresql数据库。
详情查看:https://opengauss.org
详情查看:https://docs-opengauss.osinfra.cn
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值