kingbase创建dblink

KingbaseES 提供两种实现:
  • 原生 dblink:基于 PostgreSQL 内核,轻量灵活,随取随用
  • kdb_database_link:Oracle 语法兼容版,支持更多异构数据库(Oracle、SQLServer 等)
 

方式一:使用原生 dblink 扩展(推荐)

1. 启用 dblink 扩展

-- 连接到目标数据库
\c your_database_name  -- 替换为实际数据库名

-- 创建dblink扩展(不存在则创建)
CREATE EXTENSION IF NOT EXISTS dblink;

-- 验证扩展是否加载成功
SELECT * FROM pg_extension WHERE extname = 'dblink';

2. 建立远程连接(两种方式)

方式 A:临时连接(会话级)
 
-- 连接远程KingbaseES数据库
SELECT dblink_connect('remote_conn', 
  'host=192.168.1.100 port=54321 dbname=remote_db user=remote_user password=remote_pwd');

-- 执行远程查询
SELECT * FROM dblink('remote_conn', 'SELECT id, name FROM public.users') 
  AS t(id INT, name VARCHAR);

-- 关闭连接
SELECT dblink_disconnect('remote_conn');
 
方式 B:直接执行(无状态)
SELECT * FROM dblink(
  'host=192.168.1.100 port=54321 dbname=remote_db user=remote_user password=remote_pwd',
  'SELECT id, name FROM public.users'
) AS t(id INT, name VARCHAR);
 

方式二:使用 kdb_database_link 扩展(Oracle 兼容)

1. 前置配置(关键)

  1. 修改kingbase.conf配置文件,添加扩展到共享预加载库:
    shared_preload_libraries = 'kdb_database_link'  # 如需其他插件,用逗号分隔
  2. 重启 KingbaseES 服务使配置生效:
     
    sys_ctl restart -D /path/to/kingbase/data
    

2. 创建扩展

-- 以system用户连接数据库
ksql -Usystem -d your_database_name

-- 创建kdb_database_link扩展
CREATE EXTENSION kdb_database_link;

-- 若连接其他数据库(如Oracle),需额外创建对应fdw扩展
-- CREATE EXTENSION oracle_fdw;  -- 连接Oracle时
-- CREATE EXTENSION kingbase_fdw;  -- 连接KingbaseES时

3. 创建 Database Link 对象

-- 创建公有DBLink(所有用户可使用)
CREATE PUBLIC DATABASE LINK remote_kes_link
CONNECT TO 'remote_user' IDENTIFIED BY 'remote_pwd'
USING (
  DriverName='KES ODBC Driver',
  Host='192.168.1.100',
  Port=54321,
  Dbname='remote_db',
  Dbtype='kingbase'
);

-- 创建私有DBLink(仅创建者可用)
CREATE DATABASE LINK private_kes_link
CONNECT TO 'remote_user' IDENTIFIED BY 'remote_pwd'
USING (
  DriverName='KES ODBC Driver',
  Host='192.168.1.100',
  Port=54321,
  Dbname='remote_db',
  Dbtype='kingbase'
);
```{insert\_element\_2\_}

#### 4. 使用DBLink查询
```sql
-- 查询远程表
SELECT * FROM remote_table@remote_kes_link;

-- 执行远程DML操作
INSERT INTO remote_table@remote_kes_link (id, name) VALUES (1, 'test');
UPDATE remote_table@remote_kes_link SET name = 'update' WHERE id = 1;
DELETE FROM remote_table@remote_kes_link WHERE id = 1;

### 四、常见场景示例

| 场景 | 示例SQL |
|------|---------|
| 连接远程KingbaseES | CREATE PUBLIC DATABASE LINK kes_link CONNECT TO 'system' IDENTIFIED BY 'system' USING (DriverName='KES ODBC Driver',Host='192.168.10.40',Port=5432,Dbname='test',Dbtype='kingbase'); |
| 连接Oracle | CREATE PUBLIC DATABASE LINK oracle_link CONNECT TO 'SYSTEM' IDENTIFIED BY 'password' USING (DriverName='Oracle ODBC Driver',Host='192.168.0.1',Port=1521,Dbname='orcl',dbType='Oracle'); |
| 连接PostgreSQL | CREATE PUBLIC DATABASE LINK pg_link CONNECT TO 'postgres' IDENTIFIED BY 'postgres' USING (DriverName='PostgreSQL ODBC Driver',Host='192.168.0.2',Port=5432,Dbname='pgdb',dbType='postgresql'); |

posted @ 2026-05-12 08:56  网络大法师  阅读(42)  评论(0)    收藏  举报