一、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 'userxxx' identified by 'pwdxxxx' using (DriverName = 'KingbaseES V8R6 ODBC Driver' , Host = '59.200.xx.xx' , 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=#