Appearance
数据源-来自外部数据源
概述
系统通过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 上,且网络类型为基础网络。
需要在其他参数参数里设置如下参数
| 参数 | 值 | 说明 |
|---|---|---|
| instanceid | ins-xxxxx | 实例ID |
| access_type | 2 | 目标实例所属类型 |
| region | ap-guangzhou | 目标实例所在地域 |
| uin | xxxxxx | 实例所属的账号 ID,通过该信息鉴定用户权限 |
| own_uin | xxxxxx | 实例所属的主账号 ID,同样需要该信息鉴定用户权限 |
目标实例在腾讯云 CVM 上,且网络类型为私有网络。
需要在其他参数参数里设置如下参数
| 参数 | 值 | 说明 |
|---|---|---|
| instanceid | ins-xxxxx | 实例ID |
| access_type | 2 | 目标实例所属类型 |
| region | ap-guangzhou | 目标实例所在地域 |
| uin | xxxxxx | 实例所属的账号 ID,通过该信息鉴定用户权限 |
| own_uin | xxxxxx | 实例所属的主账号 ID,同样需要该信息鉴定用户权限 |
| vpcid | vpc-xxxxxx | 私有网络 ID |
| subnetid | subnet-xxxxx | 私有网络子网 ID |
目标实例在腾讯云外网自建。
需要在其他参数参数里设置如下参数
| 参数 | 值 | 说明 |
|---|---|---|
| access_type | 3 | 目标实例所属类型 |
| region | ap-guangzhou | 目标实例所在地域 |
| uin | xxxxxx | 实例所属的账号 ID,通过该信息鉴定用户权限 |
| own_uin | xxxxxx | 实例所属的主账号 ID,同样需要该信息鉴定用户权限 |
目标实例在腾讯云 VPN 接入的实例。
需要在其他参数参数里设置如下参数
| 参数 | 值 | 说明 |
|---|---|---|
| access_type | 4 | 目标实例所属类型 |
| region | ap-guangzhou | 目标实例所在地域 |
| uin | xxxxxx | 实例所属的账号 ID,通过该信息鉴定用户权限 |
| own_uin | xxxxxx | 实例所属的主账号 ID,同样需要该信息鉴定用户权限 |
| vpngwid | xxxxxx | VPN 网关 ID |
目标实例在自建 VPN 接入的实例。
需要在其他参数参数里设置如下参数
| 参数 | 值 | 说明 |
|---|---|---|
| access_type | 5 | 目标实例所属类型 |
| region | ap-guangzhou | 目标实例所在地域 |
| uin | xxxxxx | 实例所属的账号 ID,通过该信息鉴定用户权限 |
| own_uin | xxxxxx | 实例所属的主账号 ID,同样需要该信息鉴定用户权限 |
| vpngwid | xxxxxx | VPN 网关 ID |
目标实例在腾讯云专线接入的实例。
需要在其他参数参数里设置如下参数
| 参数 | 值 | 说明 |
|---|---|---|
| access_type | 6 | 目标实例所属类型 |
| region | ap-guangzhou | 目标实例所在地域 |
| uin | xxxxxx | 实例所属的账号 ID,通过该信息鉴定用户权限 |
| own_uin | xxxxxx | 实例所属的主账号 ID,同样需要该信息鉴定用户权限 |
| dcgid | xxxxxx | 专线 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.zipCentOS 8:
bash
wget https://repo.informat.cn/downloads/installer/fdw/centos/jdbc_fdw_centos8.zipUbuntu 22.04/24.04:
bash
wget https://repo.informat.cn/downloads/installer/fdw/ubuntu/jdbc_fdw.zip1.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_PATH | FDW安装包解压后的所在目录 | /tmp | /opt/fdw_install |
| JDK_PATH | JDK的安装目录(通常在织信目录下) | $INFORMAT_HOME_PATH/jdk | /informat-next/jdk |
| PG_DIR | PostgreSQL的安装目录 | /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安装脚本会自动完成以下操作:
- 检查是否已安装 jdbc_fdw(避免重复安装)
- 安装编译所需的依赖包
- 配置 JDK 环境变量
- 复制 SQL Server JDBC 驱动到
/opt/fdw/目录 - 编译并安装 jdbc_fdw
- 为 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.zipUbuntu 22.04/24.04:
bash
wget https://repo.informat.cn/downloads/installer/fdw/ubuntu/oracle_fdw.zip2.2 解压安装包
bash
unzip oracle_fdw.zip
cd oracle_fdw2.3 配置安装参数
在执行安装脚本前,需要根据实际环境修改 install.sh 脚本中的路径参数。使用文本编辑器打开脚本:
bash
vim install.sh修改以下参数:
bash
PG_DIR="/usr/pgsql-13" # PostgreSQL安装目录,根据实际安装路径修改参数说明:
| 参数 | 说明 | 默认值 | 示例 |
|---|---|---|---|
| PG_DIR | PostgreSQL的安装目录 | /usr/pgsql-13 | /usr/pgsql-13 |
注意: oracle_fdw 的安装脚本会自动将 Oracle Instant Client 安装到 /opt/oracle 目录,该路径为固定路径,无需修改。
2.4 执行安装脚本
配置完成后,保存并执行安装脚本:
bash
sudo chmod +x install.sh
sudo ./install.sh安装脚本会自动完成以下操作:
- 检查是否已安装 oracle_fdw(避免重复安装)
- 解压 Oracle Instant Client 到
/opt/oracle目录 - 配置 Oracle 环境变量
- 编译并安装 oracle_fdw
- 配置系统动态库路径
- 重启 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/fdw4.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
