KingbaseES dblink异常unsupported for database link
2024-09-08 14:03:04
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。
具体原因:
数据库kingbase.conf配置文件shared_preload_libraries 没有添加kdb_database_link扩展插件。
创建kdb_database_link扩展插件后,在当前的连接可以使用dblink查询数据。主要是由于创建kdb_database_link扩展插件后扩展调用的kdb_database_link共享库文件在当前连接进程里面有加载。
退出或者建立新的连接后,新开的连接进程里面未加载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.
# 完成问题复现
最新文章
- 如何实现一个php框架系列文章【2】实现类的自动加载
- jsp/servlet 中sendRedirect,include,forward区别
- linux部分系统信息命令
- 以下css可以清除浮动
- 关于CSS动画效果的图片展示
- mysql的时间转化
- 6.Android之switch和togglebutton按钮学习
- 关于javascript获取页面高度宽度
- 修复南尼U盘
- 定义一个数,它可能为正 也可能为负 var num = Math.pow(-1,parseInt(Math.random() * 2) + 1);
- 下载visual studio 的离线包
- Django Form ModelForm modelfromset
- tomcat7 安装 windows 服务
- RxJava【创建】操作符 create just from defer timer interval MD
- APScheduler 浅析
- OVS 内核KEY值提取及匹配流表代码分析
- HDUOJ-----2068RPG的错排
- BLE pairing vs. bonding
- MongoDB - MongoDB CRUD Operations, Update Documents
- git学习------>Git 分支管理最佳实践
热门文章
- git pull与git pull --rebase
- Node.js的学习(三)node.js 开发web后台服务
- Installing ClickHouse-22.10.2.11 on openEuler
- 6、将两个字符串连接起来,不使用strcat函数
- bugku 矛盾
- 重学c#系列——逆变和协变[二十四]
- NLP手札1. 金融信息负面及主体判定方案梳理&;代码实现
- <;四>;虚函数 静态绑定 动态绑定
- 腾讯云数据库SaaS致力于构建数据库分布式云,为更多更广的用户提供服务
- 7-3 停车场管理 (20point(s))