Skip to content

数据源-来自外部数据源

概述

系统通过postgresql的fdw插件,支持将外部的数据库映射到本地,支持的数据库类型包含postgresql,mysql,sql server和Oracle。

TIP

此功能依赖postgresql的fdw插件,请确保数据库服务器上已经安装,在某些云服务器厂商的云数据库需要做额外的配置,关于fdw的更多信息请参考https://www.postgresql.org/docs/13/postgres-fdw.html

连接到外部数据库

  • 1.创建数据表模块,数据源类型选择外部数据库

  • 2.创建外部服务器参数配置

参数说明
数据库地址外部数据库的地址 示例: 104.249.164.122
数据库端口外部数据库的端口 示例:5432
数据库名称外部数据库的名称 示例:db_test
其他参数创建外部服务器的其他参数
  • 3.创建用户映射参数配置
参数说明
数据库账号外部数据库的账号 示例: postgres
数据库密码外部数据库的密码 示例:12345678
  • 4.创建外部表配置
参数说明
数据库Schema数据库Schema 示例: public
数据表名称外部数据库里需要引用表的名称 示例:t_test
其他参数创建外部表的其他参数
外部数据库表主键列名不填写默认为id

TIP

关于mysql_fdw的更多信息请参考 https://github.com/EnterpriseDB/mysql_fdw

腾讯云数据库跨库访问

腾讯云数据库跨库访问多了一个些腾讯云自定义的参数,详情可参考 https://www.tencentcloud.com/zh/document/product/409/44356

跨实例访问

需要在其他参数参数里设置参数为instanceid,值为远程数据库所在的实例ID。

不跨实例,仅跨 database 访问,仅需要填写 dbname 参数即可。

目标实例在腾讯云 CVM 上,且网络类型为基础网络。

需要在其他参数参数里设置如下参数

参数说明
instanceidins-xxxxx实例ID
access_type2目标实例所属类型
regionap-guangzhou目标实例所在地域
uinxxxxxx实例所属的账号 ID,通过该信息鉴定用户权限
own_uinxxxxxx实例所属的主账号 ID,同样需要该信息鉴定用户权限

目标实例在腾讯云 CVM 上,且网络类型为私有网络。

需要在其他参数参数里设置如下参数

参数说明
instanceidins-xxxxx实例ID
access_type2目标实例所属类型
regionap-guangzhou目标实例所在地域
uinxxxxxx实例所属的账号 ID,通过该信息鉴定用户权限
own_uinxxxxxx实例所属的主账号 ID,同样需要该信息鉴定用户权限
vpcidvpc-xxxxxx私有网络 ID
subnetidsubnet-xxxxx私有网络子网 ID

目标实例在腾讯云外网自建。

需要在其他参数参数里设置如下参数

参数说明
access_type3目标实例所属类型
regionap-guangzhou目标实例所在地域
uinxxxxxx实例所属的账号 ID,通过该信息鉴定用户权限
own_uinxxxxxx实例所属的主账号 ID,同样需要该信息鉴定用户权限

目标实例在腾讯云 VPN 接入的实例。

需要在其他参数参数里设置如下参数

参数说明
access_type4目标实例所属类型
regionap-guangzhou目标实例所在地域
uinxxxxxx实例所属的账号 ID,通过该信息鉴定用户权限
own_uinxxxxxx实例所属的主账号 ID,同样需要该信息鉴定用户权限
vpngwidxxxxxxVPN 网关 ID

目标实例在自建 VPN 接入的实例。

需要在其他参数参数里设置如下参数

参数说明
access_type5目标实例所属类型
regionap-guangzhou目标实例所在地域
uinxxxxxx实例所属的账号 ID,通过该信息鉴定用户权限
own_uinxxxxxx实例所属的主账号 ID,同样需要该信息鉴定用户权限
vpngwidxxxxxxVPN 网关 ID

目标实例在腾讯云专线接入的实例。

需要在其他参数参数里设置如下参数

参数说明
access_type6目标实例所属类型
regionap-guangzhou目标实例所在地域
uinxxxxxx实例所属的账号 ID,通过该信息鉴定用户权限
own_uinxxxxxx实例所属的主账号 ID,同样需要该信息鉴定用户权限
dcgidxxxxxx专线 ID

手动安装 FDW

概述

FDW (Foreign Data Wrapper) 是 PostgreSQL 的外部数据包装器,允许 PostgreSQL 访问外部数据源。

  • jdbc_fdw:用于连接 SQL Server 数据库
  • oracle_fdw:用于连接 Oracle 数据库

一、jdbc_fdw 安装(SQL Server)

1.1 下载安装包

根据操作系统,下载对应的安装包:

CentOS 7:

bash
wget https://repo.informat.cn/downloads/installer/fdw/centos/jdbc_fdw_centos7.zip

CentOS 8:

bash
wget https://repo.informat.cn/downloads/installer/fdw/centos/jdbc_fdw_centos8.zip

Ubuntu 22.04/24.04:

bash
wget https://repo.informat.cn/downloads/installer/fdw/ubuntu/jdbc_fdw.zip

1.2 解压安装包

bash
unzip jdbc_fdw_*.zip
cd jdbc_fdw_*

1.3 配置安装参数

在执行安装脚本前,需要根据实际环境修改 install.sh 脚本中的路径参数。使用文本编辑器打开脚本:

bash
vim install.sh

修改以下参数:

bash
INFORMAT_HOME_PATH="/informat-next"  # 织信安装目录,根据实际安装路径修改
HOME_PATH="/tmp"                      # FDW安装包所在目录,默认为/tmp,可根据实际解压路径修改
JDK_PATH="$INFORMAT_HOME_PATH/jdk"   # JDK所在目录,通常无需修改
PG_DIR="/usr/pgsql-13"               # PostgreSQL安装目录,根据实际安装路径修改

参数说明:

参数说明默认值示例
INFORMAT_HOME_PATH织信系统安装根目录/informat-next/opt/informat
HOME_PATHFDW安装包解压后的所在目录/tmp/opt/fdw_install
JDK_PATHJDK的安装目录(通常在织信目录下)$INFORMAT_HOME_PATH/jdk/informat-next/jdk
PG_DIRPostgreSQL的安装目录/usr/pgsql-13/usr/pgsql-13

配置示例:

如果您的织信安装在 /opt/informat,PostgreSQL 安装在 /usr/pgsql-13,安装包解压在 /opt/fdw_setup 目录,则应修改为:

bash
INFORMAT_HOME_PATH="/opt/informat"
HOME_PATH="/opt/fdw_setup"
JDK_PATH="$INFORMAT_HOME_PATH/jdk"
PG_DIR="/usr/pgsql-13"

1.4 执行安装脚本

配置完成后,保存并执行安装脚本:

bash
sudo chmod +x install.sh
sudo ./install.sh

安装脚本会自动完成以下操作:

  1. 检查是否已安装 jdbc_fdw(避免重复安装)
  2. 安装编译所需的依赖包
  3. 配置 JDK 环境变量
  4. 复制 SQL Server JDBC 驱动到 /opt/fdw/ 目录
  5. 编译并安装 jdbc_fdw
  6. 为 postgres 用户配置 JDK 环境

1.5 配置 PostgreSQL 扩展

以 postgres 用户身份登录数据库并创建扩展:

bash
# 先加载 JDK 环境
sudo -u postgres bash -c "source /var/lib/postgresql/jdk/jdk_env.sh && psql"

在 psql 中执行:

sql
CREATE EXTENSION IF NOT EXISTS jdbc_fdw;

1.6 验证安装

sql
\dx jdbc_fdw

如果显示扩展信息,说明安装成功。

二、oracle_fdw 安装(Oracle)

2.1 下载安装包

根据操作系统,下载对应的安装包:

CentOS 7/8:

bash
wget https://repo.informat.cn/downloads/installer/fdw/centos/oracle_fdw.zip

Ubuntu 22.04/24.04:

bash
wget https://repo.informat.cn/downloads/installer/fdw/ubuntu/oracle_fdw.zip

2.2 解压安装包

bash
unzip oracle_fdw.zip
cd oracle_fdw

2.3 配置安装参数

在执行安装脚本前,需要根据实际环境修改 install.sh 脚本中的路径参数。使用文本编辑器打开脚本:

bash
vim install.sh

修改以下参数:

bash
PG_DIR="/usr/pgsql-13"  # PostgreSQL安装目录,根据实际安装路径修改

参数说明:

参数说明默认值示例
PG_DIRPostgreSQL的安装目录/usr/pgsql-13/usr/pgsql-13

注意: oracle_fdw 的安装脚本会自动将 Oracle Instant Client 安装到 /opt/oracle 目录,该路径为固定路径,无需修改。

2.4 执行安装脚本

配置完成后,保存并执行安装脚本:

bash
sudo chmod +x install.sh
sudo ./install.sh

安装脚本会自动完成以下操作:

  1. 检查是否已安装 oracle_fdw(避免重复安装)
  2. 解压 Oracle Instant Client 到 /opt/oracle 目录
  3. 配置 Oracle 环境变量
  4. 编译并安装 oracle_fdw
  5. 配置系统动态库路径
  6. 重启 PostgreSQL 服务

2.5 验证安装

等待 PostgreSQL 服务重启完成后,登录数据库:

bash
sudo -u postgres psql

创建扩展:

sql
CREATE EXTENSION IF NOT EXISTS oracle_fdw;

验证:

sql
\dx oracle_fdw

三、故障排查

3.1 jdbc_fdw 常见问题

问题 1:找不到 libjvm.so

bash
# 创建符号链接(注意修改为实际的JDK路径)
sudo ln -sf /informat-next/jdk/lib/server/libjvm.so /usr/lib64/

问题 2:postgres 用户环境变量未生效

bash
# 手动加载环境变量后启动 PostgreSQL
sudo -u postgres bash -c "source /var/lib/postgresql/jdk/jdk_env.sh && pg_ctl restart"

问题 3:路径配置错误导致安装失败

检查 install.sh 中的路径配置是否正确:

  • 确认 INFORMAT_HOME_PATH 指向的目录存在
  • 确认 HOME_PATH 是当前安装包所在目录
  • 确认 PG_DIR 指向正确的 PostgreSQL 安装目录

可以使用以下命令验证路径:

bash
ls -la /informat-next/jdk          # 检查JDK目录
ls -la /usr/pgsql-13/bin/pg_config # 检查PostgreSQL目录

3.2 oracle_fdw 常见问题

问题 1:找不到 Oracle 客户端库

bash
# 重新加载动态库配置
sudo ldconfig

问题 2:PostgreSQL 未重启

bash
sudo systemctl restart postgresql-13

问题 3:环境变量未生效

bash
source /etc/profile.d/oracle.sh

问题 4:PostgreSQL 目录配置错误

确认 PG_DIR 配置正确:

bash
ls -la /usr/pgsql-13/bin/pg_config  # 检查pg_config是否存在

四、卸载说明

4.1 卸载 jdbc_fdw

sql
-- 删除扩展
DROP EXTENSION IF EXISTS jdbc_fdw CASCADE;
bash
# 删除相关文件
sudo rm -f /usr/pgsql-13/lib/jdbc_fdw.so
sudo rm -f /usr/pgsql-13/share/extension/jdbc_fdw*
sudo rm -rf /var/lib/postgresql/jdk
sudo rm -f /etc/profile.d/jdk.sh
sudo rm -rf /opt/fdw

4.2 卸载 oracle_fdw

sql
-- 删除扩展
DROP EXTENSION IF EXISTS oracle_fdw CASCADE;
bash
# 删除相关文件
sudo rm -f /usr/pgsql-13/lib/oracle_fdw.so
sudo rm -f /usr/pgsql-13/share/extension/oracle_fdw*
sudo rm -rf /opt/oracle
sudo rm -f /etc/profile.d/oracle.sh
sudo rm -f /etc/ld.so.conf.d/oracle-instantclient.conf
sudo ldconfig