PostgreSQL的Mysql_fdw插件能不能连分布式mysql

发布时间 2023-04-25 00:42:03作者: 耀阳居士

PostgreSQL的Mysql_fdw插件能不能连分布式mysql

 

 

先说答案:不能连

select * from yjjk_company_cp;ERROR:  failed to retrieve query result set metadata: 

直接连报ERROR: failed to retrieve query result set metadata:

我们来分析一下代码,看看具体的原因。

通过报错,可以找到是在执行mysql_stmt_result_metadata
函数报了错。这个函数返回一个结果集,该结果集可用于处理元信息,例如字段总数和单个字段等信息,但是我们进到MyCAT这样的逻辑库中,是没有mysql、information_schema、performance_schema这些系统数据库的。所以这里一定会出错。

既然这条路行不通,那有解决办法吗?

"有,使用JDBC_fdw",通过JDBC驱动来连接其他类型的数据库。

--下载编译安装git https://github.com/atris/JDBC_FDW.git--这里需要把libjvm.so文件建个链接放在$PGHOME/lib下,不然编译会报错。cd $PGHOME/libln -sf /usr/java/jdk1.8.0_181/jre/lib/amd64/server/libjvm.so libjvm.somake USE_PGXS=1 install---创建扩展CREATE EXTENSION jdbc_fdw;---创建外部serverCREATE SERVER jdbc_mysql FOREIGN DATA WRAPPER jdbc_fdwOPTIONS(        drivername 'com.mysql.jdbc.Driver',        url 'jdbc:mysql://***.***.***.***:****/dbname',        querytimeout '15',        jarfile '/app/software/mysql-connector-java-5.1.30.jar',        maxheapsize '600');---创建用户映射CREATE USER MAPPING FOR root SERVER jdbc_mysqlOPTIONS(    username 'mysql_user',    password '************');---创建外部表CREATE FOREIGN TABLE yjjk_company_cp (  ID int,        cfdwdm varchar(20),        cfdwmc varchar(60),        hsdwdm varchar(20),        hsdwmc varchar(60) ) SERVER jdbc_mysql OPTIONS (table 'yjjk_company_cp'); --执行查询select count(1) from yjjk_company_cp; count -------   196

后记

以前不知道竟然还有JDBC_fdw,还是我孤陋寡闻了。现在只要有jdbc驱动,就可以连任何数据库,就和DBeaver一样的,一些大数据像hbase、hive都能连了。

当然这个在数据库里面操作好不好?我个人认为是不好的,偶尔用于拖拖数据,做下分析还可以。如果用于高并发环境,那我估计离挂不远了。所以还是得用Apache Calcite
这种软件才行。