KingbaseES使用dblink查询报错:unsupported for database link

适用于:

KingbaseES所有版本。

问题现象:

KingbaseES创建kingbase_fdw、kdb_database_link扩展插件并创建dblink连接后,在当前的连接使用刚创建的dblink连接可以正常查询数据。关闭或退出当前连接后,新的连接使用dblink查询报错ERROR: Unsupported for database link。

kdb_database_link 是 KingbaseES 为了兼容oracle 语法而开发的跨数据库访问扩展,用于访问KingbaseES, Postgresql , Oracle 。

kdb_database_link 实际是在kingbase_fdw上层进行了包装,创建kdb_database_link同时需要kingbase_fdw。

具体原因:

  1. 数据库kingbase.conf配置文件shared_preload_libraries 没有添加kdb_database_link扩展插件。

  2. 创建kdb_database_link扩展插件后,在当前的连接可以使用dblink查询数据。主要是由于创建kdb_database_link扩展插件后扩展调用的kdb_database_link共享库文件在当前连接进程里面有加载。

  3. 退出或者建立新的连接后,新开的连接进程里面未加载kdb_database_link扩展插件,使用dblink查询就会报错。

# 通过pmap pid可以看到kdb_database_link.so共享库文件在当前的连接进程有加载
$ pmap 847
847: kingbase: system test [local] idle
0000000000400000 9216K r-x-- kingbase
0000000000eff000 108K rw--- kingbase
0000000000f1a000 328K rw--- [ anon ]
0000000001816000 1400K rw--- [ anon ]
0000000001974000 1140K rw--- [ anon ]
00007fc83ca61000 100K r-x-- kingbase_fdw.so
00007fc83ca7a000 2048K ----- kingbase_fdw.so
00007fc83cc7a000 4K rw--- kingbase_fdw.so
00007fc83cc7b000 48K r-x-- kdb_database_link.so
00007fc83cc87000 2044K ----- kdb_database_link.so
00007fc83ce86000 4K rw--- kdb_database_link.so # 退出连接后,新连接pmap信息里面无kdb_database_link.so共享库文件
# 由于信息太多这里不展示,感兴趣可以根据复现用例,进行观察。

解决方法:

在数据库kingbase.conf配置文件shared_preload_libraries添加 kdb_database_link扩展。

# 示例
shared_preload_libraries = 'kdb_database_link,...'

问题复现:

1.创建kdb_database_link扩展插件

create extension kingbase_fdw;
create extension kdb_database_link;

2.创建dblink连接

#	DriverName :      连接驱动名称(同kingbase用户家目录下.odbc.ini文件里面名称保持一致)
# Host : 远程数据库网络地址
# Port : 远程数据库服务端口
# Dbname : 远程数据库名称
# DbType : 远程数据库类型
# DbType : 支持Oracle,KingbaseES,Postgres三种数据库类型 # 语法格式 test=# \help create database link
Command: CREATE DATABASE LINK
Description: define a new database link
Syntax:
CREATE [ PUBLIC ] DATABASE LINK dblink CONNECT TO user IDENTIFIED BY
'password' USING { connect_string | config_tag } # 示例 create public database link link30 connect to 'system' identified by 'system' using(DriverName='KingbaseES V8R6 ODBC Driver',Host='192.168.57.30',Port=54321,Dbname='test',Dbtype='kingbase');

3.使用创建的dblink查询数据

# 创建kdb_database_link扩展插件、创建dblink连接后不退出连接,直接使用创建的dblink查询

test=# select * from emp@link30;
id | name
----+------
2 | name
3 | name
(2 行记录)

4.退出当前连接或者新开连接

test=# \q
[kingbase@postgres ~]$ ksql -Usystem -dtest
ksql (V8.0)
输入 "help" 来获取帮助信息. test=# select * from emp@link31;
ERROR: Unsupported for database link. # 完成问题复现

最新文章

  1. 如何实现一个php框架系列文章【2】实现类的自动加载
  2. jsp/servlet 中sendRedirect,include,forward区别
  3. linux部分系统信息命令
  4. 以下css可以清除浮动
  5. 关于CSS动画效果的图片展示
  6. mysql的时间转化
  7. 6.Android之switch和togglebutton按钮学习
  8. 关于javascript获取页面高度宽度
  9. 修复南尼U盘
  10. 定义一个数,它可能为正 也可能为负 var num = Math.pow(-1,parseInt(Math.random() * 2) + 1);
  11. 下载visual studio 的离线包
  12. Django Form ModelForm modelfromset
  13. tomcat7 安装 windows 服务
  14. RxJava【创建】操作符 create just from defer timer interval MD
  15. APScheduler 浅析
  16. OVS 内核KEY值提取及匹配流表代码分析
  17. HDUOJ-----2068RPG的错排
  18. BLE pairing vs. bonding
  19. MongoDB - MongoDB CRUD Operations, Update Documents
  20. git学习------>Git 分支管理最佳实践

热门文章

  1. git pull与git pull --rebase
  2. Node.js的学习(三)node.js 开发web后台服务
  3. Installing ClickHouse-22.10.2.11 on openEuler
  4. 6、将两个字符串连接起来,不使用strcat函数
  5. bugku 矛盾
  6. 重学c#系列——逆变和协变[二十四]
  7. NLP手札1. 金融信息负面及主体判定方案梳理&代码实现
  8. <四>虚函数 静态绑定 动态绑定
  9. 腾讯云数据库SaaS致力于构建数据库分布式云,为更多更广的用户提供服务
  10. 7-3 停车场管理 (20point(s))