金仓数据库KingbaseES 跨库访问
摘要:KingbaseES数据库在不同模式下实现跨库访问的方法:1.Oracle模式下使用kdb_database_link插件,需配置kingbase.conf并创建数据库链接;2.MySQL模式下通过mysql_fdw扩展实现,需创建外部服务器、用户映射和外部表。两种方法均需先安装相应扩展,Oracle模式支持异构数据库访问,MySQL模式仅支持通过外部表方式查询远程数据。具体操作包括配置连接
一、KingbaseES Oracle 模式下
KingbaseES oracle模式下跨库访问,使用kdb_database_link
1.kingbase.conf的 shared_preload_libraries 增加kdb_database_link,重启数据生效;
2.登录到库,创建插件
create extension kdb_database_link ;
create extension kingbase_fdw ;
3.创建dblink
create public database link dblink_kes connect to 'sde' identified by 'Kdb@2025' using (DriverName = 'KingbaseES V8R6 ODBC Driver' , Host = '59.200.188.9' , Port = 54321 , Dbname = 'arcdata' , Dbtype = 'kingbase');
访问异构数据库类似,区别就是Dbtype类型不一样。
二、KingbaseES Mysql模式下跨库访问
mysql模式下无dblink,只能使用mysql_fdw,mysql_fdw模块提供了外部数据包装器mysql_fdw,它可以被用来访问存储在外部KingbaseES服务器中的数据。
-
使用CREATE EXTENSION来安装mysql_fdw扩展。
-
使用CREATE SERVER创建一个外部服务器对象,它用来表示你想连接的每一个远程数据库。指定除了user和password之外的连接信息作为该服务器对象的选项。
-
使用CREATE USER MAPPING创建一个用户映射,每一个用户映射都代表你想允许一个数据库用户访问一个外部服务器。指定远程用户名和口令作为用户映射的user和password选项。
-
为每一个你想访问的远程表使用CREATE FOREIGN TABLE或者IMPORT FOREIGN SCHEMA创建一个外部表。外部表的列必须匹配被引用的远程表。但是,如果你在外部表对象的选项中指定了正确的远程名称,可以使用不同于远程表的表名和/或列名。
CREATE EXTENSION mysql_fdw;
CREATE SERVER foreign_server_3306
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (host '192.168.56.203', port '3306');
CREATE USER MAPPING FOR u1
SERVER foreign_server_3306
OPTIONS (username 'root', password 'mysql');
create foreign table tab_test(id int, name text) server foreign_server_3306 options(dbname 'db',table_name 'tab_test');
具体例子如下:
db1=# CREATE SERVER foreign_server_3306
db1-# FOREIGN DATA WRAPPER mysql_fdw
db1-# OPTIONS (host '192.168.56.203', port '3306');
CREATE SERVER
db1=#
db1=#
db1=# CREATE USER MAPPING FOR u1
db1-# SERVER foreign_server_3306
db1-# OPTIONS (username 'root', password 'mysql');
CREATE USER MAPPING
db1=#
db1=#
db1=#
db1=#
db1=# create foreign table tab_test(id int, name text) server foreign_server_3306 options(dbname 'db',table_name 'tab_test');
CREATE FOREIGN TABLE
db1=# select * from tab_test;
id | name
----+------
1 | a
2 | b
(2 行记录)
db1=#
更多推荐
所有评论(0)